将嵌入式系统功能分离为RTOS任务

时间:2014-04-20 05:13:31

标签: c embedded arm powerpc rtos

我正在努力掌握如何设计RTOS任务以执行嵌入式系统所需的功能。有哪些建议的资源可用于学习任务设计的具体指导原则?以下是我想回答的一些典型问题:

  • 是否应根据系统模块(闪存,USB,显示器等)或每个系统硬件/外围设备(UART,SPI,I2C等)或两者的某些组合来设计任务?两者如何,如何决定?
  • 对于串行通信,为Rx和Tx分别执行任务是否有意义?这有什么优点/缺点?

我希望将任务数量保持在最低限度,但如果简化设计或帮助避免未来的陷阱,我不介意增加任务数量。感谢您的反馈。

2 个答案:

答案 0 :(得分:3)

任务有两个目的:

  1. 功能分区
  2. 实时回复
  3. 第一个可以在任何调度算法上实现 - 而不仅仅是实时。它可用于实现高内聚力和低耦合。这些是带或不带线程的模块化编程的常见概念。

    第二个目标特定于RTOS,可能涉及单个"功能"可能在(1)中设想需要分成多个线程以满足实时截止日期。这里划分为任务不是唯一的问题,而是线程优先级的分配。

答案 1 :(得分:2)

好吧,作为一个粗略的指南,如果您不允许嵌套中断到这些外设,您可能只能使用一个线程来处理所有慢速面向字符的外设(如UART和I2C)的驱动。这节省了堆栈,允许来自中断处理程序的简单FIFO通信用于rx数据包,并允许为它们使用共享缓冲池。线程可以在信号量上等待线程安全tx队列上的缓冲区和rx缓冲区的单个共享简单FIFO队列。每当一个线程为tx排队缓冲区,或者一个中断处理程序排队了一个rx缓冲区时,它就会发信号通知信号量。