野火RT-Thread教程学习笔记4_RTT学习基础知识梳理

Grey

全部学习汇总:​​GitHub - GreyZhang/g_RT-Thread: learning and hacking RT-Thread.​

野火RT-Thread教程学习笔记4_RTT学习基础知识梳理

摘录与批注

1120_野火RT-Thread教程学习4_RTT学习基础知识梳理_知识梳理


  • rtdef.h文件用来放RTT的数据类型定义,具体的内容部分如上面的截图。
  • 感觉这个文件不通用,不同的MCU的定义应该有差异。
  • 疑问:为什么不使用POSIX的标准类型?ucos等似乎也是类似的处理方式,为什么?

1120_野火RT-Thread教程学习4_RTT学习基础知识梳理_知识梳理_02

  • 用到了对齐方式,这个的引入是不是也会导致可移植性变差?难道这个功能会带来很大的好处值得我们妥协?

1120_野火RT-Thread教程学习4_RTT学习基础知识梳理_rt-thread_03

  • 线程的定义跟之前接触到的OS大同小异,但是这里的调度是手动触发的。

1120_野火RT-Thread教程学习4_RTT学习基础知识梳理_知识梳理_04

  • 线程块,接触的OS都有类似的设计。最复杂的还是之前看过的Linux内核。

1120_野火RT-Thread教程学习4_RTT学习基础知识梳理_链表_05


  • 这个并不是真正的OS设计,应该是一个简化版本。
  • 里面大致的信息: 线程的栈指针、线程入口、参数、堆栈起始地址、堆栈大小、线程链表节点。
  • 除了最后一个,其他的基本顾名思义即可。

1120_野火RT-Thread教程学习4_RTT学习基础知识梳理_数据结构_06

  • 线程结构与实际功能的绑定采用的就是这个函数。

1120_野火RT-Thread教程学习4_RTT学习基础知识梳理_数据结构_07

  • 这里有一个命名规则需要注意一下。

1120_野火RT-Thread教程学习4_RTT学习基础知识梳理_数据结构_08

  • 就是一个简单的链表数据结构定义。

1120_野火RT-Thread教程学习4_RTT学习基础知识梳理_堆栈_09

  • 双向链表,也是比较通用的设计概念。使用的时候注意一个头尾即可很容易理解相关的概念。

1120_野火RT-Thread教程学习4_RTT学习基础知识梳理_rt-thread_10


  • 表头之后插入一个元素,按照我自己的理解写一下或许很多其他的人也可以参考。直接这么生硬的理解其实不是很容易把这个模型化。
  • 处理其实应该分为两个部分,第一部分是处理新节点跟原始表头后的第一个节点之间关系。第二部分则是处理表头与新元素之间的关系。双向链表麻烦的就是表头和表尾,其他元素之间的关系很清晰,只有一个前驱和后继。
  • 由此,前面两行代码是第一部分。原首节点(通过表头后继得出)的前驱设置为新节点,新节点的后继设置为原来的首节点。
  • 第二部分:表头的后继设置为新的节点,新的节点的前驱设置为表头。

小结

这样,正式进军RTT代码的第一步征程就开始了。到目前为止,所遇到的一切都还是蛮简单的,至于内核调度等令人多少有点兴奋度的部分现在还没有接触到。