基于实时内核开发嵌入式多任务程序方案

发布时间:2015-01-20 阅读量:731 来源: 我爱方案网 作者:


【导读】近年来,电器越来越多功能化,相对应的嵌入式系统应用也要日益复杂化,传统的前台/后台程序开发机制已经不能满足需求,目前更多地采用抢占式实时内核开发嵌入式多任务系统。实时内核为多任务应用程序提供最基本和最重要的服务。本文介绍基于实时内核开发嵌入式多任务程序方案。

好消息!2015年新年来临之际,我爱方案网准备了ST开发板、庆科WIFI模块开发套件以及智能硬件研发必备的精密样片,只需填写个人信息与开发计划即有机会获得。更多详情>>>>

随着嵌入式系统的广泛使用,传统的前台/后台程序开发机制已经不能满足日益复杂和多样化的嵌入式应用需求,因而常常采用嵌入式实时操作系统内核(简称实时内核)开发实时多任务程序。嵌入式实时内核提供多任务、任务管理、时间管理、任务间通信和同步、内存管理等重要服务,使嵌入式应 用程序容易设计和扩展。

内核是管理微处理器或者微控制器时间的软件,确保所有时间关键的事件尽可能高效地得到处理;允许将系统分成多个独立的任务,每个任 务处理程序的一部分,从而简化系统的设计过程。

一、非抢占式内核和抢占式内核

实时内核分为两种:非抢占式内核和抢占式内核。这两种内核都由中断服务例程(ISR)处理异步事件。在非抢占式内核中,一个ISR使优先级更高的任务就 绪,并不立即将CPU控制权交给优先级高的任务,而是返回到被中断的当前任务。只有当前任务执行某种操作明确放弃CPU时,优先级高的新任务才得到CPU 控制权。非抢占式内核对实时事件的响应时间不确定,因而极少在实时应用中使用。图1所示为非抢占式内核程序流程:①低优先级任务(LPT)执行;②低优先 级任务被中断;③执行中断服务例程,使高优先级任务(HPT)就绪;

 非抢占式内核程序流程
 
④中断服务例程返回到被中断的低优先级任务;⑤低优先级任务继续执行;⑥低优先级任务放弃CPU;⑦高优先级任务运行。 目前在大多数嵌入式实 时多任务系统应用中,对系统实时响应要求很高,因此采用抢占式内核确保时间关键的任务最先执行,使优先级最高的就绪任务总是最先得到 CPU控制权。

优先级低的当前任务能够被优先级更高的任务抢占,暂时挂起执行,将CPU控制权交给优先级高的任务。图2所示为抢占式内核程序流程:①低优 先级任务执行;②异步事件使任务中断;③响应异步事件,运行中断服务例程,使高优先级任务就绪;④中断服务例程返回到高优先级任务;⑤高优先级任务执行, 直到它被中断转向执行优先级更高的任务;⑥高优先级任务结束,内核切换到低优先级任务;⑦低优先级任务继续执行。

 

二、多任务

利用实时内核开发嵌入式多 任务系统程序,要根据明确的设计目的确认系统功能,将系统功能合理分解,构造不同的任务,使每个任务负责完成应用要求的一部分功能;并根据任务相对于其他 任务的重要性决定其优先级。多个任务彼此独立运行,具有独立的私有堆栈空间,在被其他进程抢占时能够保持任务执行线程的上下文。 1.任务 任务是单线程序列指令形成的一个无限循环,在系统程序中用函数表示(如下)。任务执行时要调用内核提供的服务,以等待某个事件发生。事件可以是定时间,或 者是另一个任务、一个中断服务例程发出事件通知。 Void Task (void) { While (true) { Run Application-specific codes; Wait for event by calling a service provided by the kernel; Run Application - specific codes; } }

抢占式内核程序流程
 
2.任务管理 每个任务有5种状态;休眠、就绪、运行、等待、中断。图3所示为任务之间的状态转换。休眠状态的任务驻留在存储器中,还未被内核使用;就绪状态的任务准备 执行,优先级低于当前执行的任务,没有得到CPU控制权;任务得到CPU控制权后就处于运行状态;等待事件发生的任务处于等待状态,事件可以是I/O操作 完成、

 任务之间的状态转换
 
共享资源可以利用、时钟脉冲发生等;任务执行过程被中断服务例程中断,任务就处于中断状态。 实时内核通过任务控制块(TCB)管理任务。TCB数据结构中包括任务的状态、优先、指向任务栈顶的指针、以及其他与内核有关的信息。程序调用内核服务 (如调用内核函数OSTaskCreate)创建任务,为此任务在内存中分配一个TCB、进行初始化,使任务从休眠状态转变到就绪状态。任务可以在多任务 执行之前静态创建,也可以在多任务执行过程动态创建。

内核为实时多任务应用程序提供任务调度和转换、任务间通信、定时顺等服务,并作为系统调用提供给任务使用。实时内核以事件为基础、根据任务执行状态对任务 进行切换,任务的状态也随之相应改变。在实时多任务程序中,内存中存在多个任务控制块以及各个任务独立的私有堆栈。进行任务切换首先要保存CPU寄存器内 容到当前任务堆栈,将堆栈指针保存到当前任务的TCB中,然后从新任务的TCB中装载堆栈指针,并将新任务上下文装载到CPU寄存器中。这样就从一个任务 转换到另一个任务运行。任务使用这时内核提供的定时器系统调用,可以保持休眠状态一段时间,或者等待一段时间后成为就绪状态。在实时嵌入式系 统中,外部中断事件产生的任务具有高优先级,因而以抢占方式获得CPU控制权。

 

三、任务构造

1.I/O任务构造

根据3种不同的I/O事件;中断驱动事件、轮询事件、输出事件来构造I/O任务。轮询事件通常由1个任务实现,实时内核以固定周期对此任务进行调度,输出 事件常被设计为可重入程序而不是任务;中断驱动事件是一类典型的异步事件。 下面将以1个简单的串行设备驱动程序来说明I/O分解,突出I/O任务构造的重要特征。此设备分配得到1个中断向量,在3种情况下产生中断:接收到字符、 输出就绪、设备出错。因为采用抢占式内核,在I/O中断发生进入中断处理例程以后,程序要保存处理器状态,并根据不同的中断原因进行任务调度;在中断处理 完成退出中断处理例程之前,还要恢复处理器状态。 设备中断处理: IF 接收到字符THEN 将字符放入字符接收队列; 执行接收任务; IF 输出就绪 THEN IF 继续输出 THEN 送下一个字符; ELSE 保存"设备输出就绪"情况; IF 设备出错 THEN 将错误状态放入错误队列; 执行出错处理任务; 接收任务: Void Task_receive() { While (true){ Wait on input char queue; If end of input string then Process input string; Else Save input; } } 对于中断事件要合理划分事件的处理级别,尽可能多地在任务级处理,从而最小化系统中断延迟。对这个串行设备驱动中断的处理就是一个划分事件到中断级和任务 级处理的例子。中断服务例程及时响应实时中断,将实时要求相对低一些的事件(如字符出错、出错状态处理)交给不同的任务处理。队列是内核提供的一种任务间 通信结构,支持消息发送者和接收者异步访问。在这里用于驱动程序和任务之间的通信,为驱动程序进程和任务进程提供消息缓冲。设备驱动程序负责及时响应中断 事件,并不关心接收任务的状态。为了简化接收任务的结构,减小系统延迟,这里将出错处理划分为独立的任务,分配不同的优先级。

2.内部任务构造

系统内部任务可以分为:①周期性任务--实时内核基于固定周期调度的任务;②异步任务--非周期或事件驱动的任务,内核根据需要进行调度,用于处理系统内 部产生的事件;③控制对象--为状态机创建的控制任务,用于实现状态转换;④用户接口⑤--对应于用户任务,在用户驱动的系统中,用户任务是具有高优先 级。 在嵌入式实 时多任务系统中,大部分任务是非周期或事件驱动的异步任务,其函数形式如下: Void Task_aperiodic () { While (true){ Wait on an async data structure; Process input; Process output; } } 在异步任务中,驱动任务的异步数据是由实时内核提供的任务间通信数据。内核为应用程序提供信号量、消息队列、消息邮箱、插口或管道等结构,进行事件管理和 任务间通信。设计这些异步任务时采用合适的数据结构、正确定义数据能够节省宝贵的调试时间,而且任务处理的函数不能太多,过于复杂,否则会增加调试的难 度。

3.任务合并

利用任务的共同特征进行适当的任务合并,可以简化系统任务模型、减小系统复杂度、消除某些任务的切换开销从而减少系统总体开销。任务合并可分为:①根据时 间一致合并,将同一事件激活的优先级相同的函数合并在1个任务中;②根据控制一致合并,③根据函数一致合并,将几个使用相同数据的函数合并,使原来共享的 数据成为任务内的局部数据,从而减少互斥。 结束语 目前有许多厂商提供面向嵌入式应用领域的实时操作系统(RTOS),提供实时内核、输入/输出管理器、窗口系统、文件系统、网络、语言接口库、调试器和交叉平台编译器的软件包。其中实时内核为嵌入式多任务程序提供最基本和最重要的功能。本文从利用实时内核开发多任务应用程序的角度,对实时内核和任务进行介绍,提出合理构造任务的方法。可以看到,利用实时内核提供的服务,采用正确的开发方法,可以增加嵌入式实时多任务系统的功能,降低开发方法,可以增加嵌入式实时多任务系统的功能,降低开发难度。

推荐阅读:
将电灯泡压缩成一张纸片:微型LED
年末防盗:STC12C控制智能家电防盗系统电路方案
基于Xilinx SDAccel的低单位功耗数据中心设计方案

相关资讯
全球芯链共融:新质生产力驱动工业数字化转型新格局

2025年5月14日,全球半导体分销巨头大联大控股在深圳成功举办以「新质工业·引领未来」为主题的峰会,汇聚英飞凌、意法半导体、瑞芯微等16家顶尖原厂及逾500名行业精英。面对全球制造业智能化、低碳化转型浪潮,此次峰会聚焦人工智能、边缘计算、电力电子等新质生产力的技术融合,通过主论坛、分论坛及技术展区三大板块,全方位展示从芯片设计到系统集成的全产业链创新方案。中国工业增加值连续三年稳步增长(2023年4.6%、2024年5.7%、2025年一季度6.5%),印证了“新质工业时代”的全面开启。大联大中国区总裁沈维中在开幕致辞中强调,中国制造业正以技术韧性重构全球供应链,而半导体技术的全链路赋能将成为驱动产业升级的核心引擎。

体积缩小37.7%!看LM-R2S系列如何重塑工业电源格局

根据金升阳官方技术白皮书数据显示,其最新发布的LM-R2S系列机壳开关电源通过8项核心技术创新,实现了工业供电设备在功率密度、环境耐受性及能效表现的三维突破。作为LM-R2系列的迭代产品,该系列解决了传统工业电源在设备小型化与复杂工况适配性之间的矛盾,为智能制造升级提供了高可靠性的供电保障。

存储器市场回暖驱动威刚科技2025年第一季业绩显著增长

2025年第一季度,全球存储器市场迎来关键转折点。DRAM与NAND Flash现货价自2月止跌回升,带动行业库存去化加速,需求端逐步回温。威刚科技董事长陈立白指出,存储器原厂自2024年末起减产调控供给,叠加AI服务器、智能终端等新兴应用需求增长,推动市场价格走出低谷。根据TrendForce数据,尽管此前预测Q1合约价可能下跌,但实际现货市场受备货动能及库存策略影响,价格反弹超预期,成为威刚业绩增长的直接推力。

全大核架构革新旗舰体验 天玑9400e芯片深度解析

MediaTek于5月14日正式推出天玑9400e旗舰移动平台。作为天玑系列的全新力作,该芯片凭借全大核架构设计、第三代4nm制程工艺及多项创新技术,在计算性能、能效管理和AI应用领域实现突破性进展,为智能手机用户提供更卓越的游戏、影像与通信体验。

韩国半导体出口突破116亿美元:存储芯片涨价与HBM需求推高增长

根据韩国产业通商资源部5月14日发布的《2025年4月ICT进出口趋势》报告,韩国4月信息通信技术(ICT)出口额达189.2亿美元,同比增长10.8%,创下有记录以来4月份的最高值。同期贸易顺差为76.1亿美元,主要得益于半导体等高附加值产品的强劲表现。然而,对华、对美两大核心市场的出口增速显著放缓,反映出全球贸易政策不确定性的深远影响。