letter shell在STM32F4上基于freeRTOS的移植

发布时间:2024年01月19日

目录

简介

参考文章

准备

Cube IDE设置

修改代码

运行


简介

letter shell是一个C语言编写的,可以嵌入在程序中的嵌入式shell,主要面向嵌入式设备,以C语言函数为运行单位,可以通过命令行调用,运行程序中的函数。拥有命令自动补全、快捷键功能定义、命令权限管理、用户管理、变量支持、代理函数和参数代理解析等功能。

源码地址:NevermindZZT/letter-shell: letter shell (github.com)

如果上不去可以在国内镜像:letter-shell: letter shell一个嵌入式小型shell,特别适用于单片机系统。 (gitee.com)

参考文章

letter-shell 移植,基于 STM32 + FreeRTOS_letter shell-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Wu_HuaJie/article/details/129229286

这篇文章是基于f1编写的。



STM32+FreeRtos 移植letter-shell工具_freertos shell-CSDN博客

这篇文章是基于f4编写的,但略显粗糙。

准备

硬件:STM32F407ZG

开发工具:Cube IDE

串口助手:MobaXterm

项目源码:letter shell 3.2.3

Cube IDE设置

设置debug端口,为了给freeRTOS让出时钟,将基础时钟远改为其他定时器。

根据自己需要配置串口,这里可以根据需要配置中断和dma,反正shell没用,你自己要用就配上。

配置freeRTOS并启用V2版本,因为shell用了锁,V2修改更简单一些,V1理论也是可以的,就需要修改一些东西。

定义任务,其中有几个东西需要特别注意,栈的大小与你在shell中运行的程序有关,所以志至少需要256,名字必须叫shellTask函数类型必须选As weak,因为代码中实现了shellTask,所以也不要在生成的shellTask中写逻辑,因为不会运行,参数必须要&shell。后面会说这个变量在哪里。

生成单独的.C和.h文件。

在工程根目录创建LetterShell文件夹,里面创建inc和src文件夹。

总结就是把demo/stm32-freereos,src中的c和h分别放到inc和src中,其中log,game,shell_enhance是可选的,我是为了玩自己加上的。

在工程中找到properties或者直接alt+enter,然后把创建的文件夹加入到工程中,

修改代码

先修改letter shell的源码

shell_cfg.h

在该文件开头加入stm32头文件

设置scan buffer,只有使用操作系统的才可以,修改tick实现,使用锁

设置用户名和密码可选

shell_ext.h中添加头文件

shell_port.h删除#include "serial.h",因为没有。

2048.c选择性添加,如果你没添加就不用改了,建议不填加,这个游戏显示有些问题。

重点文件到了shell_port.c

添加#include "semphr.h",删除#include "serial.h",?#include "cevent.h"

修改userShellWrite和userShellRead函数

将userShellInit中的创建任务函数注释掉,因为我们在前面用ide生成了任务。

注释掉CEVENT_EXPORT(EVENT_INIT_STAGE2, userShellInit);

捎带手在最后添加一个测试的函数

void shellTest(int a, int b, int c)
{
	shellPrint(&shell, "This is test\r\n");
}
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC),
					test, shellTest, This is test);

至此,shell源码就改完了,开始修改stm32的代码。

在mian.c函数添加头文件#include "shell_port.h"

在初始化调用userShellInit

在freereos.c文件中

添加头文件#include "shell.h"? 和#include "shell_port.h"

修改STM32F407ZGTX_FLASH.ld

在.rodata :里面添加如下代码

    . = ALIGN(4);
    _shell_command_start = .;
    KEEP (*(shellCommand))
    _shell_command_end = .;
    . = ALIGN(4);

可以了,目前为止代码就准备完了。编译代码并下载。

运行

密码登录

命令行执行

推箱子游戏。

很可惜,只有一关。

文章来源:https://blog.csdn.net/andylauren/article/details/135675471
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。