FreeRTOS高级篇
文章平均质量分 97
深入介绍FreeRTOS的实现细节、方法、技巧。
研究是为了理解
要想学会一件事,就不能什么都学。
展开
-
FreeRTOS高级篇11---空闲任务分析
当RTOS调度器开始工作后,为了保证至少有一个任务在运行,空闲任务被自动创建,占用最低优先级(0优先级)。 xReturn = xTaskCreate( prvIdleTask, "IDLE",configMINIMAL_STACK_SIZE, (void * ) NULL,...原创 2016-07-29 08:37:58 · 35098 阅读 · 19 评论 -
FreeRTOS高级篇10---系统节拍时钟分析
操作系统的运行是由系统节拍时钟驱动的。 在FreeRTOS中,我们知道系统延时和阻塞时间都是以系统节拍时钟周期为单位。在配置文件FreeRTOSConfig.h,改变宏configTICK_RATE_HZ的值,可以改变系统节拍时钟的中断频率,也间接的改变了系统节拍时钟周期(T=1/f)。比如设置宏configTICK_RATE_HZ为100,则系统节拍时钟周期为1......原创 2016-07-28 09:33:01 · 31497 阅读 · 12 评论 -
FreeRTOS高级篇9---FreeRTOS系统延时分析
FreeRTOS提供了两个系统延时函数:相对延时函数vTaskDelay()和绝对延时函数vTaskDelayUntil()。相对延时是指每次延时都是从任务执行函数vTaskDelay()开始,延时指定的时间结束;绝对延时是指每隔指定的时间,执行一次调用vTaskDelayUntil()函数的任务。换句话说:任务以固定的频率执行。在《FreeRTOS系列第11篇---FreeRTOS任务控制》一文...原创 2016-06-18 11:21:43 · 80098 阅读 · 8 评论 -
FreeRTOS高级篇8---FreeRTOS任务通知分析
在FreeRTOS版本V8.2.0中推出了全新的功能:任务通知。在大多数情况下,任务通知可以替代二进制信号量、计数信号量、事件组,可以替代数长度为1的队列(可以保存一个32位整数或指针值),并且任务通知速度更快、使用的RAM更少!我在《 FreeRTOS系列第14篇---FreeRTOS任务通知》一文中介绍了任务通知如何使用以及局限性,今天我们将分析任务通知的实现源码,看一下任务通知是如何做到效率...原创 2016-06-10 22:38:07 · 29280 阅读 · 5 评论 -
FreeRTOS高级篇7---FreeRTOS内存管理分析
内存管理对应用程序和操作系统来说都非常重要。现在很多的程序漏洞和运行崩溃都和内存分配使用错误有关。 FreeRTOS操作系统将内核与内存管理分开实现,操作系统内核仅规定了必要的内存管理函数原型,而不关心这些内存管理函数是如何实现的。这样做大有好处,可以增加系统的灵活性:不同的应用场合可以使用不同的内存分配实现,选择对自己更有利的内存管理策略。比如对于安全型的嵌入式系统,通常不允许动态...原创 2016-06-07 19:38:57 · 66289 阅读 · 14 评论 -
FreeRTOS高级篇6---FreeRTOS信号量分析
FreeRTOS的信号量包括二进制信号量、计数信号量、互斥信号量(以后简称互斥量)和递归互斥信号量(以后简称递归互斥量)。关于它们的区别可以参考《FreeRTOS系列第19篇---FreeRTOS信号量》一文。 信号量API函数实际上都是宏,它使用现有的队列机制。这些宏定义在semphr.h文件中。如果使用信号量或者互斥量,需要包含semphr.h头文件。 二进制信...原创 2016-05-30 13:42:42 · 49311 阅读 · 12 评论 -
FreeRTOS高级篇5---FreeRTOS队列分析
FreeRTOS提供了多种任务间通讯方式,包括:任务通知(版本V8.2以及以上版本)队列二进制信号量计数信号量互斥量递归互斥量 其中,二进制信号量、计数信号量、互斥量和递归互斥量都是使用队列来实现的,因此掌握队列的运行机制,是很有必要的。 队列是FreeRTOS主要的任务间通讯方式。可以在任务与任务间、中断和任务间传送信息。发送到队列的消息是通过拷贝实现的,这意味着队列存储的数...原创 2016-05-26 20:58:19 · 51460 阅读 · 7 评论 -
FreeRTOS高级篇4---FreeRTOS任务切换分析
FreeRTOS任务相关的代码大约占总代码的一半左右,这些代码都在为一件事情而努力,即找到优先级最高的就绪任务,并使之获得CPU运行权。任务切换是这一过程的直接实施者,为了更快的找到优先级最高的就绪任务,任务切换的代码通常都是精心设计的,甚至会用到汇编指令或者与硬件相关的特性,比如Cortex-M3的CLZ指令。因此任务切换的大部分代码是由硬件移植层提供的,不同的平台,实现发方法......原创 2016-05-15 19:31:41 · 64872 阅读 · 25 评论 -
FreeRTOS高级篇3---FreeRTOS调度器启动过程分析
使用FreeRTOS,一个最基本的程序架构如下所示:int main(void){ 必要的初始化工作; 创建任务1; 创建任务2; ... vTaskStartScheduler(); /*启动调度器*/ while(1); } 任务创建完成后,静态变量指针pxCurrentTCB(见《FreeRTOS高级篇2---FreeRT...原创 2016-05-06 14:57:32 · 39388 阅读 · 11 评论 -
FreeRTOS高级篇2---FreeRTOS任务创建分析
在FreeRTOS基础系列《FreeRTOS系列第10篇---FreeRTOS任务创建和删除》中介绍了任务创建API函数xTaskCreate(),我们这里先回顾一下这个函数的声明: BaseType_t xTaskCreate( TaskFunction_tp vTaskCode,...原创 2016-05-03 13:31:08 · 41841 阅读 · 14 评论 -
FreeRTOS高级篇1---FreeRTOS列表和列表项
FreeRTOS内核调度大量使用了列表(list)这一数据结构。我们如果想一探FreeRTOS背后的运行机制,首先遇到的拦路虎就是列表。对于FreeRTOS内核来说,列表就是它最基础的部分。我们在这一章集中讲解列表和列表项的结构以及操作函数,在下一章讲解任务创建时,会用到本章的知识点。 列表被FreeRTOS调度器使用,用于跟踪任务,处于就绪、挂起、延时的任务,都会被挂接到各自的列表中。...原创 2016-04-19 14:34:13 · 41737 阅读 · 28 评论