不启动 FINSH_USING_HISTORY 程序运行正常,msh命令都能得到反馈,结果也正确。
当启动FINSH_USING_HISTORY时,第一个命令类似free ps 字符小于5个的命令正常工作,当命令字符大于5个list_sem 等,或者直接按方向键 (上,下)就会出现data abort。
经过断点分析,当程序运行到 shell.c line 489行执行memcpy时,出现data abort错误,
if (shell->history_count == 0 || memcmp(&shell->cmd_history[shell->history_count - 1], shell->line, FINSH_CMD_SIZE))
{
shell->current_history = shell->history_count;
memset(&shell->cmd_history[shell->history_count][0], 0, FINSH_CMD_SIZE);
memcpy(&shell->cmd_history[shell->history_count][0], shell->line, shell->line_position); /* increase count and set current history position */
shell->history_count ++;
}
在执行memcpy之前,观察到所有的参数均正常。