利用Protothread实现实时多任务系统
嵌入式程序框架一般类似于程序1所示结构:系统中有3个任务——TaskA、TaskB、TaskC,均放置于主循环内,在每一个循环周期内都被执行一次。在这种结构中,能满足系统实时性要求的条件是: (当且仅当)TaskA 、TaskB、TaskC三个任务的运行时间之和要小于系统实时响应的时间要求。在系统较为简单、任务运行时间能满足实时要求的情况下,可以采用这种最简单、最直接的顺序执行方式。但是更多的情形是,系统不仅要对一些事件做出实时响应,并且还要承担很多其他的非实时任务,并且这些非实时任务的运行时间要远远超出了实时响应时间的要求。传统的这种程序结构显然不能满足系统的实时性要求。通常的解决方案是,引入实时操作系统,由操作系统进行任务的调度,优先执行实时任务,达到满足系统实时性的要求。
程序1嵌入式程序框架
一般来说,在嵌入式系统开发中引入实时操作系统有诸多优点:
更好地支持多任务,实时性要求能够得以保障;
程序开发更加容易,也更便于维护;
有利于提高系统的稳定性和可靠性。但是,操作系统的引入也将带来较多的系统开销:
实时操作系统往往使用定时器中断来切换任务,需要消耗不少的CPU处理时间;
实时操作系统在切换任务时需要保护当前任务的执行现场,这就需要为每个任务准备足够多的RAM空间来实现任务切换;
实时操作系统的本身也需要占用相当数量的Flash空间和RAM空间。
如果这些系统开销都在可承受的范围内,那么采用实时操作系统将是最佳的选择。但是在很多应用的场合,特别是系统的资源非常紧张的单片机应用,实时操作系统带来的系统开销往往是不可接受的。而更换速度更快、RAM更大、Flash更多的CPU意味着成本的增加,且会降低产品的竞争力。当系统中的任务不须进行非常复杂的优先级调度,而且其任务也相对简单时,引入实时操作系统似有杀鸡用牛刀之嫌。
1 Protothread的特点
Protothread是专为资源有限的系统设计的一种耗费资源特别少并且不使用堆栈的线程模型,其特点是:
以纯C语言实现,无硬件依赖性;
极少的资源需求,每个Protothread仅需要2个额外的字节;
可以用于有操作系统或无操作系统的场合;
支持阻塞操作且没有栈的切换。
使用Protothread实现多任务的最主要的好处在于它的轻量级。每个Protothread不需要拥有自已的堆栈,所有的Protothread共享同一个堆栈空间,这一点对于RAM资源有限的系统尤为有利。相对于操作系统下的多任务而言,每个任务都有自已的堆栈空间,这将消耗大量的RAM资源,而每个Protothread仅使用一个整型值保存当前状态。
相关文章
- 2022-12-18基于人机工程学的网球轮椅设计
- 2023-09-01工控机管理的数字式多通道超声波探伤系统
- 2023-12-21用滑移线法解正挤压实心件的准确方法
- 2023-06-12A.C.Cleland公式在氨制冷循环最佳中间温度求解中的应用
- 2024-03-02混合动力车用电池均衡方案研究
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。