FreeRTOS之TCB

本文深入探讨了FreeRTOS中任务控制块(TCB)的重要信息,包括栈顶指针、状态列表项、任务优先级等,并解释了为什么栈顶指针需要放在结构体的首位。内容涉及C语言结构体的内存布局和汇编代码中栈顶指针的快速访问。通过理解TCB数据结构,读者可以更好地了解实时操作系统的工作原理。
摘要由CSDN通过智能技术生成

FreeRTOSMini实现了最小任务调度。现在分开介绍进程调度重要部分。进程调度的基础首先是定义任务调度的数据结构,来保存任务堆栈结构和任务状态所在状态列表,然后就是任务的优先级唯一号等。

最小Mini内核参照“FreeRTOSMini”篇,包含源码下载地址。

TCB重要信息有:
1.栈顶指针(pxTopOfStack并且告诉编译器不要优化,随时会变化),和芯片位数一致的整形指针指向任务栈顶。任务让出CPU时候要把寄存器R0-R15、程序计数器、程序状态寄存器等CPU执行上下文压到任务栈。任务被执行时候要通过TCB的栈顶指针从任务栈出栈恢复之前保存的上下文信息再接着执行。

2.状态列表项(xStateListItem),通过该列表项所属列表的指针快速调整状态列表项所在状态,即TCB所在状态。调度时候该列表项在就绪列表,当前运行项,等待列表不停切换。

3.任务优先级(uxPriority),任务调度按优先级实行抢占事调度,优先级也决定任务状态列表项所进的相应优先级列表。

4.其他的就不是那么重要了,像任务唯一号等等都是些辅助方面的。

为什么栈顶指针变量要放TCB结构体第一位(第二位就不行吗?)。这里就涉及到C语言结构体的实现了。
1.什么是结构体?
2.结构体内存本质是什么?

下面是我对结构体的理解:
结构体就是按结构把一些属性打包。这些属性占用的内存空间要求固定,如果是字符数组,长度是固定的。或者char*指针,指针大小是固定的,指针指向的东西长度可以不固定。结构体更像是面向简化开发写代码的东西。代码只要某个结构体对象->属性来操

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值