闲来无事, 看了下 FreeRTOS 的内核代码. GitHub代码库 FreeRTOS/FreeRTOS-Kernel.
之前在本科有接触过单片机, 微机原理, 研究生的时候也上过 RTOS 和 middleware 的课程. 但尽管如此, 当时在学习过程中可能也只有个非常模糊的概念, 知道这是个什么东西, 要怎么做, 但并不理解其中的原理. 通过阅读了 FreeRTOS 内核的一些部分, 虽然没有实质性的收获, 但对于单片机的理解知识体系的完善有不小的帮助. 很多之前学到的离散知识点更好的贯穿了在一起, 以前不理解为什么的疑问, 在这个过程中也有了答案. 甚至对于现代计算机的运作也有了更底层的理解.
想一想, 计算机领域已经经过了几十年的发展, 其包括的内容已经非常丰富. 现代计算机非常复杂, 很多地方为了优化, 在基本原理上改动非常大, 对于后来者的学习带来了巨大的压力. 太多的信息和知识点, 需要简化, 将学习过程简化到主干路线, 和还原到原始状态, 因此单片机确实是比较好的方向.
FreeRTOS主干仅为三个文件, list.c, queue.c和tasks.c. 加起来几千行代码, 学习成本不会太高. 再结合其他内容和源文件一起学习, 会是个不错的方法.
好吧, 其实我并没有非常完整的阅读其所有源码, 就对于我看到的一些做一下记录.
链表, 基础的数据结构. 其实这部分没太多好说的, 在其他部分中有大量链表的应用.
这部分就是任务调度了. 应用的背景就是单核处理的 MCU (Micro Controller Unit).
包含了上层应用中创建线程, 释放线程的实现. 这里对线程的管理, 就是用到了链表.
这个没看, 我原以为timers.c是"三巨头"的一个, 后面看说明原来不是. 不过既然是 queue, 那应该也就是简单的数据结构. 里面好像还包含了 mutex 和 semaphore 的应用, 内容挺多的.
后面有机会是得仔细看看.
软件计时器, 可用在线程中 sleep. 其中就用到了 list 和 queue 来管理其资源.
项目里是有heap_1.c一直到heap_5.c的五种不同内存管理实现, 不过当时没注意到就没看.
secure_heap.c看起来也是个内存管理的实现, 而且内容着实简洁. 也就创建内存, 释放内存, 初始化内存管理资源, 外加一个合并相邻内存块的帮助实现.
这里的实现就是简单的连续分配内存管理, 不存在内存页映射或其他之类的优化, 对于学习来说是挺原始且直接的.
整理的时候意识到一个事情, 这源码我好像看了, 又好像没看...
那好吧, 可能对我确实有帮助了, 但不太好分享出来. 说到底也只是因为无聊看一看学习的, 所以不会太专业, 也没有太全面. 这里也没有其他额外的阅读 reference 推荐, 当时也只是胡乱搜索了一些.
总体来说, 挺有意思, 挺好玩的.