
花了不少时间学习了火哥的《RT-Thread 内核实现与应用开发实战指南》这本书,对RTT这个RTOS有了系统的了解了。这本书作为一个入门教材,还是很好的。书里第一部分教你从0开始写RTT内核,由浅入深一步一步带你走入RTOS。后面则是结合板子,编写代码,把RTT移植并应用在MCU开发板上面。# Q- ~8 |3 _. x0 E1 }4 f0 s 第一部分 :从0到1教你写RT-Thread内核 这一部分是教我们从0开始把RT-thread写出来,从新建工程开始,到实现线程的建立和切换,支持优先级,支持时间片等等,着重讲解RTOS怎么实现的过程。 开始还不需要用到开发板,全部内容都可以通过Keil来仿真实现。我们这类的初学者,需要做的就是看着书本的概念讲解,理解思维,然后学着如何一行一行的把code敲出来,就行了。/ j5 s9 e7 I" k! H* w4 V 关于多线程" W( s0 S2 z" d& d" G( X 与裸机程序相比,RTOS最明显的区别就是它的多线程机制。相比传统的前后台系统,在多线程系统中,根据程序的功能,我们把这个程序主体分割成一个个独立的线程,每个线程都是独立的,互不干扰的,且具备自身的优先级,它由操作系统调度管理。加入操作系统后,我们在编程大系统工程的时候不需要精心地去设计程序的执行流,编程变得简单了。不过在小的程序工程里面引入RTOS优点不明显,甚至说这么做是不明智的,因为杀鸡不需要牛刀,更何况买刀还需要另外的开销(RTOS消耗额外的flash和ram)。 多线程并不是真正意义上的“多线程”,由于架构原因MCU在一时刻只能执行一个任务,多线程是因为多个线程来回不断切换,形成了一种多任务并行执行的假象。所以了解RTT的第一步就是学习如何建立线程,管理线程,调度线程。 在多线程系统中,每个线程都是独立的,互不干扰的,所以要为每个线程都分配独立的栈空间,有多少个线程就需要定义多少个线程栈。系统为了顺利的调度线程,为每个线程都额外定义了一个线程控制块,这个线程控制块就相当于线程的身份证,里面存有线程的所有信息。系统对线程的全部操作都可以通过这个线程控制块来实现。: ~ v- k% d2 Y- v j: R 线程的栈,线程的函数实体,线程的控制块最终需要联系起来才能由系统进行统一调度。这个联系的工作就由线程初始化函数rt_thread_init()来实现,该函数在thread.c中定义,在rtthread.h中声明。 调度器是操作系统的核心,其主要功能就是实现线程的切换,从代码上来看,调度器无非也就是由几个全局变量和一些可以实现线程切换的函数组成,全部都在scheduler.c文件中实现。利用函数rt_hw_context_switch_to()实现线程切换,该函数在context_rvds.s中实现,在rthw.h声明。; C6 d A j: y! ] T7 c% N 线程是RTOS的基础,刚开始接触,概念很多,不太好消化,反反复复看了好几天了。里面涉及到了链表和汇编,要了解其中的流程以及原理,还是需要花不少功夫的。不过后来我也觉得,其实初学者开始不一定需要先了解这些,直接用API就行了,先用起来,然后再去了解原理,这样会更好。初学者也能轻松简单用起来,这应该也是一个优秀的RTOS具备的优点,学会用了,再开始学着去移植,逐步深入。 1 t1 V# A6 X4 X( {* K. d, W! X |
支持支持 |
MCSDK FOC应用详解
STM32F10xxx 正交编码器接口应用笔记 及源代码
基于STM32定时器ETR信号的应用示例
STM32 生态系统|基于STM32WB的低功耗蓝牙应用(一)
《无刷直流电机控制应用 基于STM8S系列单片机》
STM32定时器触发SPI逐字收发之应用示例
【银杏科技ARM+FPGA双核心应用】STM32H7系列10——ADC
【银杏科技ARM+FPGA双核心应用】STM32H7系列57——MDK_FLM
【STM32图书分享之九】—《STM32F 32位ARM微控制器应用设计与实践》
无刷直流电机控制应用+基于STM8S系列单片机---电子书