默认你已经调通tos,如果没有请移步官网
准备好要移植的文件
需要把shell文件夹下c和h文件加入到工程中(不会的请自行搜索)
因为是需要串口进行接收,需要用过平台调用st的库
如图,是将串口抽象的方式,就是上层和下层映射的关系。非常好理解。
串口接收中断回调函数,接收是一个字节一个字节接收的,所以实现就是先进先出队列,接收一个压入队列,满了时候就抛弃数据。取数据就直接取多少多少字节,非常普通的串口接收不定长数据的实现方式。接收中断所以需要第一次开启接收中断,我们只需要在初始化时调用一下void HAL_UART_RxCpltCallback(&huart2)即可。
我们的平台是F205,因为hal文件夹中没有我们的文件所以直接从F1中拷贝了一份
头文件修改所需要的,串口数量映射一下(函数在usart文件找),初始化几个串口就映射几个,不需要的就直接注释就好了
我试了许久也可腾讯大佬交流了,我这种大部分是没问题的。
注意:串口助手
绝对不可以在输入框输入\r\n和回车,使用要使用软件的回车和换行!!!不然会没反应。
只需要编写自己的需要的命令就可以了,这里就很简单了。
__STATIC__ int cmd_reboot(int argc, char *argv[])
{
tos_shell_printf("reboot:\n");
tos_task_delay(500);
tos_shell_printf("..");
tos_task_delay(500);
tos_shell_printf("..");
HAL_NVIC_SystemReset();
return 0;
}
__STATIC__ const shell_cmd_t custom_shell_cmds0[] = {
{ "reboot", cmd_reboot, "reboot mcu" },
{ "test01", cmd_test01, "test01 cmd" },
{ K_NULL, K_NULL, K_NULL }, /* never forget this!!!*/
};
可配置宏定义等如下
支持设置参数
比如输入参数:reboot空格123456\r\n
argv[0]=reboot
argv[1]=123456
argc 是表示几个输入参数,argv[0]是每个参数的指针,指向参数