怎样剪裁所需的 RT-Thread 内核

动手裁剪满足自己需要的 RT-Thread 内核。

Posted by Sugar on July 8, 2019

背景介绍:
前段时间《我精简的 RT-Thread 内核开源啦》引起了很多网友的关注。
有参加《软件架构训练计划》的群友表示自己用的是 stm32f103ze 开发板,想要减裁一个与板子匹配的内核用于训练。
本文说说如何从 RT-Thread 官方 github 剪出自己所需的代码。

本来就有nano,自己精简还有什么意义?

在 RT-Thread 官微的评论中我看到了这个问题,下面给出我的想法。

  1. MDK5 和 CubeMX 都有 RT-Thread 的内核包,但不一定是最新的。 自己减裁可随时用 git 与 RT-Thread 官方 github 源码进行 merge,自食其力最先尝鲜

  2. 大型的开源代码文件都比较多,功能比较全面。但落到个人需求上,有很多功能可能并不需要。自己动手,可以得到满足自己需求的精准代码。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

提示:在公众号“关于我”页面可加作者微信好友。

请我喝杯咖啡如何?

微信 weixinfukuan 支付宝 zhifubaofukuan