利用Protothread实现实时多任务系统

利用Protothread实现实时多任务系统

ID:40619658

大小:47.50 KB

页数:7页

时间:2019-08-05

利用Protothread实现实时多任务系统_第1页
利用Protothread实现实时多任务系统_第2页
利用Protothread实现实时多任务系统_第3页
利用Protothread实现实时多任务系统_第4页
利用Protothread实现实时多任务系统_第5页
资源描述:

《利用Protothread实现实时多任务系统》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、在许多系统资源非常紧张的单片机应用中,使用实时操作系统进行任务调度来实现实时多任务系统时,由操作系统带来的系统开销往往是不可接受的。通过升级硬件来改善系统资源紧张,意味着成本的增加,降低产品的竞争力。本文介绍采用Protothread在非常小的系统开销下实现实时多任务系统的方法。关键词Protothread实时多任务线程模型  嵌入式程序框架一般类似于程序1所示结构:系统中有3个任务——TaskA、TaskB、TaskC,均放置于主循环内,在每一个循环周期内都被执行一次。在这种结构中,能满足系统实时性要求的条件是:(当且仅当)TaskA、TaskB、TaskC三个任

2、务的运行时间之和要小于系统实时响应的时间要求。在系统较为简单、任务运行时间能满足实时要求的情况下,可以采用这种最简单、最直接的顺序执行方式。但是更多的情形是,系统不仅要对一些事件做出实时响应,并且还要承担很多其他的非实时任务,并且这些非实时任务的运行时间要远远超出了实时响应时间的要求。传统的这种程序结构显然不能满足系统的实时性要求。通常的解决方案是,引入实时操作系统,由操作系统进行任务的调度,优先执行实时任务,达到满足系统实时性的要求。  程序1嵌入式程序框架  voidmain(void){    Init();    while(1){      TaskA()

3、;      TaskB();      TaskC();    }  }  voidInterrupt_1(void)interrupt1{    …  }  voidInterrupt_2(void)interrupt2{    …  }  一般来说,在嵌入式系统开发中引入实时操作系统有诸多优点:  ◆更好地支持多任务,实时性要求能够得以保障;  ◆程序开发更加容易,也更便于维护;  ◆有利于提高系统的稳定性和可靠性。但是,操作系统的引入也将带来较多的系统开销:  ◆实时操作系统往往使用定时器中断来切换任务,需要消耗不少的CPU处理时间;  ◆实时操作系统在切换

4、任务时需要保护当前任务的执行现场,这就需要为每个任务准备足够多的RAM空间来实现任务切换;  ◆实时操作系统的本身也需要占用相当数量的Flash空间和RAM空间。  如果这些系统开销都在可承受的范围内,那么采用实时操作系统将是最佳的选择。但是在很多应用的场合,特别是系统的资源非常紧张的单片机应用,实时操作系统带来的系统开销往往是不可接受的。而更换速度更快、RAM更大、Flash更多的CPU意味着成本的增加,且会降低产品的竞争力。当系统中的任务不须进行非常复杂的优先级调度,而且其任务也相对简单时,引入实时操作系统似有杀鸡用牛刀之嫌。1Protothread的特点  P

5、rotothread是专为资源有限的系统设计的一种耗费资源特别少并且不使用堆栈的线程模型,其特点是:  ◆以纯C语言实现,无硬件依赖性;  ◆极少的资源需求,每个Protothread仅需要2个额外的字节;  ◆可以用于有操作系统或无操作系统的场合;  ◆支持阻塞操作且没有栈的切换。  使用Protothread实现多任务的最主要的好处在于它的轻量级。每个Protothread不需要拥有自已的堆栈,所有的Protothread共享同一个堆栈空间,这一点对于RAM资源有限的系统尤为有利。相对于操作系统下的多任务而言,每个任务都有自已的堆栈空间,这将消耗大量的RAM资源

6、,而每个Protothread仅使用一个整型值保存当前状态。2Protothread的阻塞运行机制  以下是一个典型的Protothread程序示例:  程序2Protothread程序示例  PT_THREAD(radio_wake_thread(structpt*pt)){    PT_BEGIN(pt);    while(1){      radio_on();      timer_set(&timer,T_AWAKE);      PT_WAIT_UNTIL(pt,timer_expired(&timer));      timer_set(&timer

7、,T_SLEEP);      if(!communication_complete()){        PT_WAIT_UNTIL(pt,communication_complete()‖timer_expired(&timer));      }      if(!timer_expired(&timer)){        radio_off();        PT_WAIT_UNTIL(pt,timer_expired(&timer));      }    }    PT_END(pt);  }  这是一个非常简单的无线通信的状态切换程序①,展开P

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。