os_tcb

2024-04-27 23:18
文章标签 os tcb

本文主要是介绍os_tcb,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

struct os_tcb {
    CPU_STK             *StkPtr;                            /* 指针变量指向当前任务栈的栈顶*/
    void                *ExtPtr;                            /* 指针变量指向任务可定义的扩展区*/
    CPU_STK             *StkLimitPtr;                       /* 指针变量指向任务栈的栈深度位置*/
    OS_TCB              *NextPtr;                           /* 任务就绪表中的下一个任务控制块*/
    OS_TCB              *PrevPtr;                           /* 任务就绪表中的上一个任务控制块*/
    OS_TCB              *TickNextPtr;                        /* 正在延时后等待某个事件任务的下一个任务控制块*/
    OS_TCB              *TickPrevPtr;                        /* 正在延时后等待某个事件任务的上一个任务控制块*/
    OS_TICK_SPOKE       *TickSpokePtr;                      /* 通过该指针可以知道该任务挂在时钟节拍列表的哪个位置*/
    CPU_CHAR            *NamePtr;                           /* 给任务起名字(ASCII字符串)*/
    CPU_STK             *StkBasePtr;                        /* 任务栈的基地址*/
    OS_TASK_PTR          TaskEntryAddr;                     /* 任务函数的入口地址*/
    void                *TaskEntryArg;                      /* 任务函数的入口参数*/
    OS_PEND_DATA        *PendDataTblPtr;                    /* μC/OS允许任务挂起在任意数目的信号量或消息队列上,该指针指向任务挂起表*/
    OS_STATE             PendOn;                            /* 表示任务等待的事件类型/
    OS_STATUS            PendStatus;                        /* 表示任务等待的状态 */
    OS_STATE             TaskState;                         /* 任务当当前状态(内部状态机的8个状态之一)*/
    OS_PRIO              Prio;                              /* 任务的优先级*/
    CPU_STK_SIZE         StkSize;                           /* 任务栈的大小*/
    OS_OPT               Opt;                               /* 任务创建时的选项*/
    OS_OBJ_QTY           PendDataTblEntries;                /* 表示同时等待的事件对象的述目与PendDataTblPtr配合使用*/
    CPU_TS               TS;                                /* 时间戳*/
    OS_SEM_CTR           SemCtr;                            /* 任务内建的计数型信号量的计数值*/

                                                            /* DELAY / TIMEOUT                                        */
    OS_TICK              TickCtrPrev;                       /* 任务开始延时时的时钟值*/
    OS_TICK              TickCtrMatch;                      /* 任务开始延时时的时钟值与延时时间的总和,用来确定是否延时结束*/
    OS_TICK              TickRemain;                        /* 剩余延时时间*/
                                                            /* ... run-time by OS_StatTask()                          */
    OS_TICK              TimeQuanta;                        /*时间片轮转调度时,给任务分配的时间片(时钟节拍数)*/
    OS_TICK              TimeQuantaCtr;                        /*当前任务的时间片剩余值*/

    void                *MsgPtr;                            /* 当任务接收消息时,该指针指向消息*/
    OS_MSG_SIZE          MsgSize;                            /*表示接收消息的长度*/

    OS_MSG_Q             MsgQ;                              /* 任务内建消息队列*/
    CPU_TS               MsgQPendTime;                      /* 记录一条消息到达所花费的时间*/
    CPU_TS               MsgQPendTimeMax;                   /* 记录一条消息到达所花费的最长时间*/

    OS_REG               RegTbl[OS_CFG_TASK_REG_TBL_SIZE];  /* 每个任务的专用寄存器不同于CPU寄存器,用来存储任务专用的消息,
                                    例如:任务ID、errno信息,还可以存储在系统运行时与任务相关联的数据,数据类型必须为OS_REG */

    OS_FLAGS             FlagsPend;                         /*等待事件组标志位*/
    OS_FLAGS             FlagsRdy;                          /* 等待事件组标志位中的就绪位*/
    OS_OPT               FlagsOpt;                          /* 等待的类型*/

    OS_NESTING_CTR       SuspendCtr;                        /* 记录任务挂起的次数*/

    OS_CPU_USAGE         CPUUsage;                          /* 统计任务记录的任务CPU利用率(0.00-100.00%)*/
    OS_CPU_USAGE         CPUUsageMax;                       /* CPU Usage of task (0.00-100.00%) - Peak*/
    OS_CTX_SW_CTR        CtxSwCtr;                          /* 任务执行的频繁程度(每次调用就递增)*/
    CPU_TS               CyclesDelta;                       /* 此次执行任务所花费的时间,切换时计算value of OS_TS_GET()-.CyclesStart*/
    CPU_TS               CyclesStart;                       /*任务切换时,记录的当前任务运行开始的时间*/
    OS_CYCLES            CyclesTotal;                       /* 任务运行的总时间sum of CyclesDelta*/
    OS_CYCLES            CyclesTotalPrev;                   /* Snapshot of previous # of cycles                       */

    CPU_TS               SemPendTime;                       /* 信号量发送到接收所花费的时间OSTaskSemPost()开始计时,OSTaskSemPend()时返回*/
    CPU_TS               SemPendTimeMax;                    /* SemPendTime的最大值,即花费的最长时间*/

    CPU_STK_SIZE         StkUsed;                           /* 由OSTaskStkChk()统计的当前任务的堆栈使用字节数*/
    CPU_STK_SIZE         StkFree;                           /* 由OSTaskStkChk()统计的当前任务的堆栈未使用字节数*/

    CPU_TS               IntDisTimeMax;                     /* 最大中断关闭时间*/
    CPU_TS               SchedLockTimeMax;                  /* 锁定调度器的最长时间*/

    OS_TCB              *DbgPrevPtr;                        /* 指向OS_TCB双向链表中的前一个OS_TCB,当创建任务时,相应的TCB被插入到双向链表中*/
    OS_TCB              *DbgNextPtr;                        /* 指向OS_TCB双向链表中的后一个OS_TCB,当创建任务时,相应的TCB被插入到双向链表中*/
    CPU_CHAR            *DbgNamePtr;                        /* 当任务在等待一个时间标志组、一个信号量、一个互斥信号量或一个消息队列时,该指针指向任务所等待对象的名字*/
};
 

这篇关于os_tcb的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/941749

相关文章

Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.B

一个bug日志 FATAL EXCEPTION: main03-25 14:24:07.724: E/AndroidRuntime(4135): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.syyx.jingubang.ky/com.anguotech.android.activity.Init

【python 文件操作】shutil模块和OS模块

总结 os包: rmdir, mkdir, listdir, remove, rename, chmod, chown, stat, symlink shutil包: copy, move os包 os包包括各种各样的函数,以实现操作系统的许多功能。这个包非常庞杂。os包的一些命令就是用于文件管理。我们这里列出最常用的: mkdir( path ) 创建新目录,path为一个字符串,表示新

Linux进程初识:OS基础、fork函数创建进程、进程排队和进程状态讲解

目录 1、冯诺伊曼体系结构 问题一:为什么在体系结构中存在存储器(内存)? 存储单元总结: 问题二:为什么程序在运行的时候,必须把程序先加载到内存? 问题三:请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。 2、操作系统 2.1操作系统的概念: 我们首先要明白什么是管理: 2.2为什么要有操作系统? 2.3操作系统如何保证稳定和安全呢?(利用系统调用函数解决)

Beyond Compare4.2.4 64位OS最新密钥

亲测可用,拿来主义 6TTCoWi2N0Pv+o2HGfqUpZfuaMhtf2zX0u1OuNeqTYkKKWh-CKwBWkPUG3+CiAQ2q4MNPbf0t8+gmPdo+Vyw64aU-zuQQt9d7Q6EcJ+T42by0E+kxf+q3QLs40H+RD3h5OLjFGpxClodRnTCNoAM39xsWm2aHZI0Z9KdXzLo1fo1OdNlaptoK17SsxNK-

OS_程序的装入与链接

2024.09.05:操作系统程序的装入与链接学习笔记 第12节 程序的装入与链接 2.1 程序的装入2.1.1 绝对装入方式2.1.2 可重定位装入方式(静态重定位)2.1.3 动态运行时装入方式(动态重定位) 2.2 程序的链接2.2.1 静态链接方式2.2.2 装入时动态链接2.2.3 运行时动态链接 操作系统的第三章内存管理,在学习正式的管理策略之前,我们知

[linux命令] 随笔集 center OS 7 蛋疼的改动 一个菜鸟的奋斗shit~~~

2018年7月24日17:22:30 虚拟机查看ip地址  center OS 7  最小化安装. 查看ip地址:使用ifconfig已经不适用了 , 需要使用 ip addr 可以看到 关闭防火墙命令也不是 stop iptables.service 命令了,  看下百度经验吧7 关闭防火墙系列命令 关闭防火墙: systemctl stop firewalld.service

苹果系统升级 为 OS X EL Capitan 后安装 cocoapods

1.移除现有Ruby默认源 $gem sources --remove https://rubygems.org/ 2.使用新的源 $gem sources -a https://ruby.taobao.org/ 3.验证新源是否替换成功 $gem sources -l 4.安装CocoaPods  $sudo gem install -n /usr/local/bi

句柄和TCB

句柄到底是什么?TCB又是什么?C代码实例讲解_c 句柄-CSDN博客 修正代码 你需要在 aht20_create 函数的末尾添加一个 return 语句,以返回创建的句柄。修正后的函数应如下所示: aht20_handle_t aht20_create(i2c_port_t port, uint8_t ATH20_SLAVE_ADDRESS ) { aht20_dev_t *se

XCode开发OS X时多个版本TARGETS的控制

XCode开发OS X时多个版本TARGETS的控制 主要有以下步骤: 1.选择TARGETS的一个,然后Right Click->Duplicate(复制) 生成一个copy 2.然后修改这个copy,click 2次,就可以修改。 3.然后在STOP旁边的 编译目标点击,会出现Manager 表格,打开,点击刚才的copy,修改名称,最好和上面一致,这样容易辨认。 4.修改第一个TA

在MAC OS X 开发中,如何让程序有多线程?方法1

学习目的:NSThread的使用 功能: 1):主线程,不做任何事情,如果做事,就会先执行,然后其他事件排后执行,这样导致界面会等待主线程事件完成后,才做其他的响应事件。 (这不是我们的目的,我们的目的是:一边一个事件执行中,一边其他界面的控件能去做事,而不是界面卡住状态!) 2):辅助线程1:申明,然后初始化,然后start,三步完成,停止,可以直接设置一个中间变量来停止,然后cance