FreeRTOS 学习笔记 1

来源:互联网 发布:过敏肌肤精华推荐知乎 编辑:程序博客网 时间:2024/04/29 06:28

之所以要学习 FreeRTOS,不是因为它多么出众,仅仅是因为公司要做的项目使用的芯片上有它,而我是后参与进来的,之前就听到前面的人说这部分比较难,所以就来学一下,免得做项目的时候抓瞎,所以我现在也不知道他到底难不难,完全没 Feel 。

Ps:对于前人的指教还是比较信任的。。。反正总不会害我。。。

这一次也要开始使用 Keil,以前一直用的是 IAR,熟悉一下应该也没有问题。。。

本人英语不是很好,幸好 Zou Changjun 前辈翻译了中文版,感谢 Zou Changjun 前辈。。。


桌面电脑的输入处理可以归类为”软实时”。为了保证用户的最佳体验,计算机对每个输入的响应应当限定在一个恰当的时间范围——但是如果响应时间超出了限定范围,并不会让人觉得这台电脑无法使用。比如说,键盘操作必须在键按下后的某个时间内作出明显的提示。但如果按键提示超出了这个时间,会使得这个系统看起来响应太慢,而不致于说这台电脑不能使用。

硬实时功能必须在给定的时间限制之内完成——如果无法做到即意味着整个系统的绝对失败。汽车的安全气囊触发机制就是一个硬实时功能的例子。安全气囊在撞击发生后给定时间限制内必须弹出。如果响应时间超出了这个时间限制,会使得驾驶员受到伤害,而这原本是可以避免的。

大多数嵌入式系统不仅能满足硬实时要求,也能满足软实时要求。

Ps:第一次听说软实时和硬实时,以前真么接触过。。。以前连操作系统都没接触过,唯一接触过的是 CC2541 的 OSAL。。。


FreeRTOS 任务不允许以任何方式从实现函数中返回——它们绝不能有一条”return”语句,也不能执行到函数末尾。如果一个任务不再需要,可以显式地将其删除。这也在程序清单2 展现。

一个任务函数可以用来创建若干个任务——创建出的任务均是独立的执行实例,拥有属于自己的栈空间,以及属于自己的自动变量(栈变量),即任务函数本身定义的变量。

void ATaskFunction( void *pvParameters ){/* 可以像普通函数一样定义变量。用这个函数创建的每个任务实例都有一个属于自己的iVarialbleExample变量。但如果iVariableExample被定义为static,这一点则不成立 – 这种情况下只存在一个变量,所有的任务实例将会共享这个变量。 */int iVariableExample = 0;/* 任务通常实现在一个死循环中。 */for( ;; ){/* 完成任务功能的代码将放在这里。 */}/* 如果任务的具体实现会跳出上面的死循环,则此任务必须在函数运行完之前删除。传入NULL参数表示删除的是当前任务 */vTaskDelete( NULL );}
<span style="font-family: Arial, Helvetica, sans-serif;">程序清单2 典型的任务函数结构</span>

我的理解就是创建一个任务,把功能函数放到 for 循环里面,如果功能函数执行完毕,或者有其他优先级更高的任务发生,就跳出任务,,,删除当前任务还不明白



0 0
原创粉丝点击