背景介绍:
前段时间《我精简的 RT-Thread 内核开源啦》引起了很多网友的关注。
有参加《软件架构训练计划》的群友表示自己用的是 stm32f103ze 开发板,想要减裁一个与板子匹配的内核用于训练。
本文说说如何从 RT-Thread 官方 github 剪出自己所需的代码。
本来就有nano,自己精简还有什么意义?
在 RT-Thread 官微的评论中我看到了这个问题,下面给出我的想法。
-
MDK5 和 CubeMX 都有 RT-Thread 的内核包,但不一定是最新的。 自己减裁可随时用 git 与 RT-Thread 官方 github 源码进行 merge,自食其力最先尝鲜。
-
大型的开源代码文件都比较多,功能比较全面。但落到个人需求上,有很多功能可能并不需要。自己动手,可以得到满足自己需求的精准代码。nano 没有的加进来,多余的功能拿出去,这一来一回不但得到了精准的代码,更重要的是加深了对 RT-Thread 的认识和了解。
怎样动手精简
RT-Thread 文件结构很清晰,剪裁很方便。大部分用
复制粘贴法
就行,一小点地方自己改一下就 OK。
- 【要点一】内核保留与 RT-Thread 官方一致的文件结构。
- 【要点二】取出适合自己的驱动,稍加改动。
- board 文件夹的修改
- entry.h 小技巧
这里直接给出代码,就是用宏代替创建线程的一串代码,目的之一就是省事。
#ifndef __ENTRY_H__
#define __ENTRY_H__
#include <rtthread.h>
#include <rtdevice.h>
#define RTT_CREATE(NAME,ENTRY,ARGS,STACK_SIZE,PRI,TICK) \
NAME##_thread = rt_thread_create(#NAME, \
ENTRY, \
ARGS, \
STACK_SIZE, \
PRI, \
TICK); \
if(NAME##_thread != RT_NULL) \
rt_thread_startup(NAME##_thread); \
else{ \
rt_kprintf(#NAME " thread create failed!\n"); \
return -1; \
} \
#endif
看过我视频的都知道,我创键线程的时候只写一句话:
RTT_CREATE(led1,led1_thread_entry,RT_NULL,256,5,20);
为什么这么省事,就是因为 entry.h 里这个宏定义。
- rtconfig.h
这个就不说了,用 RT-Thread 的应该没有人不知道这个文件。
如果你真的不知道,去看下野火的:
[野火®]《RT-Thread 内核实现与应用开发实战—基于STM32》
一处不是必要的修改
这处修改是我在 ubuntu 下用自己的 gcc 编译,提示 libc 库中有冲突的一种解决办法。
不是必须的,有其他办法解决。
用 MDK5 和 IAR 的不影响,可以不改这里。
PS
以上就是我按自己的 stm32f4discovery 开发板精简 RT-Thread 内核的全过程。
后续我会保持跟 RT-Thread 官方 master 分支的同步,继续做先吃螃蟹的人。
如果你也想跟我一样先吃螃蟹,那就按本文的方法自己动手试试吧。
关注作者
欢迎扫码关注我的公众号MultiMCU EDU
。
提示:在公众号“关于我”页面可加作者微信好友。
请我喝杯咖啡如何?
微信 支付宝