Letter shell移植和使用
一、Letter shell介绍Letter shell是一个用 C 语言编写的、专为嵌入式系统设计的开源命令行交互工具嵌入式Shell可以让你通过串口等通道像操作Linux终端一样调用和运行程序中的函数。官方源码https://github.com/NevermindZZT/letter-shell二、Letter shell移植新建shell_port.c和shell_port.h文件名可以随意起。定义Shell对象、初始化和配置读写回调函数Shell shell;//定义一个shell对象 static char shellBuffer[1024]; //shell写函数接口 static signed short shellPortWrite(char *data, unsigned short len) { BSP_UART_Send((uint8_t *)data, (uint16_t)len); return (signed short)len; } //shell读函数接口 static signed short shellPortRead(char *data, unsigned short len) { uint32_t rxLen; do { rxLen BSP_UART_Read((uint8_t *)data, len); if (rxLen 0) { osDelay(1); } } while (rxLen 0); return (signed short)rxLen; } void LetterShellInit(void) { shell.write shellPortWrite; shell.read shellPortRead; shellInit(shell, shellBuffer, sizeof(shellBuffer)); //创建Letter shell任务 osThreadDef(shellTaskDef, StartShellTask, osPriorityNormal, 0, 512); osThreadCreate(osThread(shellTaskDef), NULL); } void StartShellTask(void const *argument) { shellTask(shell); }使用RTOS可将SHELL_TASK_WHILE配置为1裸机配置为0主循环定时调用。Letter shell将配置的指令放到了shellCommand段里Keil MDK需要在链接器的“Misc controls”中添加--keep shellCommand*。GCC需要在链接脚本添加_shell_command_start .; KEEP (*(shellCommand)) _shell_command_end .;宏配置宏意义SHELL_TASK_WHILE是否使用默认shell任务while循环SHELL_USING_CMD_EXPORT是否使用命令导出方式SHELL_USING_COMPANION是否使用shell伴生对象功能SHELL_SUPPORT_END_LINE是否支持shell尾行模式SHELL_HELP_LIST_USER是否在输入命令列表中列出用户SHELL_HELP_LIST_VAR是否在输入命令列表中列出变量SHELL_HELP_LIST_KEY是否在输入命令列表中列出按键SHELL_ENTER_LF使用LF作为命令行回车触发SHELL_ENTER_CR使用CR作为命令行回车触发SHELL_ENTER_CRLF使用CRLF作为命令行回车触发SHELL_EXEC_UNDEF_FUNC使用执行未导出函数的功能SHELL_COMMAND_MAX_LENGTHshell命令最大长度SHELL_PARAMETER_MAX_NUMBERshell命令参数最大数量SHELL_HISTORY_MAX_NUMBER历史命令记录数量SHELL_DOUBLE_CLICK_TIME双击间隔(ms)SHELL_QUICK_HELP快速帮助SHELL_MAX_NUMBER管理的最大shell数量SHELL_GET_TICK()获取系统时间(ms)SHELL_USING_LOCK是否使用锁SHELL_MALLOC(size)内存分配函数(shell本身不需要)SHELL_FREE(obj)内存释放函数(shell本身不需要)SHELL_SHOW_INFO是否显示shell信息SHELL_CLS_WHEN_LOGIN是否在登录后清除命令行SHELL_DEFAULT_USERshell默认用户SHELL_DEFAULT_USER_PASSWORD默认用户密码SHELL_LOCK_TIMEOUTshell自动锁定超时SHELL_USING_FUNC_SIGNATURE使用函数签名SHELL_SUPPORT_ARRAY_PARAM支持数组参数三、Letter shell使用方式一、多参数形式/** *多参数测试 */ static int shellArgTest(int argc, char *argv[]) { Shell *current shellGetCurrent(); shellPrint(shellGetCurrent(), argc:%d\r\n, argc); for (int i 0;i argc;i) { shellPrint(shellGetCurrent(), argv[%d]:%s\r\n, i, argv[i]); } } SHELL_EXPORT_CMD( SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN) | SHELL_CMD_DISABLE_RETURN, arg, shellArgTest, shell Arg Test );/** * brief LED 控制命令 — 模拟硬件控制场景 * note 示例: led on / led off / led toggle * 命令通常用于调试和手动控制外设 */ static int shellLed(int argc, char *argv[]) { if (argc 2) { shellPrint(shellGetCurrent(), Usage: led on|off|toggle\r\n); return -1; } if (strcmp(argv[1], on) 0) { shellPrint(shellGetCurrent(), LED turned ON\r\n); /* 实际项目中调用 HAL_GPIO_WritePin(...) 控制 GPIO */ } else if (strcmp(argv[1], off) 0) { shellPrint(shellGetCurrent(), LED turned OFF\r\n); } else if (strcmp(argv[1], toggle) 0) { shellPrint(shellGetCurrent(), LED toggled\r\n); } else { shellPrint(shellGetCurrent(), Unknown option: %s\r\n, argv[1]); return -1; } return 0; } SHELL_EXPORT_CMD( SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN) | SHELL_CMD_DISABLE_RETURN, led, shellLed, control LED\r\nled on|off|toggle );

相关新闻

信号反射仿真分析:ADS 2024 对比 4种阻抗突变场景下的波形畸变

信号反射仿真分析:ADS 2024 对比 4种阻抗突变场景下的波形畸变

信号反射仿真分析:ADS 2024 对比 4种阻抗突变场景下的波形畸变 在高速数字电路和射频系统设计中,信号完整性始终是工程师面临的核心挑战之一。当信号在传输线上遇到阻抗突变时,部分能量会反射回源端,导致波形畸变、时序错乱甚至系…

2026/7/9 1:41:54 阅读更多 →
西门子法提纯工业硅:从98%到11个9的电子级多晶硅完整工艺解析

西门子法提纯工业硅:从98%到11个9的电子级多晶硅完整工艺解析

西门子法提纯工业硅:从98%到11个9的电子级多晶硅完整工艺解析1. 工业硅提纯的技术挑战与西门子法原理半导体工业对硅材料纯度的要求近乎苛刻——当光伏行业满足于6个9(99.9999%)纯度时,芯片制造需要的是11个9(99.99999…

2026/7/9 1:39:54 阅读更多 →
昇腾 CANN 7.0 环境配置:Ubuntu 22.04 单机部署与 PyTorch 适配 3 步验证

昇腾 CANN 7.0 环境配置:Ubuntu 22.04 单机部署与 PyTorch 适配 3 步验证

昇腾 CANN 7.0 环境配置:Ubuntu 22.04 单机部署与 PyTorch 适配实战指南 在AI计算领域,硬件加速平台的选择直接影响着模型训练和推理的效率。对于希望从传统GPU转向专用AI加速器的开发者而言,昇腾NPU提供了一个极具竞争力的选择。本文将手把手…

2026/7/9 1:37:53 阅读更多 →

最新新闻

YOLO系列模型选型指南:从v10到v26的技术对比与迁移实践

YOLO系列模型选型指南:从v10到v26的技术对比与迁移实践

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 1. 项目概述:YOLO系列模型选型困境与解决方案 在目标检测领域,YOLO系列模型始终保持着技术领先地位。作为从业…

2026/7/9 2:34:06 阅读更多 →
从字节“期权激励“到阿里“3.25“:大厂绩效变局下,普通人如何靠AI智能体提升赚钱能力?

从字节“期权激励“到阿里“3.25“:大厂绩效变局下,普通人如何靠AI智能体提升赚钱能力?

导语 2025年至2026年,互联网大厂的绩效与激励体系正在经历一场深刻的变革。从字节跳动将"字节范"与"领导力原则"深度绑定绩效、大幅提升期权/RSU在半年激励中的比重,到阿里巴巴经典的"3.25"绩效制度改革,大厂…

2026/7/9 2:32:06 阅读更多 →
LangSmith | LangChain / LangGraph Agent 全链路追踪

LangSmith | LangChain / LangGraph Agent 全链路追踪

最近一段时间学习及制作Agent,但在向量库检索、Prompt 拼接、工具调用、多轮记忆读写、多层 LLM 嵌套;运行后总会出现幻觉、回答跑偏、响应超时、Token 成本暴增,却完全无法定位根源。 传统打印日志只能零散输出片段,断点调试无法复现 LLM 非…

2026/7/9 2:32:06 阅读更多 →
Hermes Agent cron 27 个实战任务调度拆解 \(按 7 大类 \+ 错峰 5min 实战\)

Hermes Agent cron 27 个实战任务调度拆解 \(按 7 大类 \+ 错峰 5min 实战\)

适用读者: 用 Hermes Agent / Claude Code / 任何 AI 助手搭生产级 cron 自动化的独立开发者 关键词: Hermes Agent / cron / 任务调度 / 错峰 / 监控 / Supabase / 飞书 / 微信公众号 一、为什么 27 个 cron 是 Hermes Agent 产线 作者用 Hermes Agent 搭个人 AI 助手 1 个月…

2026/7/9 2:32:06 阅读更多 →
通达信最佳买卖点指标

通达信最佳买卖点指标

AA05:MA(C,5),COLOR0099CC;五日乖离率:(C-AA05)/AA05*100; BB05:ATAN((AA05/REF(AA05,1)-1)*100)*180/3.1416; 速度5:SMA(EMA((AA05-REF(AA05,1))/REF(AA05,1),3)*100,3,1); 加速度5:EMA((速度5-REF(速度5,1)),3),LINETHICK0; STICKLINE(BB05>30 AND AA05>REF(AA05,1), A…

2026/7/9 2:30:04 阅读更多 →
AI智能体如何变革材料发现:从预测到全流程自动化

AI智能体如何变革材料发现:从预测到全流程自动化

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 这类AI智能体最值得关注的不是它能预测多少种材料,而是它把传统材料发现中“文献调研-理论预测-实验验证”这个漫长流程&a…

2026/7/9 2:30:04 阅读更多 →

日新闻

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 还在为Foobar2000找不到高质…

2026/7/9 0:01:04 阅读更多 →
ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍 【免费下载链接】ElegantBook Elegant LaTeX Template for Books 项目地址: https://gitcode.com/gh_mirrors/el/ElegantBook 你是否曾经为学术书籍的封面设计而烦恼?想要一个既专业又美观的封…

2026/7/9 0:03:06 阅读更多 →
如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南 【免费下载链接】pyodbc Python ODBC bridge 项目地址: https://gitcode.com/gh_mirrors/py/pyodbc 在当今数据驱动的商业环境中,企业级数据库连接已成为现代应用开发的核心需求。pyodbc作为一款强大…

2026/7/9 0:07:11 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻