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

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

运行

密码登录

命令行执行

推箱子游戏。

很可惜,只有一关。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/413607.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网页设计-用户体验

Use Cases (用例) 用例是用户如何在网站上执行任务的书面描述,从用户的角度描述了系统响应请求时的行为。每个用例都是用户实现目标的一系列简单的步骤。简言之,用例是一种用于描述系统如何满足用户需求的方法。 用例的好处 1. 明确需求: Use…

day20 最大的二叉树 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树

题目1:654 最大二叉树 题目链接:654 最大二叉树 题意 根据不重复的整数数组nums构建最大的二叉树 ,根节点是数组中的最大值,最大值左边的子数组构建左子树,最大值右边的子数组构建右子树 nums数组中最少含有1个元素…

189.轮转数组(数组翻转,C解法)

题目描述: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转…

怎么样的布局是符合可制造性的PCB布局?

满足可制造性、可装配性、可维修性要求,方便调试的时候于检测和返修,能够方便的拆卸器件: 1)极性器件的方向不要超过2种,最好都进行统一方向等要求,如图1-1所示; 图1-1 极性器件方向统一摆放 2…

爬虫逆向开发教程1-介绍,入门案例

爬虫前景 在互联网的世界里,数据就是新时代的“黄金”。而爬虫,就是帮助我们淘金的“工具”。随着互联网的不断发展,数据量呈现指数级的增长,在数据为王的时代,有效的挖掘数据和利用,你会得到更多东西。 学…

UML-用例图

提示:用例图是软件建模的开始,软件建模中的其他图形都将以用例图为依据。用例图列举了系统所需要实现的所有功能,除了用于软件开发的需求分析阶段,也可用于软件的系统测试阶段。 UML-用例图 一、用例图的基础知识1.用例图的构成元…

数据结构之数组、矩阵和广义表

数据结构之数组、矩阵和广义表 1、数组1.1、数组的定义及基本运算1.2、数组的顺序存储 2、矩阵2.1、特殊矩阵2.2、稀疏矩阵 3、广义表3.1、广义表的基本操作3.2、广义表的特点3.3、广义表的存储结构 数据结构是程序设计的重要基础,它所讨论的内容和技术对从事软件项…

力扣:416. 分割等和子集 1049. 最后一块石头的重量 II (动态规划)(二合一,一次吃透两道题)

力扣:416. 分割等和子集 & 1049. 最后一块石头的重量 II 用的方法都是01背包解法,思路也是近乎一样,这里就放在一起讲解了(主要讲解第一题,第二题大家可以直接自己AC)。01背包解法详细讲解请见上篇博客…

CentOS搭建DNS服务器

服务器规划 DNS服务器IP为:172.16.32.253 需要自定义域名解析 172.16.32.253 dns.zhangsan.com 172.16.32.128 test1.zhangsan.com 172.16.32.129 test2.zhangsan.com 172.16.32.130 www.zhangsan.com 1. 服务器初始化 [rootlocalhost ~]# hostnamectl set-hostnam…

C++的命名空间域

一、域作用限定符 :: 即是域作用限定符,它的作用是指明一个标识符(变量、函数或类)来自哪一个作用域范围 二、编译器搜索变量、函数等的原则 1.先搜索局部变量,2.再搜索全局变量,3.最后搜索指定的命名空间域 三、…

2023.1.17 关于 Redis 持久化 AOF 策略详解

目录 引言 AOF 策略 实例演示一 缓冲区 重写机制 手动触发 自动触发 AOF 重写流程 实例演示二 引言 Redis 实现持久化的两大策略 RDB ——> Redis DataBase(定期备份)AOF ——> Append Only File(实时备份) 注意&…

15.云原生之k8s容灾与恢复实战

云原生专栏大纲 文章目录 Velero与etcd介绍Velero与etcd备份应用场景Velero与etcd在k8s备份上的区别 Velero备份恢复流程备份工作流程Velero备份时,若k8s集群发送变化,会发发生情况?Velero 备份pv,pv中数据变化,会发发…