Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
BSP
裁剪程序体积
RT-Thread 标准版裁剪记录
发布于 2023-07-30 21:48:43 浏览:1057
订阅该版
[tocm] # RT-Thread 标准版裁剪记录 *以 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-thread\components\drivers\ipc\SConscript` 中也需要添加以下代码: ```c 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 结尾,而并非 \r\n,所以在字符输出时,需要在输出 \n 之前输出 \r,完成回车与换行,否则系统打印出来的信息将只有换行。* ```c /** * @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!='\0') { 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` ```c 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](https://oss-club.rt-thread.org/uploads/20230730/16f8e74a632e21df11eb69d2c73f2561.jpg) 裁剪后: ![2.jpg](https://oss-club.rt-thread.org/uploads/20230730/eff2e0d7f4ddd7304462d875e2e5d436.jpg)
5
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
螺丝松掉的人
这家伙很懒,什么也没写!
文章
42
回答
0
被采纳
0
关注TA
发私信
相关文章
1
STM32 407 串口接收数据 系统卡死
2
RTT nrf24l01 设备驱动程序
3
stm32f10x串口只能发送数据,无法接收
4
第一次尝试移植rt-thread 到stm32F103系列问题
5
有人把stm32L07xx的bsp移到rtt上来了吗?求一个
6
rt-thread线程调度异常在stm32f103芯片上
7
RTT是否支持STM32F429
8
请问谁有 STM32F40x HAL + RT-THREAD 模板
9
rt-thread在stm32f411下的移植问题
10
针对STM32F7系列平台的MPU,Cache特性,需要注意哪些问题?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部