当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]uC/OS----Micro Controller OS微控制器操作系统,美国人Jean Labrosse于1192年完成,1998年出现uC/OS--II,2000年NASA许可可用于飞行器中(无人机中有木有啊!但是很少有极客把他用到飞控中,APM的操作系统是一个裁剪的Linux--Nuxxt什么鬼的)。

uC/OS----Micro Controller OS微控制器操作系统,美国人Jean Labrosse于1192年完成,1998年出现uC/OS--II,2000年NASA许可可用于飞行器中(无人机中有木有啊!但是很少有极客把他用到飞控中,APM的操作系统是一个裁剪的Linux--Nuxxt什么鬼的)。

uC/OS--II的性能特性不跟大家废话了,大家自己去看它的中文手册吧。有几点要注意理解:

1、用户任务只有56个,因为有8个是系统保留的,这有点像Linux下的系统服务daemons。如空闲任务、统计任务都是系统保留任务。

2、uC/OS中所有函数的调用和服务都有确定的时间,也就是说函数的执行周期确定、执行时间确定,这个由统计任务OSTaskStat()来完成。

3、任务的优先级就是它的标识符,最低优先级 OS_LOWEST_PRIOR=63.

下面进入主题--任务机制。

任务控制块TCB:TCB是描述任务的核心数据结构,存放了它的各种管理信息,包括任务堆栈指针,任务的状态、优先级,任务链表指针等; 一旦务建立了,任务控制块OS_TCB将被赋值。

typedef struct os_tcb

{

栈指针;

INT16U OSTCBId; /*任务的ID*/

链表指针;

OS_EVENT *OSTCBEventPtr; /*事件指针*/

void *OSTCBMsg; /*消息指针*/

INT8U OSTCBStat; /*任务的状态*/

INT8U OSTCBPrio; /*任务的优先级*/

其他……

}OS_TCB;

OSTCBStkPtr:指向当前任务栈顶的指针,每个任务可以有自己的栈,栈的容量可以是任意的;

OSTCBStkBottom:执行任务栈底的指针;

OSTCBStkSize:栈的容量,用可容纳的指针数目而不是字节数(Byte)来表示。

值得一提的是链表指针,这个设计可以快速的使任务就绪和休眠。所有的务控制块分属于两条不同的链表,单向的空闲链表(头指针为OSTCBFreeList)和双向的使用链表(头指针为OSTCBList); OSTCBNext、OSTCBPrev:用于将任务控制块插入到空闲链表或使用链表中。每个任务的任务控制块在任务创建的时候被链接到使用链表中,在任务删除的时候从链表中被删除。双向连接的链表使得一成员都能快速插入或删除。

任务的五个状态:休眠、就绪、运行、中断、挂起(阻塞)。

各状态间的相互转换:

好了,既然一共有64个任务,那我是怎么知道现在到底该运行哪个任务呢?这就是任务就绪表的工作了。

多列几种就绪情况会发现,OSRdyGrp和OSRdyTbl[]的赋值与优先级priority有一定的关系哦。我们先列一个编码表叫OSMapTbl[7]=2^n.n=0.1.2...7(同理就有OSUnMapTbl[7])。可以得到这个公式

说明OSRdyGrp与优先级的高三位有关、OSRdyTbl与优先级的低三位有关.通过上面公式就可以把相应的任务标志为就绪状态。既然有让他进入就绪态的方法,也就有让他解除就绪状态--休眠态的方法

任务的调度。前面的准备工作做好了之后,下面就可以真正的运行任务了。确定哪个务的优先级最高,应该选择哪个任务去运行,这部分的工作是由调度器(Scheduler)来完成的。任务级的调度是由函数OSSched()完成的;中断级的调度是由另一个函数OSIntExt()完成的。

首先根据就绪表确定最高优先级。然后根据最高优先级替换当前任务的TCB,进行上下文切换。

void OSSched(void)

{

INT8U y;

OS_ENTER_CRITICAL();

OS_EXIT_CRITICAL();

}

可以看到实际执行任务切换的是OS_TASK_SW()函数(也就是OSCtxSW()),我们看下任务切换的过程:

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

【2025年8月29日,中国上海讯】近日,第二十届全国大学生智能汽车竞赛(以下简称“智能车大赛”)总决赛在杭州举办并圆满结束。作为大赛主协办单位,英飞凌科技从技术支持与人才培养上全方位支持赛事,践行产学研合作,助力行业人...

关键字: 微控制器 LED驱动芯片 人机交互

在工业物联网(IIoT)与边缘计算快速发展的背景下,Modbus协议凭借其轻量化特性成为微控制器(MCU)设备互联的首选方案。然而,在资源受限的MCU(如STM32F0系列、ESP8266等,RAM通常小于32KB,Fl...

关键字: 微控制器 Modbus 工业物联网

在工业物联网设备开发中,Modbus从站功能已成为微控制器(MCU)的标配能力。某智能电表项目通过在STM32上实现Modbus RTU从站,成功将设备接入现有SCADA系统,开发周期缩短40%。本文将系统解析MCU实现...

关键字: 微控制器 Modbus 协议栈优化

2025年8月21日 – 专注于引入新品的全球电子元器件和工业自动化产品授权代理商贸泽电子 (Mouser Electronics) 即日起开售Silicon Labs全新xG26系列无线SoC和MCU。xG26片上系统...

关键字: SoC 微控制器 物联网

现代汽车力求提供和家里一样的舒适性和娱乐功能,因此,行业对电子控制单元(ECU)的需求呈现爆发式增长。然而,传统的总线技术和电气/电子(E/E)架构已经难以满足这种需求。本文探讨以太网技术如何革新汽车空间,塑造完全互联的...

关键字: 以太网 ECU 微控制器

在科技飞速发展的当下,智能设备已深度融入人们的生活与工作。其中,PDA(Personal Digital Assistant,个人数字助理)作为一款集信息输入、存储、管理和传递于一体,且具备办公、娱乐、移动通信等多种功能...

关键字: 智能设备 触摸屏 微控制器

【2025年8月15日,德国慕尼黑讯】英飞凌科技股份公司(FSE代码:IFX / OTCQX代码:IFNNY)近日宣布完成对Marvell Technology, Inc.(NASDAQ代码:MRVL)汽车以太网业务的收...

关键字: 以太网 机器人 微控制器

2025年8月14日,致力于亚太地区市场的国际领先半导体元器件分销商---大联大控股宣布,其旗下诠鼎推出基于新突思(Synaptics)SL1680嵌入式处理器的AI疲劳驾驶检测方案。

关键字: AI 嵌入式处理器 Type-C

2025年7月25日,中国 – 服务多重电子应用领域、全球排名前列的半导体公司意法半导体 (STMicroelectronics,简称ST) (纽约证券交易所代码:STM) 公布了按照美国通用会计准则 (U.S. GAA...

关键字: 微控制器 数字IC 传感器

我的项目是一个自动植物浇水系统,它通过检查土壤湿度和只在需要的时候浇水来帮助照顾植物。这是一种保持植物健康的聪明、有效的方法——尤其是在你健忘、忙碌或不在家的时候。

关键字: 湿度传感器 微控制器 水泵
关闭