letter shell在STM32F4上基于freeRTOS的移植

2024-01-19 02:52

本文主要是介绍letter shell在STM32F4上基于freeRTOS的移植,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

简介

参考文章

准备

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);

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

运行

密码登录

命令行执行

推箱子游戏。

很可惜,只有一关。

这篇关于letter shell在STM32F4上基于freeRTOS的移植的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/621063

相关文章

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

FreeRTOS学习笔记(六)队列

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、队列的基本内容1.1 队列的引入1.2 FreeRTOS 队列的功能与作用1.3 队列的结构体1.4 队列的使用流程 二、相关API详解2.1 xQueueCreate2.2 xQueueSend2.3 xQueueReceive2.4 xQueueSendFromISR2.5 xQueueRecei

FreeRTOS学习笔记(二)任务基础篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、 任务的基本内容1.1 任务的基本特点1.2 任务的状态1.3 任务控制块——任务的“身份证” 二、 任务的实现2.1 定义任务函数2.2 创建任务2.3 启动任务调度器2.4 任务的运行与切换2.4.1 利用延时函数2.4.2 利用中断 2.5 任务的通信与同步2.6 任务的删除2.7 任务的通知2

FreeRTOS学习笔记(四)Freertos的中断管理及临界保护

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Cortex-M 中断管理1.1 中断优先级分组1.2 相关寄存器1.3 相关宏定义1.4 FreeRTOS 开关中断 二、临界段及其保护2.1 taskENTER_CRITICAL( ) 和 taskEXIT_CRITICAL( )2.2 taskENTER_CRITICAL_FROM_ISR( )

站长常用Shell脚本整理分享(全)

站长常用Shell脚本整理分享 站长常用Shell脚本整理分享1-10 站长常用Shell脚本整理分享11-20 站长常用Shell脚本整理分享21-30 站长常用Shell脚本整理分享31-40 站长常用Shell脚本整理分享41-50 站长常用Shell脚本整理分享51-59 长期更新

Shell脚本实现自动登录服务器

1.登录脚本 login_server.sh #!/bin/bash# ReferenceLink:https://yq.aliyun.com/articles/516347#show all host infos of serverList.txtif [[ -f ./serverList.txt ]]thenhostNum=`cat ./serverList.txt | wc -l`e

[轻笔记]ubuntu shell脚本切换conda环境

source /home/yourhostname/anaconda3/etc/profile.d/conda.sh # 关键!!!conda activate env_name

[轻笔记] ubuntu Shell脚本实现监视指定进程的运行状态,并能在程序崩溃后重启动该程序

根据网上博客实现,发现只能监测进程离线,然后对其进行重启;然而,脚本无法打印程序正常状态的信息。自己通过不断修改测试,发现问题主要在重启程序的命令上(需要让重启的程序在后台运行,不然会影响监视脚本进程,使其无法正常工作)。具体程序如下: #!/bin/bashwhile [ 1 ] ; dosleep 3if [ $(ps -ef|grep exe_name|grep -v grep|