letter shell在STM32F4上基于freeRTOS的移植

目录

简介

参考文章

准备

Cube IDE设置

修改代码

运行


简介

letter shell在STM32F4上基于freeRTOS的移植_第1张图片

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设置

letter shell在STM32F4上基于freeRTOS的移植_第2张图片

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

letter shell在STM32F4上基于freeRTOS的移植_第3张图片

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

letter shell在STM32F4上基于freeRTOS的移植_第4张图片

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

letter shell在STM32F4上基于freeRTOS的移植_第5张图片

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

letter shell在STM32F4上基于freeRTOS的移植_第6张图片

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

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

letter shell在STM32F4上基于freeRTOS的移植_第7张图片

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

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

letter shell在STM32F4上基于freeRTOS的移植_第8张图片

letter shell在STM32F4上基于freeRTOS的移植_第9张图片

修改代码

先修改letter shell的源码

shell_cfg.h

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

letter shell在STM32F4上基于freeRTOS的移植_第10张图片

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

letter shell在STM32F4上基于freeRTOS的移植_第11张图片

设置用户名和密码可选

letter shell在STM32F4上基于freeRTOS的移植_第12张图片

shell_ext.h中添加头文件

letter shell在STM32F4上基于freeRTOS的移植_第13张图片

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

letter shell在STM32F4上基于freeRTOS的移植_第14张图片

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

letter shell在STM32F4上基于freeRTOS的移植_第15张图片

letter shell在STM32F4上基于freeRTOS的移植_第16张图片

重点文件到了shell_port.c

letter shell在STM32F4上基于freeRTOS的移植_第17张图片

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

修改userShellWrite和userShellRead函数

letter shell在STM32F4上基于freeRTOS的移植_第18张图片

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

注释掉CEVENT_EXPORT(EVENT_INIT_STAGE2, userShellInit);

letter shell在STM32F4上基于freeRTOS的移植_第19张图片

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

letter shell在STM32F4上基于freeRTOS的移植_第20张图片

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"

letter shell在STM32F4上基于freeRTOS的移植_第21张图片

在初始化调用userShellInit

在freereos.c文件中

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

letter shell在STM32F4上基于freeRTOS的移植_第22张图片

修改STM32F407ZGTX_FLASH.ld

letter shell在STM32F4上基于freeRTOS的移植_第23张图片

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

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

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

运行

letter shell在STM32F4上基于freeRTOS的移植_第24张图片

密码登录

letter shell在STM32F4上基于freeRTOS的移植_第25张图片

命令行执行

letter shell在STM32F4上基于freeRTOS的移植_第26张图片

推箱子游戏。

letter shell在STM32F4上基于freeRTOS的移植_第27张图片

很可惜,只有一关。

我是使用MobaXterm,需要注意,要使用Microcom,否则上下左右键可能不好用。

letter shell在STM32F4上基于freeRTOS的移植_第28张图片

你可能感兴趣的:(单片机软件开发,编程语言技巧,stm32,嵌入式硬件,单片机)