以 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 大部分工具的工程,大大减小代码体量。
裁剪前:
裁剪后:
-
软件定时器
+关注
关注
0文章
18浏览量
6806 -
RT-Thread
+关注
关注
31文章
1308浏览量
40496 -
USART串口
+关注
关注
0文章
32浏览量
6903 -
stm32cubemx
+关注
关注
5文章
284浏览量
15128 -
HAL库
+关注
关注
1文章
121浏览量
6403
发布评论请先 登录
相关推荐
使用RT-Thread标准版如何实现空闲中断?
下载rt-thread标准版nrf52832无法进行直接编译是咋回事
RT-Thread编程指南
RT-Thread Smart已正式上线
记录——基于 RT-Thread 实现 USB 虚拟串口
![<b class='flag-5'>记录</b>——基于 <b class='flag-5'>RT-Thread</b> 实现 USB 虚拟串口](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
【RT-thread】如何将RT-thread系统移植到stm32
![【<b class='flag-5'>RT-thread</b>】如何将<b class='flag-5'>RT-thread</b>系统移植到stm32](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
RT-Thread学习笔记 RT-Thread的架构概述
![<b class='flag-5'>RT-Thread</b>学习笔记 <b class='flag-5'>RT-Thread</b>的架构概述](https://file.elecfans.com/web2/M00/52/31/pYYBAGLKk5WAA__jAADjdAdXhIs410.jpg)
RT-Thread env工具安装
![<b class='flag-5'>RT-Thread</b> env工具安装](https://file.elecfans.com//web2/M00/8A/81/pYYBAGO9Tm2Aee6JAAArN21p-wo091.png)
RT-Thread文档_RT-Thread 潘多拉 STM32L475 上手指南
![<b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> 潘多拉 STM32L475 上手指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
评论