是因为板子串口资源不够吗?一般都会单独留出来一个串口作为控制台调试使用,如果实在不够用可以把Finsh控制台给关了,这样能多出来一个串口供用户使用,
Finsh 控制台线程的名字是 “tshell”,线程的处理函数名称为 finsh_thread_entry(),位置位于文件 rt-thread/components/finsh/shell.c 中。该线程处理函数的逻辑如下,阻塞的从串口设备中读取数据,读取到一行后从命令表中查找并执行相应的命令。
void finsh_thread_entry(void *parameter)
{
... ...
while (1)
{
ch = (int)finsh_getchar(); // 从串口中读取数据,阻塞
if (ch < 0)
{
continue;
}
... ...
/* handle end of line, break */
if (ch == 'r' || ch == 'n')
{
#ifdef FINSH_USING_HISTORY
shell_push_history(shell);
#endif
if (shell->echo_mode)
rt_kprintf("n");
msh_exec(shell->line, shell->line_position); // 执行相应的命令
rt_kprintf(FINSH_PROMPT);
memset(shell->line, 0, sizeof(shell->line));
shell->line_curpos = shell->line_position = 0;
continue;
}
... ...
} /* end of device read */
}
如果非要实现用户串口和控制台串口共有的话可以考虑从这里面入手,比如说用户串口使用时有特殊的结尾字符,或者特殊的报头等情况,程序判断到特殊的报头或者报尾后执行用户的代码而不去执行相应的命令。
是因为板子串口资源不够吗?一般都会单独留出来一个串口作为控制台调试使用,如果实在不够用可以把Finsh控制台给关了,这样能多出来一个串口供用户使用,
Finsh 控制台线程的名字是 “tshell”,线程的处理函数名称为 finsh_thread_entry(),位置位于文件 rt-thread/components/finsh/shell.c 中。该线程处理函数的逻辑如下,阻塞的从串口设备中读取数据,读取到一行后从命令表中查找并执行相应的命令。
void finsh_thread_entry(void *parameter)
{
... ...
while (1)
{
ch = (int)finsh_getchar(); // 从串口中读取数据,阻塞
if (ch < 0)
{
continue;
}
... ...
/* handle end of line, break */
if (ch == 'r' || ch == 'n')
{
#ifdef FINSH_USING_HISTORY
shell_push_history(shell);
#endif
if (shell->echo_mode)
rt_kprintf("n");
msh_exec(shell->line, shell->line_position); // 执行相应的命令
rt_kprintf(FINSH_PROMPT);
memset(shell->line, 0, sizeof(shell->line));
shell->line_curpos = shell->line_position = 0;
continue;
}
... ...
} /* end of device read */
}
如果非要实现用户串口和控制台串口共有的话可以考虑从这里面入手,比如说用户串口使用时有特殊的结尾字符,或者特殊的报头等情况,程序判断到特殊的报头或者报尾后执行用户的代码而不去执行相应的命令。
举报