FreeRTos
文章平均质量分 95
蚂蚁取经
学无止境
展开
-
FreeRTOS FreeRTOSConfig.h内容定义
FreeRTOS内核是高度可定制的,使用配置文件FreeRTOSConfig.h进行定制。每个FreeRTOS应用都必须包含这个头文件,用户根据实际应用来裁剪定制FreeRTOS内核。这个配置文件是针对用户程序的,而非内核,因此配置文件一般放在应用程序目录下,不要放在RTOS内核源码目录下。 在下载的FreeRTOS文件包中,每个演示例程都有一个FreeRTOSConfig.h原创 2017-01-17 14:03:59 · 2176 阅读 · 0 评论 -
列表和列表项
FreeRTOS内核调度大量使用了列表(list)和列表项(list item)数据结构。我们如果想一探FreeRTOS背后的运行机制,首先遇到的拦路虎就是列表和列表项。对于FreeRTOS内核来说,列表就是它最基础的部分。我们在这一章集中讲解列表和列表项的结构以及操作函数,在下一章讲解任务创建时,会用到本章的知识点。 列表被FreeRTOS调度器使用,用于跟踪任务,处于就绪、挂原创 2017-01-17 14:32:04 · 3197 阅读 · 0 评论 -
任务创建分析
在FreeRTOS基础系列《FreeRTOS系列第10篇---FreeRTOS任务创建和删除》中介绍了任务创建API函数xTaskCreate(),我们这里先回顾一下这个函数的声明:[objc] view plain copy print?BaseType_t xTaskCreate( TaskF原创 2017-01-17 14:36:27 · 2873 阅读 · 0 评论 -
调度器启动分析
使用FreeRTOS,一个最基本的程序架构如下所示:[objc] view plain copy print?int main(void) { 必要的初始化工作; 创建任务1; 创建任务2; ... vTaskStartScheduler(); /*启动调度器*/原创 2017-01-17 14:37:49 · 1027 阅读 · 0 评论 -
在keil4中将FreeRTOS V8.2.3移植到STM32F103RCT6 cortex-M3平台上
在keil4中将FreeRTOS V8.2.3移植到STM32F103RCT6 cortex-M3平台上移植环境STM32固件库V3.5.0FreeRTOS V8.2.3Keil 4移植步骤1、新建STM32工程先新建一个STM32 的keil 4 工程,按Library 、User、Preject 的文件夹架构设置,2、下载FreeRTOS的源码转载 2017-01-13 13:07:55 · 2562 阅读 · 0 评论 -
FreeRTOS API离线手册
下载地址http://download.csdn.net/detail/zhengyanan815/9741350如果打开chm文件出现空白问题的话,解决办法如下:解决方法 A 1. 双击此chm格式的电子书文件。2. 在“打开文件安全警告”对话框,单击以清除“打开此文件前始终询问”复选框。 3. 单击“打开”。解决方法 B 1. 右原创 2017-01-19 14:01:58 · 4094 阅读 · 0 评论 -
任务切换分析
FreeRTOS任务相关的代码大约占总代码的一半左右,这些代码都在为一件事情而努力,即找到优先级最高的就绪任务,并使之获得CPU运行权。任务切换是这一过程的直接实施者,为了更快的找到优先级最高的就绪任务,任务切换的代码通常都是精心设计的,甚至会用到汇编指令或者与硬件相关的特性,比如Cortex-M3的CLZ指令。因此任务切换的大部分代码是由硬件移植层提供的,不同的平台,实现发方法也可能不同,这篇文原创 2017-01-20 10:07:40 · 2869 阅读 · 0 评论 -
消息队列分析
FreeRTOS提供了多种任务间通讯方式,包括:任务通知(版本V8.2以及以上版本)队列二进制信号量计数信号量互斥量递归互斥量 其中,二进制信号量、计数信号量、互斥量和递归互斥量都是使用队列来实现的,因此掌握队列的运行机制,是很有必要的。 队列是FreeRTOS主要的任务间通讯方式。可以在任务与任务间、中断和任务间传送信息。发送到队列的消息是通过拷贝实现的,原创 2017-01-20 10:08:53 · 1246 阅读 · 0 评论 -
信号量分析
FreeRTOS的信号量包括二进制信号量、计数信号量、互斥信号量(以后简称互斥量)和递归互斥信号量(以后简称递归互斥量)。关于它们的区别可以参考《 FreeRTOS系列第19篇---FreeRTOS信号量》一文。 信号量API函数实际上都是宏,它使用现有的队列机制。这些宏定义在semphr.h文件中。如果使用信号量或者互斥量,需要包含semphr.h头文件。原创 2017-01-20 10:10:08 · 1786 阅读 · 0 评论 -
内存分析
内存管理对应用程序和操作系统来说都非常重要。现在很多的程序漏洞和运行崩溃都和内存分配使用错误有关。 FreeRTOS操作系统将内核与内存管理分开实现,操作系统内核仅规定了必要的内存管理函数原型,而不关心这些内存管理函数是如何实现的。这样做大有好处,可以增加系统的灵活性:不同的应用场合可以使用不同的内存分配实现,选择对自己更有利的内存管理策略。比如对于安全型的嵌入式系统,通常不允许原创 2017-01-20 10:11:58 · 423 阅读 · 0 评论 -
通知分析
在FreeRTOS版本V8.2.0中推出了全新的功能:任务通知。在大多数情况下,任务通知可以替代二进制信号量、计数信号量、事件组,可以替代长度为1的队列(可以保存一个32位整数或指针值),并且任务通知速度更快、使用的RAM更少!我在《 FreeRTOS系列第14篇---FreeRTOS任务通知》一文中介绍了任务通知如何使用以及局限性,今天我们将分析任务通知的实现源码,看一下任务通知是如何做到效原创 2017-01-20 10:13:00 · 1080 阅读 · 0 评论 -
延时分析
FreeRTOS提供了两个系统延时函数:相对延时函数vTaskDelay()和绝对延时函数vTaskDelayUntil()。相对延时是指每次延时都是从任务执行函数vTaskDelay()开始,延时指定的时间结束;绝对延时是指每隔指定的时间,执行一次调用vTaskDelayUntil()函数的任务。换句话说:任务以固定的频率执行。在《FreeRTOS系列第11篇---FreeRTOS任务控制》原创 2017-01-20 10:13:43 · 3666 阅读 · 0 评论 -
信号量
1.信号量简介 FreeRTOS的信号量包括二进制信号量、计数信号量、互斥信号量(以后简称互斥量)和递归互斥信号量(以后简称递归互斥量)。 我们可以把互斥量和递归互斥量看成特殊的信号量。互斥量和信号量在用法上不同:信号量用于同步,任务间或者任务和中断间同步;互斥量用于互锁,用于保护同时只能有一个任务访问的资源,为资源上一把锁。信号量用于同步时,一原创 2017-01-17 14:27:00 · 639 阅读 · 0 评论 -
操作队列
FreeRTOS为操作队列提供了非常丰富的API函数,包括队列的创建、删除,灵活的入队和出队方式、带中断保护的入队和出队等等。下面就来详细讲述这些API函数。1.获取队列入队信息数目1.1函数描述 UBaseType_t uxQueueMessagesWaiting( QueueHandle_t xQueue ); 返回队列中存储的信息数目。具有原创 2017-01-17 14:25:54 · 1742 阅读 · 0 评论 -
FreeRTOS队列
1.FreeRTOS队列 队列是主要的任务间通讯方式。可以在任务与任务间、中断和任务间传送信息。大多数情况下,队列用于具有线程保护的FIFO(先进先出)缓冲区:新数据放在队列的后面。当然,数据也可以放在队列的前面,在下一篇讲队列API函数时,会涉及到数据的存放位置。图1-1:读写队列 图1-1所示的队列中,最多能保存5个项目,并且假设原创 2017-01-17 14:24:42 · 802 阅读 · 0 评论 -
FreeRTOS stm移植
1. FreeRTOS下载包的文件结构 在FreeRTOS官方网站可以下载到最新版的FreeRTOS包,我这里使用的是V8.2.3版本。 下载包内的总文件数量多的令人生畏,但文件结构却很简洁。《FreeRTOS入门指南》一文的第3节详细描述了下载包文件结构,我们这里只是简单提一下。 下载包根目录下包含两个子目录:FreeRTOS和FreeRTO原创 2017-01-17 14:06:02 · 341 阅读 · 0 评论 -
FreeRTOS 中断
在阅读本文之前,有两个定义在FreeRTOSConfig.h中的宏,你必须先明白它们是什么意思,《FreeRTOS内核配置说明》一文中,讲解了这两个宏:configKERNEL_INTERRUPT_PRIORITYconfigMAX_SYSCALL_INTERRUPT_PRIORITY FreeRTOS与Cortex-M内核可谓是绝配,以至于让移植和使用原创 2017-01-17 14:07:35 · 3647 阅读 · 0 评论 -
内存管理
FreeRTOS提供了几个内存堆管理方案,有复杂的也有简单的。其中最简单的管理策略也能满足很多应用的要求,比如对安全要求高的应用,这些应用根本不允许动态内存分配的。FreeRTOS也允许你自己实现内存堆管理,甚至允许你同时使用两种内存堆管理方案。同时实现两种内存堆允许任务堆栈和其它RTOS对象放置到快速的内部RAM,应用数据放置到低速的外部RAM。每当创建任务、队列、互斥量、软件定原创 2017-01-17 14:09:05 · 433 阅读 · 0 评论 -
任务
1. 任务和协程(Co-routines) 应用程序可以使用任务也可以使用协程,或者两者混合使用,但是任务和协程使用不同的API函数,因此在任务和协程之间不能使用同一个队列或信号量传递数据。 通常情况下,协程仅用在资源非常少的微处理器中,特别是RAM非常稀缺的情况下。目前协程很少被使用到,因此对于协程FreeRTOS作者既没有把它删除也没有进一步开发。原创 2017-01-17 14:10:48 · 427 阅读 · 0 评论 -
任务创建和删除
在FreeRTOS移植到Cortex-M3硬件平台的文章中,我们已经见过任务创建API,但那篇文章的重点在于如何移植FreeRTOS,本文将重点放在任务的创建和删除API函数上面。 任务创建和删除API函数位于文件task.c中,需要包含task.h头文件。1.任务创建1.1函数描述[objc] view plain copy原创 2017-01-17 14:11:49 · 1053 阅读 · 0 评论 -
任务延时、任务挂起、解除任务挂起、任务优先级获取和设置
FreeRTOS任务控制API函数主要实现任务延时、任务挂起、解除任务挂起、任务优先级获取和设置等功能。1.相对延时1.1函数描述 void vTaskDelay( portTickTypexTicksToDelay ) 调用vTaskDelay()函数后,任务会进入阻塞状态,持续时间由vTaskDelay()函数的参数xTicksToDelay原创 2017-01-17 14:13:52 · 7650 阅读 · 0 评论 -
调试信息输出、获取任务句柄、获取任务状态、操作任务标签值
任务应用函数是一组辅助类函数,一般用于调试信息输出、获取任务句柄、获取任务状态、操作任务标签值等等。1.获取任务系统状态1.1函数描述[objc] view plain copy print?UBaseType_t uxTaskGetSystemState( TaskStatus_t * co原创 2017-01-17 14:15:21 · 7208 阅读 · 1 评论 -
内核控制 上下文切换、进入和退出临界区.....
内核控制的一些功能需要移植层提供,为了方便移植,这些API函数用宏来实现,比如上下文切换、进入和退出临界区、禁止和使能可屏蔽中断。内核控制函数还包括启动和停止调度器、挂起和恢复调度器以及用于低功耗模式的调整系统节拍函数。1.强制上下文切换宏 taskYIELD:用于强制上下文切换的宏。在中断服务程序中的等价版本为portYIELD_FROM_ISR,这也是个宏,其实现取决原创 2017-01-17 14:17:51 · 2428 阅读 · 0 评论 -
通知
每个RTOS任务都有一个32位的通知值,任务创建时,这个值被初始化为0。RTOS任务通知相当于直接向任务发送一个事件,接收到通知的任务可以解除阻塞状态,前提是这个阻塞事件是因等待通知而引起的。发送通知的同时,也可以可选的改变接收任务的通知值。 可以通过下列方法向接收任务更新通知:不覆盖接收任务的通知值覆盖接收任务的通知值设置接收任务通知值的某些位增加接收任务的通知原创 2017-01-17 14:19:09 · 409 阅读 · 0 评论 -
命令行解释器 串口
虽然这是介绍FreeRTOS系列的文章,但这篇文章偏重于命令行解释器的实现。这一方面是因为任务通知使用起来非常简单,另一方面也因为对于嵌入式程序来说,使用命令行解释器来辅助程序调试是非常有用的。程序调试是一门技术,基本上我们需要两种调试手段,一种是可以单步仿真的硬件调试器,另外一种是可以长期监视程序状态的状态输出,可以通过串口、显示屏等等手段输出异常信息或者某些关键点。这里的命令行解释器就属于后者原创 2017-01-17 14:21:15 · 4387 阅读 · 1 评论 -
调试
使用RTOS编程,为每个任务分配多大的堆栈空间就成了一项技术活:分配多了浪费系统资源,分配少了又恐怕会发生堆栈溢出。由于中断和抢占式调度器的存在,我们要估算出一个任务需要多少堆栈是非常困难的,今天我们就介绍一种方法,来获取每个任务的剩余堆栈空间。本文以NXP LPC177x_8x系列微控制器为例。 我们将这个功能做成一个命令,添加到《FreeRTOS系列第15篇---使用任务通知原创 2017-01-17 14:23:25 · 328 阅读 · 0 评论 -
系统节拍分析
操作系统的运行是由系统节拍时钟驱动的。 在FreeRTOS中,我们知道系统延时和阻塞时间都是以系统节拍时钟周期为单位。在配置文件FreeRTOSConfig.h,改变宏configCPU_CLOCK_HZ的值,可以改变系统节拍时钟的中断频率,也间接的改变了系统节拍时钟周期(T=1/f)。比如设置宏configCPU_CLOCK_HZ为100,则系统节拍时钟周期为10ms,设原创 2017-01-20 10:14:46 · 2609 阅读 · 0 评论