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

    文章

    17

    浏览量

    6703
  • RT-Thread
    +关注

    关注

    31

    文章

    1149

    浏览量

    38906
  • USART串口
    +关注

    关注

    0

    文章

    31

    浏览量

    6723
  • stm32cubemx
    +关注

    关注

    5

    文章

    260

    浏览量

    14448
  • HAL库
    +关注

    关注

    1

    文章

    112

    浏览量

    5894
收藏 人收藏

    评论

    相关推荐

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

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

    RT-Thread记录(十、全面认识 I/O 设备模型)

    学完 RT-Thread 内核,从本文开始熟悉了解 RT-Thread I/O 设备管理相关知识。
    的头像 发表于 06-30 10:38 3550次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>记录</b>(十、全面认识 I/O 设备模型)

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

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

    RT-Thread记录(五、RT-Thread 临界区保护)

    本文聊聊临界区,以及RT-Thread对临界区的处理
    的头像 发表于 06-20 16:06 4293次阅读
    <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标准版里如何实现像伪代码那样的空闲中断

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

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

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

    RT-Thread开发,如何有效学习RT-Thread的五个步骤

    RT-Thread推出RT-Thread Inside战略开放RT-Thread开发平台授权合作,与硬件十万个为什么合作首次推出第一款RT-Inside的开发板——iBox物联网开发套
    的头像 发表于 09-25 09:55 3.4w次阅读
    <b class='flag-5'>RT-Thread</b>开发,如何有效学习<b class='flag-5'>RT-Thread</b>的五个步骤

    RT-Thread Smart已正式上线

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

    记录——基于 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 20次下载
    【<b class='flag-5'>RT-thread</b>】如何将<b class='flag-5'>RT-thread</b>系统移植到stm32

    RT-Thread记录(八、理解RT-Thread内存管理)

    记得最初学习 RT-Thread ,对于内存管理我也是简单看看然后一笔带过,当时觉得用不上,在我做的一些传感器单品项目上,对于内存管理确实知道与不知道没什么关系,但是随着认知的增长,项目复杂程度增加,发现内存管理还不可或缺,于是今时今日正好再次来更新 RT-Thread
    的头像 发表于 06-23 10:11 1782次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>记录</b>(八、理解<b class='flag-5'>RT-Thread</b>内存管理)

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

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

    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 SMP 介绍与移植

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