其实接触RT-thread 有很长一段时间了,但是为什么到现在才打算深入的研究一下这个系统?
最开始接触RT-thread的时候是在一个项目中,那个时候才知道原来国产也有实时系统,但是由于ucos 和FreeRtos的原因,所以应用RT-thread的时间并不是很长。
得益于近几年物联网的普及,这款国产实时系统的存在感越来越强,丰富的中间层组件,千万级设备的稳定性考验,外加丰富的中文资料,真心的觉得它的发展会越来越好。这些都不是最主要的,他的类Linux/Unix的代码风格,真的有耳目一新的感觉。在学习liunx的时候很多没理解的概念,从RT-thread上竟然理解了。
真的是很多单片机想转linux方向进阶的垫脚石。
不得不强调的是,他的一些中间层组件真的能在项目的开发和调试中节省很多的工作量。
说了它的这么多好处,那么我们就该坚定的把他学习好了。
我们主要从应用的角度来快速的学习,毕竟官方资料很多了,而且是中文,我们按教程说一遍也没啥意思。
我们最开始的时候要知道他源码怎么获取,怎么裁剪,先将内核先跑一遍,然后再去研究什么内存管理,线程创建什么的。
打开官网,我们就看到,RT-thread 有两种类型的版本一个完整版,一个Nano,选哪个??
完整版就是包含很多组件,Nano就是裁剪的只剩内核了。我的话就选完整版,正好学习一下它是怎么裁剪的。
那么我们从哪获取RT-thread源码,git直接获取也行,STM32的cubMX也能获取到,但是我们选择官方提供的Env工具,当你看到这个软件的时候你就有种错觉,我这是在配置linux的内核吧,通过menuconfig的界面来配置工程,裁剪内核,中间件,是很方便的,官方这么费劲给你做出来,你不用合适吗??
不过这个工具只能生成IAR和keil工程,我比较习惯用keil,虽然他编译很慢。
那么这时的我们目标就明确了,下载安装Env工具,生成stm32F429的keil工程。
不过在生成之前我们可以先下载一下它的一个测试历程(keil模拟器STM32F103上手指南),来提前体验一下它的内核,通过shell指令来控制程序,这里叫FinSH控制台,真的是在使用这个系统的时候,无时无刻都能看到linux的影子。
历程在官网很容易找到,获取很容易,keil打开编译没有任何问题。
可以看到文件夹结构比较清晰,HAL库,RTT内核文件,主函数,但是当我详细看的时候,发现main.c什么鬼,啥都没有就一个返回值,实例编写格式和之前使用的FreeRtos完全不一样,一脸懵逼,反正不管了,先运行看结果,然后再分析。
debug之后原来发现并不是从刚才的main.c开始执行的,是从comonents.c开始的,按照说明debug,然后打开串口,模拟效果还真不错
真真它X的爽。help了一下,这操作这打印。。。。。
这不就是个小型u-boot吗?这以后写个例子调试个板卡,那就真的方便了,联调更舒心。
查看个内存占用,是不是爱上这个。
但是我们开头有个疑问,执行的时候并不是进入main.c的main而是进入了components.c的int $Sub$$main(void),然后在这个里面进行了启动内核的操作。
原来它在 __CC_ARM 编译器环境下,使用了$Sub$$ 与 $Super$ $ 的“补丁”功能
这是一种特使模式:用于有一个已经存在且不能被改变的函数的情况,使用这个模式帮源函数打补丁。真的是佩服,这个也能打补丁。
int $Sub$$main(void) --》 rtthread_startup();--》 rt_application_init();
--》result = rt_thread_init(tid, "main", main_thread_entry, RT_NULL,
main_stack,sizeof(main_stack), RT_MAIN_THREAD_PRIORITY,20);
--》 $Super$$main(); 调用到main.c的main。
当然也可以如下图,直接调到main,然后再进行操作,整个过程就是标准的RT-thread,初始化,任务创建的过程,之后我们在详细看这部分,目前只知道打印是怎么来的。
也体验过了,那么我们就该自己安装Env工具,配置一个自己的工程。
因为一些事情耽误了了学习进度,还没有安装Env工具,但是恰巧2020年1月1日,官方更新了新的配置工具RT-thread studio,虽然Env已经够好用了,但是有了这个神器开发是真的爽,那么我们就直接下载这个软件就可以了
软件在手,天下我有,不用keil,也不用Env,直接全部在这一个软件内搞定。
最近一直在网上搜索RT-thread 的内容,但是发现网上相关的开源项目特别少,并且涉及的知识不是很多,教程也是很少,最全面的内容就是RT-thread 官方的网站和正点原子的一些教程,但是不足的是都是些讲原理,和一些基础的知识,作为初学者觉得学了半天理解了吗??好像理解了,但是还是不知道该怎么做项目?也体会不到Rt-thread 的强大,如此强悍的国产实时系统应该让更多的人用起来
考虑许多天,决定基于rt-thread做一个开源项目,从硬件,软件的M3的代码到平台端的交互和大家一些开始逐步的学习。
今天先写到这里,想一块学习Rt-thread的可以持续关注一下。
明天开始说一下整个项目的软硬件框架,及涉及的内容。