全部学习汇总: GreyZhang/g_FreeRTOS: learning notes about FreeRTOS. (github.com)
一个简单的任务跑起来涉及到的基本接口现在看得差不多了,接下来全方面去了解一下FreeRTOS。先看看task.h中涉及到的几个数据结构,这样应该能够让我建立更多的理解概念。
关于预处理的使用技巧一直以来是我软件设计中的薄弱点,当然,我觉得这个主要是用于防御而不是尝试做自己的构建。不过,类似的技巧尝试学习借鉴一下也是很好的。
这里涉及到3个基本的数据结构,第一个其实是很熟悉的了,主要是用于任务的句柄。在使用的过程中,通常直接用以存储TCB实体的指针。第二个是一个Hook函数指针类型的定义,无参数、无返回值的模式。第三个是任务的状态,从这里倒是看到了任务的几种状态:运行、就绪、阻塞、挂起、删除、非法等。
这里面又是3个数据结构信息,其中MPU的暂且放一下,后面再去研究。第1个主要是定义了一些任务通知的动作:无动作、设置bits、增长、带有覆盖的模式写入、不覆盖的模式写入。第2个主要是超时相关的数据结构定义,是一个结构体,2个成员:超时计数器、进入时间。
这部分也是关于MPU使用的,暂且放一下。
这个数据结构主要是用以获取任务的状态,里面的很多信息其实跟TCB中的信息有相似之处。不过,关于堆栈的处理有一定的不同。尤其值得注意的一点是堆栈高度水印值,这个数值越小越有可能出现堆栈溢出。
这个是关于睡眠模式的几个状态:放弃睡眠、标准睡眠、没有任务等待超时。最后一个,是一种进入睡眠模式的安全状态。
大的代码工程查看起来有时候的确是有一点煎熬,我采取的方式就是分而治之。其实,孤立出来任何100行代码不管多么难总能在短时间内提取出来自己感兴趣的信息。尤其是,当代码的行数计算计算的就是自然行的时候。不过,不该小看这种小小的尝试,嵌入式的软件工程其实经不住多少个100行的分析。