RT-Thread标准版裁剪记录

电子说

1.3w人已加入

描述

以 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 大部分工具的工程,大大减小代码体量。

裁剪前:

USART串口

裁剪后:

USART串口

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分