letter shell
开源项目 letter shell 是一个功能强大的嵌入式 shell,作者 NevermindZZT,目前获得 786 个 Star,遵循 MIT 开源协议
letter shell 是一个 C 语言编写的,可以嵌入在程序中的嵌入式 shell,主要面向嵌入式设备,以 C 语言函数为运行单位,可以通过命令行调用,运行程序中的函数
letter shell 3.x 支持的功能:
环境准备
获取项目源码
搭建项目工程
-
FreeRTOS 配置
激活 FreeRTOS ,选择 V2 版本
在高级设置使能 Newlib
在 FreeRTOS 添加 letter shell 任务,任务栈空间至少 256,任务函数名设为 shellTask,选择生成弱函数,任务参数设为 &shell
-
选择工程保存路径与 Cube IDE 代码开发工具
选择 Cube IDE 作为开发工具,根据需求修改堆栈大小,最后生成工程代码
letter shell 移植
-
Cube IDE 工程新建文件夹,添加头文件路径,把需要移植的源码分别复制到头文件夹和源文件夹里面,先移植 src文件夹的文件,在移植 demo 的文件,提示相同文件时选择覆盖
-
直接编译工程,修改头文件的报错
一般需要修改芯片的头文件 stm32f4xx_hal.h,根据自己使用的芯片选择,还需要删除掉没有的头文件
-
修改 shell_port.c 源文件
包含信号量互斥量头文件:#include “semphr.h”
修改 letter shell 的short userShellWrite(char *data, unsigned short len)
函数short userShellWrite(char *data, unsigned short len) { HAL_UART_Transmit(&huart1, (uint8_t *)data, len, 0x1FF); return len; }
修改 letter shell 的
short userShellRead(char *data, unsigned short len)
函数short userShellRead(char *data, unsigned short len) { if (HAL_UART_Receive(&huart1, (uint8_t *)data, len, 0x1FF) != HAL_OK) { return 0; } else { return 1; } }
修改
void userShellInit(void)
初始化函数,把任务创建的代码注释掉,函数外最尾行可以注释也可以直接删除void userShellInit(void) { shellMutex = xSemaphoreCreateMutex(); shell.write = userShellWrite; shell.read = userShellRead; shell.lock = userShellLock; shell.unlock = userShellUnlock; shellInit(&shell, shellBuffer, 512); // if (xTaskCreate(shellTask, "shell", 256, &shell, 5, NULL) != pdPASS) // { // logError("shell task creat failed"); // } } //CEVENT_EXPORT(EVENT_INIT_STAGE2, userShellInit);
-
修改 .ld 链接文件
-
添加测试控制命令
在哪创建控制命令,就需要包含头文件shell_port.h
void shellTest(int a, int b, int c) { shellPrint(&shell, "This is testrn"); } SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC), test, shellTest, This is test);
测试是否成功
略
串口 printf 重定向
#ifdef __GNUC__
#define PUTCHAR_REDEFINE int __io_putchar(int ch)
#else
#define PUTCHAR_REDEINFE int fputc(int ch, FILE *f)
#endif
PUTCHAR_REDEFINE
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, SERIAL_TIMEOUT);
return ch;
}
参考文章
letter-shell | 一个功能强大的嵌入式shell
示例源码
https://download.csdn.net/download/Wu_HuaJie/87502333
原文地址:https://blog.csdn.net/Wu_HuaJie/article/details/129229286
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_12995.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!