浅谈嵌入式系统开发中任务设计的几个要点

作为一个嵌入式开发人员,要对自己设计的嵌入式系统要了如指掌,任务的优先级信息,任务与中断的处理,任务的运行时间、逻辑、状态等都要知道,才能设计出好的系统,所以,在设计的时候需要根据需求制定框架。在设计之初就应该考虑下面几点因素:任务运行的上下文环境、任务的执行时间合理设计。下面我以嵌入式常用的实时系统FreeRT_OS为例进行分析。

FreeRTOS 中程序运行的上下文包括:
1.中断服务函数。
2. 普通任务。
3. 空闲任务。
1. 中断服务函数:
中断服务函数是一种需要特别注意的上下文环境,它运行在非任务的执行环境下(一般为芯片的一种特殊运行模式(也被称作特权模式)),在这个上下文环境中不能使用挂起当前任务的操作,不允许调用任何会阻塞运行的API 函数接口。另外需要注意的是,中断服务程序最好保持精简短小,快进快出,一般在中断服务函数中只做标记事件的发生,然后通知任务,让对应任务去执行相关处理,因为中断服务函数的优先级高于任何优先级的任务,如果中断处理时间过长,将会导致整个系统的任务无法正常运行。所以在设计的时候必须考虑中断的频率、中断的处理时间等重要因素,以便配合对应中断处理任务的工作。
2. 任务:
任务看似没有什么限制程序执行的因素,似乎所有的操作都可以执行。但是做为一个优先级明确的实时系统,如果一个任务中的程序出现了死循环操作(此处的死循环是指没有阻塞机制的任务循环体),那么比这个任务优先级低的任务都将无法执行,当然也包括了空闲任务,因为死循环的时候,任务不会主动让出CPU,低优先级的任务是不可能得到CPU 的使用权的,而高优先级的任务就可以抢占CPU。这个情况在实时操作系统中是必须注意的一点,所以在任务中不允许出现死循环。如果一个任务只有就绪态而无阻塞态,势必会影响到其他低优先级任务的执行,所以在进行任务设计时,就应该保证任务在不活跃的时候,任务可以进入阻塞态以交出CPU 使用权,这就需要我们自己明确知道什么情况下让任务进入阻塞态,保证低优先级任务可以正常运行。实际设计中,一般会将紧急的处理事件的任务优先级设置得高一些。
3. 空闲任务:
空闲任务(idle 任务)是FreeRTOS 系统中没有其他工作进行时自动进入的系统任务。因为处理器总是需要代码来执行——所以至少要有一个任务处于运行态。FreeRTOS 为了保证这一点,当调用 vTaskStartScheduler()时,调度器会自动创建一个空闲任务,空闲任务是一个非常短小的循环。用户可以通过空闲任务钩子方式,在空闲任务上钩入自己的功能函数。通常这个空闲任务钩子能够完成一些额外的特殊功能,例如系统运行状态的指示,系统省电模式等。除了空闲任务钩子,FreeRTOS 系统还把空闲任务用于一些其他的功能,比如当系统删除一个任务或一个动态任务运行结束时,在执行删除任务的时候,并不会释放任务的内存空间,只会将任务添加到结束列表中,真正的系统资源回收工作在空闲任务完成,空闲任务是唯一一个不允许出现阻塞情况的任务,因为FreeRTOS 需要保证系统永远都有一个可运行的任务。对于空闲任务钩子上挂接的空闲钩子函数,它应该满足以下的条件:
(1).永远不会挂起空闲任务;
(2).不应该陷入死循环,需要留出部分时间用于系统处理系统资源回收。
4. 任务的执行时间:
任务的执行时间一般是指两个方面,一是任务从开始到结束的时间,二是任务的周期。在系统设计的时候这两个时间候我们都需要考虑,例如,对于事件A 对应的服务任务Ta,系统要求的实时响应指标是10ms,而Ta 的最大运行时间是1ms,那么10ms 就是任务Ta 的周期了,1ms 则是任务的运行时间,简单来说任务Ta 在10ms 内完成对事件A 的响应即可。此时,系统中还存在着以50ms 为周期的另一任务Tb,它每次运行的最大时间长度是100us。在这种情况下,即使把任务Tb 的优先级抬到比Ta 更高的位置,对系统的实时性指标也没什么影响,因为即使在Ta 的运行过程中,Tb 抢占了Ta 的资源,等到Tb 执行完毕,消耗的时间也只不过是100us,还是在事件A 规定的响应时间内(10ms),Ta 能够安全完成对事件A 的响应。但是假如系统中还存在任务Tc,其运行时间为20ms,假如将Tc的优先级设置比Ta 更高,那么在Ta 运行的时候,突然间被Tc 打断,等到Tc 执行完毕,那Ta 已经错过对事件A(10ms)的响应了,这是不允许的。所以在我们设计的时候,必须考虑任务的时间,一般来说处理时间更短的任务优先级应设置更高一些。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值