0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RT-Thread标准版裁剪记录

冬至子 来源:螺丝松掉的人 作者:螺丝松掉的人 2023-07-31 14:28 次阅读

以 bsp>stm32f407-robomaster-c 为例

RT-Thread 下的 BSP 里适配了非常丰富的工具,但有的时候既想直接使用这些便捷的工具,又想缩减代码体量。这个时候可以选择不使用 Nano 而是对标准版的 BSP 工程进行裁剪。并且由于 STM32 已经封装了 HAL 库,裁剪掉 RTT 的设备框架后也能保留一定的兼容性和开发的便捷性。

配置 menuconfig

RT-Thread Kernel

关闭钩子函数相关;
软件定时器功能在此我选择保留使能;
debugging 功能在此我选择保留使能;
线程通信相关,如信号量、邮箱等,按需使能;
RT-Thread Components

关闭设备框架;

Hardware Drivers Config
不使用其设备框架,全部关闭;
代码修改
由于裁剪后不再使用设备驱动框架,各个使用到的外设模块需要自行初始化,于是 applications 目录下的 main.c 文件使用 STM32CubeMX 重新生成后的替换。并需要进一步的修改:不在 main 函数中进行初始化,而是使用 INIT_XXX_EXPORT 初始化,例如:

INIT_BOARD_EXPORT(MX_USART1_UART_Init);

SConscript 文件中也需要进一步的修改,添加必要的库文件

由于不再使用设备驱动框架,在 rt-threadcomponentsdriversipcSConscript 中也需要添加以下代码:

if not GetDepend('RT_USING_DEVICE'):
SrcRemove(src, 'waitqueue.c')
SrcRemove(src, 'pipe.c')
MSH 功能是保留并且需要使用的,但是由于不再使用 RT-Thread 的设备框架改为 Using console for rt_kprintf ,需要实现以下两个函数实现输入输出:rt_hw_console_output , rt_hw_console_getchar

首先实现 rt_hw_console_output

注意:RT-Thread 系统中已有的打印均以 n 结尾,而并非 rn,所以在字符输出时,需要在输出 n 之前输出 r,完成回车与换行,否则系统打印出来的信息将只有换行。

/**

  • @brief 重映射串口DEBUG_USART到rt_kprintf()函数
  • Note:DEBUG_USART是定义的宏,默认使用串口1
  • @param str:要输出到串口的字符串
  • @retval 无
  • @attention

*/
#define DEBUG_USART huart1
void rt_hw_console_output(const char *str)
{
while (*str!='�')
{
if (*str=='n')
{
DEBUG_USART.Instance->DR = 'r';
while (__HAL_UART_GET_FLAG(&(DEBUG_USART), UART_FLAG_TXE) == RESET);
}
DEBUG_USART.Instance->DR = *(str++);
while (__HAL_UART_GET_FLAG(&(DEBUG_USART), UART_FLAG_TXE) == RESET);
}
}
实现 rt_hw_console_getchar

char rt_hw_console_getchar(void)
{
uint8_t ch = 0;
if (__HAL_UART_GET_FLAG(&(DEBUG_USART),UART_FLAG_RXNE)!=RESET)
{
HAL_UART_Receive(&(DEBUG_USART), &ch, 1, 1);
__HAL_UART_GET_FLAG(&(DEBUG_USART), UART_FLAG_RXNE);
}
else
{
if(__HAL_UART_GET_FLAG(&(DEBUG_USART),UART_FLAG_ORE)!=RESET)
{
__HAL_UART_CLEAR_FLAG(&(DEBUG_USART), UART_FLAG_ORE);
}
}
return ch;
}

至此 Finsh 组件可以正常使用了

总结

主要基于 bsp>stm32f407-robomaster-c 裁剪出了一个包含内核基本功能,并且可以使用 RT-Thread 大部分工具的工程,大大减小代码体量。

裁剪前:

1.jpg

裁剪后:

1.jpg

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 软件定时器
    +关注

    关注

    0

    文章

    18

    浏览量

    6758
  • RT-Thread
    +关注

    关注

    31

    文章

    1290

    浏览量

    40154
  • USART串口
    +关注

    关注

    0

    文章

    32

    浏览量

    6838
  • stm32cubemx
    +关注

    关注

    5

    文章

    283

    浏览量

    14814
  • HAL库
    +关注

    关注

    1

    文章

    121

    浏览量

    6256
收藏 人收藏

    评论

    相关推荐

    RT-Thread记录(一、版本开发环境及配合CubeMX)

    RT-Thread 学习记录的第一篇文章,RT-Thread记录(一、RT-Thread 版本、RT-T
    的头像 发表于 06-20 00:28 5242次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>记录</b>(一、版本开发环境及配合CubeMX)

    RT-Thread记录(二、RT-Thread内核启动流程)

    在前面我们RT-Thread Studio工程基础之上讲一讲RT-Thread内核启动流程.
    的头像 发表于 06-20 00:30 5041次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>记录</b>(二、<b class='flag-5'>RT-Thread</b>内核启动流程)

    使用RT-Thread标准版如何实现空闲中断?

    ;发送个信号量,或者置一个标志位,给串口处理线程或main;}}现在开始用RT-Thread 标准版,驱动框架还没仔细研究,但是想按照以前的方式写一个串口接收不定
    发表于 07-04 16:08

    下载rt-thread标准版nrf52832无法进行直接编译是咋回事

    下载rt-thread 标准版nrf52832直接编译会报错是怎么回事?pkgs —update报错如下:scons 缺文件 报错如下:
    发表于 07-25 11:36

    RT-Thread编程指南

    RT-Thread编程指南——RT-Thread开发组(2015-03-31)。RT-Thread做为国内有较大影响力的开源实时操作系统,本文是RT-Thread实时操作系统的编程指南
    发表于 11-26 16:06 0次下载

    RT-Thread Smart已正式上线

    rt-smart内核即可包含基本功能,同时也可定制裁剪rt-smart用户态应用环境采用musl libc提供POSIX接口调用及C运行环境,延续 RT-Thread 原有的生态,使
    的头像 发表于 11-29 10:31 2808次阅读

    记录——基于 RT-Thread 实现 USB 虚拟串口

    记录——基于 RT-Thread 实现 USB 虚拟串口记录一下我在正点原子 F429 阿波罗开发板上实现 USB 虚拟串口的过程,希望可以帮助到其他想要学习 USB 的人。首先,我更新了一下
    发表于 12-02 17:21 6次下载
    <b class='flag-5'>记录</b>——基于 <b class='flag-5'>RT-Thread</b> 实现 USB 虚拟串口

    RT-thread】如何将RT-thread系统移植到stm32

    设备,RT-Thread 又能使用在线的软件包管理工具,配合系统配置工具实现直观快速的模块化裁剪,无缝地
    发表于 12-08 11:06 21次下载
    【<b class='flag-5'>RT-thread</b>】如何将<b class='flag-5'>RT-thread</b>系统移植到stm32

    RT-Thread学习笔记 RT-Thread的架构概述

    RT-Thread 简介 作为一名 RTOS 的初学者,也许你对 RT-Thread 还比较陌生。然而,随着你的深入接触,你会逐渐发现 RT-Thread 的魅力和它相较于其他同类型 RTOS
    的头像 发表于 07-09 11:27 4557次阅读
    <b class='flag-5'>RT-Thread</b>学习笔记 <b class='flag-5'>RT-Thread</b>的架构概述

    RT-Thread env工具安装

    env 是 RT-Thread 推出的开发辅助工具,针对基于 RT-Thread 操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理功能。其内置的 menuconfig 提供了简单易用的配置剪裁工具,可对内核、组件和软件包进行自由
    的头像 发表于 01-11 09:00 1751次阅读
    <b class='flag-5'>RT-Thread</b> env工具安装

    RT-Thread文档_RT-Thread 简介

    RT-Thread文档_RT-Thread 简介
    发表于 02-22 18:22 5次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> 简介

    RT-Thread文档_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文档_RT-Thread 潘多拉 STM32L475 上手指南
    发表于 02-22 18:23 9次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> 潘多拉 STM32L475 上手指南

    RT-Thread文档_RT-Thread SMP 介绍与移植

    RT-Thread文档_RT-Thread SMP 介绍与移植
    发表于 02-22 18:31 9次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> SMP 介绍与移植

    基于RT-Thread Studio学习

    前期准备:从官网下载 RT-Thread Studio,弄个账号登陆,开启rt-thread学习之旅。
    的头像 发表于 05-15 11:00 3979次阅读
    基于<b class='flag-5'>RT-Thread</b> Studio学习

    基于 RT-Thread 的 RoboMaster 电控框架(一)

    记录与分享,希望能帮助到更多初识 RT-Thread 的小伙伴,也欢迎大家交流分享,指正不足,共同进步。 背景
    的头像 发表于 09-19 19:55 772次阅读