简介
体验过rtt的finsh组件后,总想在裸机工程中跑一个shell来调试程序,于是找到了一个功能强大的嵌入式shell组件,letter shell。点击查看源码
这里使用基础版本的2.0。更多内容参考源码中README.md文件
一、添加源码到工程
二、添加section =“shellCommand”
不添加提示报错 Error[Pa053]: section/block has not been declared using #pragma section/segment
shell.c中添加如下内容
#if defined(__ICCARM__)
#pragma section ="shellCommand"
#endif
三、更改.icf文件
添加一行 keep { section shellCommand };
(我也不太懂这里的作用是什么,我是看rtt里有使用这个,就参照着写了一句,试了下可以,后面看了下git源码的issue区,发现作者有相关的回复。如果有大神理解keep的作用,还请评论指点一下,方便后来人学习。)
现在就能使用基本的
四、初始化shell
static SHELL_TypeDef shell;
/**
* @brief 初始化 shell
*/
void shell_init(void)
{
shell.read = segger_read;
shell.write = segger_write;
shellInit(&shell);
}
按照如下shell的read,write类型对接函数接口
read:typedef signed char (*shellRead)(char *);
write:typedef void (*shellWrite)(const char);
五、调用shellTask
main中调用shellTask(&shell);
裸机需要关闭宏:SHELL_TASK_WHILE。
* 命令导出
写了个测试函数
int test_func(int argc, char *agrv[])
{
SEGGER_RTT_printf(0, "hello word\n");
SEGGER_RTT_printf(0, "argc:%d\n", argc);
SEGGER_RTT_printf(0, "argv[0]:%s\n", agrv[1]);
return 1;
}
SHELL_EXPORT_CMD(run_test, test_func, test);
查看帮助 help
运行测试函数 run_test fine
大功告成!!!