当前位置:首页 > 模拟 > 模拟
[导读]Protothrcads是一种无需堆栈的极轻量级线程。本文旨在讨论Protothrcads在时间触发模式系统中所能发挥的优势。以一个具体例子为依据,详细介绍了如何使用经过改进之后的Protothrcads构建一个多任务调度器,并使之顺利应用于时间触发模式的系统中。

1 概 述
   
嵌入式行业的飞速发展使得嵌入式芯片的容量和功能都在不断地提升。以工业应用最为常见的8位微控制器为例,其ROM和RAM的容量都在不断扩大,甚至一些高端的8位处理器可以使用简单的操作系统(OS)来进行开发。同时,32位处理器的广泛普及也使得其价格逐渐逼近8位处理器。所以对很多应用来说,开发的简化和迅速成为最主要的目标。尤其是当使用一款新的处理器或者硬件电路时,快速的搭建其开发的框架变得尤其重要。在嵌入式系统中,通常会采用两种不同的任务管理和调度方式:事件触发和时间触发。事件触发方式以事件的发生为核心,往往会采用多级中断的方法来实现,其发生的时间具有随机性。所以事件触发方式具有较好的实时性,但是这样也意味着该系统具有较高的复杂度。而且,事件触发方式的开销往往是很大的。Alexander Metzner的研究指出:一个包含27个任务、采用RM(Rate Mono—tonic)调度算法的事件触发系统,CPU的实际利用率仅为18%。
    而时间触发方式开发的系统,保证了在同一时刻只处理一个事件,虽然牺牲了并发处理的实时性,但是保证了系统的可靠性,并且使得程序员能很好地预测程序的流程。Kopetz就指出:使用基于时间触发的合作式调度器会使得系统有非常好的可预测性。在本项目中,嵌入式系统的功能主要集中在控制一些具有一定时隙间隔的外围设备上面。键盘的扫描、显示的刷新、数据缓冲的存储等都是需要定期完成的任务,而这些任务的实时要求也并不高,所以选用时间触发方式的合作式调度器成为系统设计的首选。
    Protothrcads利用隐式的return提供了阻塞的功能,经过Protothrcads封装的任务,其程序的逻辑更加接近处理事件的上层逻辑,大大简化了编程。而且使用简单的宏就可以实现Protothrcads,其开销也是很小的。本文就对使用Protothrcads应用于时间触发模式的合作式调度器做一些讨论。

2 Protothreads简介
    Protothrcads是由瑞典计算机科学研究所的科学家Adam Dunkels所创的一种新的线程编程方法。按AdamDunkels所说,Protothreads是专为资源紧张的系统设计的一种耗费资源少,且不使用堆栈的线程模型,它可以不使用复杂的状态机机制来实现顺序流的控制。Proto—thrcads也可以用于操作系统当中。
    简单地说,Protothrcads借鉴了用c语言实现协同(co—routine)的原理,它应用switch—case语句的直接跳转功能,实现了有条件阻塞(conditional block),最终实现了虚拟的并行处理功能(concurrent)。实际上,Protothrcads并不是真正的线程,在多任务的切换中并不会真正涉及上下文的切换,其线程的调度也仅仅是依靠隐式的return,进而退出函数体来完成的。但是Protothreads的优点却是实实在在的。首先它不需要堆栈空间,而正如笔者用宏实现的那样,Protothrcads也实现了很多只有线程编程方法才能实现的机制,比如阻塞。而用宏进行了封装之后,使用者完全可以像使用线程一样使用它们,而且其逻辑更加简化,这大大增加了程序的清晰度,并降低了开发维护的难度。
    在对实时性要求比较高或者说要求并行处理的场合,往往需要在任务A执行到一定程度、等待事件C发生时,退出当前任务A并转而执行任务B;当事件C发生之后,系统继续回到任务A,继续方才的执行。所以必须将任务A上次执行到地方的环境存储起来,以便重回任务A后可以接着打断的地方继续运行。线程的上下文切换可以达到这个目的,Simon Tatham用C语言实现的co—routine也可以。Protothreads正是借鉴了这一原理,如以下任务函数所示:

    可以看出,在进行了宏扩展之后,下面的程序段和上面的程序段是完全相同的,但是宏封装很好地构建了一个上层的逻辑体系。这正是Protothreads的核心所在。同时,这也决定了Protothreads具有一定的局限:
    ①Protothreads中使用的必须是静态变量或者全局变量;
    ②避免与switch语句的合用(Protothreads的实现已经用了switch语句);
    ③因为编译器会将__LINE__解释为当前所在的行号,所以不能将多个“返回”置于同一行。

3 调度器设计
   
时间触发方式的嵌入式系统是根据定时器产生的恒定间隔的中断来触发和管理任务的。系统依靠一个基准的时间中断,以此中断为任务处理的节奏和“节拍”,任务的调度发生在“节拍”规定的时刻。中断服务子程序也同样占用这个时间间隔,为了系统的稳定性,一方面要使中断服务子程序尽可能短,以节省任务的执行时间;另一方面,执行的任务也应该尽可能短,一些比较耗时的任务可以细分为若干个子任务加以调度。同时,这也要求调度器的设计尽可能简单。本文的设计思想就是对于系统仅仅定义一个任务控制块(TCB)队列,每个任务对应于队列中的一个节点,由中断服务子程序更改TCB队列中的记录,调度函数根据此TCB来进行调度。可以略微修改Proto—threads中的结构体pt,以满足作为TCB队列节点的需要。当然,此结构也需要声明为全局变量或者静态变量。其数据结构如下所示:


    按照Protothreads的定义,lc_t类型就是unsignedshort类型。每个任务分配一个pt结构。将pt结构修改以后,还必须对Protothreads提供的一些功能函数做一些修改。比如,可以将PT_INIT(&pt)更改为PT_INIT(&pt,10,0),表示该任务10 ms执行一次,且ready的初始值为O。队列的实现使用指针数组。
    在时间触发模式的系统中,定时器中断作为系统一个固定的时间片,在具体实现中可以设置成CTC模式。这个时间片的选择必须依据具体的应用,设置得过大会对系统调度的时效性造成比较大的影响,过小又会给调度器造成明显的负担,而且压缩任务的执行时间会使程序流程的可预测性受到影响。因为本文所涉及任务的周期大多是若干ms,所以可以将定时器中断设置为1 ms。ISR的执行流程大致如下:每一次定时中断,将任务的count值减1,直到count为O时表明该任务的间隔时间已到可以执行了,并且将初值重新赋给count,以重新开始下轮计数。具体程序如下:


    调度函数快速轮询各个任务的TCB。因为定时器中断会定期更新任务的TCB信息,所以调度函数就可以根据TCB中ready的值来判断是否需要执行某任务。执行任务过后清零该ready值。


    如果任务task_XXX在执行过程中发生中断,ready值没有被清零,待中断返回后会继续执行之前的任务,但是这样会使得下一时隙任务的执行延迟,造成系统的安全隐患,所以应当尽量避免长任务的出现。而如果在任务执行中出现条件阻塞(如PT_WAIT_UNTIL),则正好可以发挥Protothreads提供的并行处理能力,并且在处理类似键盘扫描的状态机任务时具有很好的逻辑性和清晰度。当然,这样做的前提是:这里的任务的实时性要求不高,允许出现一定的时延。
    整个main()函数定义3个任务task_A、task_B和task_C,并且分别给每个任务分配一个结构体pt_A、pt_B和pt_C。3个任务的执行周期分别是10 ms、15 ms和2ms。调度函数处于一个大循环中。具体实现如下所示:


4 总结和展望
    Protothreads为嵌入式系统提供了很好的并行处理能力,而且非常易于操作;在时间触发模式的系统中,Pro—tothreads依然能够发挥其巨大的作用。在本文中笔者的设计很好地达到了实际的要求,最大程度上简化了设计和维护。当然,应用Protothreads更加巧妙的设计方法和理念还需要不断地实践和总结。

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

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭