在移植nano操作系统时,打开FINSH_USING_HISTORY宏后,使用上下左右键并不能自动输入上次的命令。
原因如下:
1.RT_WEAK char rt_hw_console_getchar(void)此接口返回类型为char型,范围为(-128,127)
此函数在shell.c中调用,但是在此返回的值是255而不是-1。
static int finsh_getchar(void)
{
#ifdef RT_USING_DEVICE
#ifdef RT_USING_POSIX
return getchar();
#else
char ch = 0;
RT_ASSERT(shell != RT_NULL);
if(shell->device)
{
while (rt_device_read(shell->device, -1, &ch, 1) != 1)
rt_sem_take(&shell->rx_sem, RT_WAITING_FOREVER);
return (int)ch;
}
else
#endif
#endif
{
extern char rt_hw_console_getchar(void);
return rt_hw_console_getchar();
}
}
2.在finsh_thread_entry函数的while 1循环里面并不能获取到正确的字符导致不能走到上下左右键的处理中去。
ch = finsh_getchar();
if (ch < 0)
{
continue;
}
3.解决方法:
将if (ch < 0)改为if ((ch < 0) || (ch == 255))
原作者:Em1ya
|