FreeRTOS
FreeRTOS的概述
肥嘟嘟的左卫门
这个作者很懒,什么都没留下…
展开
-
(十六)FreeRTOS队列
本文介绍队列的基本知识,详细源码分析见《FreeRTOS高级篇5---FreeRTOS队列分析》1.FreeRTOS队列 队列是主要的任务间通讯方式。可以在任务与任务间、中断和任务间传送信息。大多数情况下,队列用于具有线程保护的FIFO(先进先出)缓冲区:新数据放在队列的后面。当然,数据也可以放在队列的前面,在下一篇讲队列API函数时,会涉及到数据的存放位置。图1-1:读写队列 图1-1所示的队列中,最多能保存5个项目,并且假设队列永远不会满。任务A使用API函...转载 2020-12-03 11:34:49 · 627 阅读 · 0 评论 -
(十五)使用任务通知实现命令行解释器
虽然这是介绍FreeRTOS系列的文章,但这篇文章偏重于命令行解释器的实现。这一方面是因为任务通知使用起来非常简单,另一方面也因为对于嵌入式程序来说,使用命令行解释器来辅助程序调试是非常有用的。程序调试是一门技术,基本上我们需要两种调试手段,一种是可以单步仿真的硬件调试器,另外一种是可以长期监视程序状态的状态输出,可以通过串口、显示屏等等手段输出异常信息或者某些关键点。这里的命令行解释器就属于后者。 本文实现的命令行解释器具有以下特性:支持十进制参数,识别负号; 支持十六进制参数,十...转载 2020-12-03 11:19:42 · 253 阅读 · 0 评论 -
(十四)FreeRTOS任务通知
注:本文介绍任务通知的基础知识,详细源码分析见《FreeRTOS高级篇8---FreeRTOS任务通知分析》 每个RTOS任务都有一个32位的通知值,任务创建时,这个值被初始化为0。RTOS任务通知相当于直接向任务发送一个事件,接收到通知的任务可以解除阻塞状态,前提是这个阻塞事件是因等待通知而引起的。发送通知的同时,也可以可选的改变接收任务的通知值。 可以通过下列方法向接收任务更新通知:不覆盖接收任务的通知值 覆盖接收任务的通知值 设置接收任务通知值的某些位 增加...转载 2020-12-03 11:13:40 · 274 阅读 · 0 评论 -
(十三)FreeRTOS内核控制
内核控制的一些功能需要移植层提供,为了方便移植,这些API函数用宏来实现,比如上下文切换、进入和退出临界区、禁止和使能可屏蔽中断。内核控制函数还包括启动和停止调度器、挂起和恢复调度器以及用于低功耗模式的调整系统节拍函数。1.强制上下文切换宏 taskYIELD:用于强制上下文切换的宏。在中断服务程序中的等价版本为portYIELD_FROM_ISR,这也是个宏,其实现取决于移植层。 用于上下文切换的实际代码由移植层提供。对于Cortex-M3硬件,这个宏会引起PendSV中...转载 2020-12-02 11:31:17 · 281 阅读 · 0 评论 -
(十二)FreeRTOS任务应用函数
任务应用函数是一组辅助类函数,一般用于调试信息输出、获取任务句柄、获取任务状态、操作任务标签值等等。1.获取任务系统状态1.1函数描述 UBaseType_t uxTaskGetSystemState( TaskStatus_t * constpxTaskStatusArray, const UBaseType_tuxArraySize, un...转载 2020-12-02 11:08:39 · 669 阅读 · 0 评论 -
(十一)FreeRTOS任务控制
FreeRTOS任务控制API函数主要实现任务延时、任务挂起、解除任务挂起、任务优先级获取和设置等功能。1.相对延时1.1函数描述 void vTaskDelay( portTickTypexTicksToDelay ) 调用vTaskDelay()函数后,任务会进入阻塞状态,持续时间由vTaskDelay()函数的参数xTicksToDelay指定,单位是系统节拍时钟周期。常量portTICK_RATE_MS 用来辅助计算真实时间,此值是系统节拍时钟中断的周期,单位是...转载 2020-12-02 10:30:27 · 300 阅读 · 0 评论 -
(十)FreeRTOS任务创建和删除
在FreeRTOS移植到Cortex-M3硬件平台的文章中,我们已经见过任务创建API,但那篇文章的重点在于如何移植FreeRTOS,本文将重点放在任务的创建和删除API函数上面。 任务创建和删除API函数位于文件task.c中,需要包含task.h头文件。1.任务创建1.1函数描述 BaseType_t xTaskCreate( TaskFunction_t pvTaskCode, const char * const pcName, unsign...转载 2020-11-30 15:11:46 · 365 阅读 · 0 评论 -
(九)FreeRTOS任务概述
1. 任务和协程(Co-routines) 应用程序可以使用任务也可以使用协程,或者两者混合使用,但是任务和协程使用不同的API函数,因此在任务和协程之间不能使用同一个队列或信号量传递数据。 通常情况下,协程仅用在资源非常少的微处理器中,特别是RAM非常稀缺的情况下。目前协程很少被使用到,因此对于协程FreeRTOS作者既没有把它删除也没有进一步开发。 所以本系列文章以后不会对协程过多描述,包括其API函数。1.1任务的特性 简而言之:使用RTOS...转载 2020-11-30 15:02:52 · 290 阅读 · 0 评论 -
(八)FreeRTOS内存管理
本文介绍内存管理的基础知识,详细源码分析见《FreeRTOS高级篇7---FreeRTOS内存管理分析》FreeRTOS提供了几个内存堆管理方案,有复杂的也有简单的。其中最简单的管理策略也能满足很多应用的要求,比如对安全要求高的应用,这些应用根本不允许动态内存分配的。FreeRTOS也允许你自己实现内存堆管理,甚至允许你同时使用两种内存堆管理方案。同时实现两种内存堆允许任务堆栈和其它RTOS对象放置到快速的内部RAM,应用数据放置到低速的外部RAM。每当创建任务、队列、互斥量、软件定时器、信号.转载 2020-11-30 15:01:29 · 276 阅读 · 0 评论 -
(七)Cortex-M内核使用FreeRTOS特别注意事项
在阅读本文之前,有两个定义在FreeRTOSConfig.h中的宏,你必须先明白它们是什么意思,《FreeRTOS内核配置说明》一文中,讲解了这两个宏:configKERNEL_INTERRUPT_PRIORITY configMAX_SYSCALL_INTERRUPT_PRIORITY FreeRTOS与Cortex-M内核可谓是绝配,以至于让移植和使用FreeRTOS都变得更简单起来。根据FreeRTOS官方反馈,在Cortex-M内核上使用FreeRTOS大多数的问题点...转载 2020-11-30 14:58:51 · 309 阅读 · 0 评论 -
(六)FreeRTOS内核配置说明
FreeRTOS内核是高度可定制的,使用配置文件FreeRTOSConfig.h进行定制。每个FreeRTOS应用都必须包含这个头文件,用户根据实际应用来裁剪定制FreeRTOS内核。这个配置文件是针对用户程序的,而非内核,因此配置文件一般放在应用程序目录下,不要放在RTOS内核源码目录下。 在下载的FreeRTOS文件包中,每个演示例程都有一个FreeRTOSConfig.h文件。有些例程的配置文件是比较旧的版本,可能不会包含所有有效选项。如果没有在配置文件中指定某个选项,那么RTOS内核...转载 2020-11-26 17:24:23 · 567 阅读 · 0 评论 -
(五)FreeRTOS在Cortex-M3上的移植
1. FreeRTOS下载包的文件结构 在FreeRTOS官方网站可以下载到最新版的FreeRTOS包,我这里使用的是V8.2.3版本。 下载包内的总文件数量多的令人生畏,但文件结构却很简洁。《FreeRTOS入门指南》一文的第3节详细描述了下载包文件结构,我们这里只是简单提一下。 下载包根目录下包含两个子目录:FreeRTOS和FreeRTOS-Plus。其中,FreeRTOS-Plus文件夹中包含一些FreeRTOS+组件和演示例程(组件大都收费),我们不对这个...转载 2020-11-26 17:21:26 · 476 阅读 · 0 评论 -
(四)FreeRTOS编码标准及风格指南
1.编码标准 FreeRTOS的核心源代码遵从MISRA编码标准指南。这个标准篇幅稍长,你可以在MISRA官方网站花少量钱买到,这里不再复制任何标准。 FreeRTOS源代码不符合MISRA标准的项目如下所示:有两个API函数有多个返回点。MISRA编码标准强制规定:一个函数在其结尾应该有单一的返回点。 指针算数运算,在创建任务时,为了兼容8、16、20、24、32位总线,不可避免的使用了指针算数运算。MISRA编码标准强制规定:指针的算术运算只能用在指向数组或数组元...转载 2020-11-26 17:17:13 · 496 阅读 · 0 评论 -
(三)FreeRTOS移植指南
FreeRTOS下载包中已经包含很多演示例程- 每一个例程都是针对于:特定的微控制器; 特定的开发工具(编译器、调试器等等); 特定的硬件平台(样机或评估板)。 可以在官方网站首页左侧的树形菜单 'Supported Devices' 中找到这些例程介绍。 可惜的是不可能为所有微控制器、编译器和评估板提供演示例程。因此,官方提供的演示例程可能不完全符合你正在使用的开发平台。本章描述如何通过修改或合并官方提供的演示例程,来满足自己的开发平台需求(包括微处理器和编译器)。...转载 2020-11-25 16:28:15 · 1133 阅读 · 0 评论 -
(二)FreeRTOS入门指南
FreeRTOS可以被移植到很多不同架构的处理器和编译器。每一个RTOS移植都附带一个已经配置好的演示例程,可以方便快速启动开发。更好的是,每个演示例程都附带一个说明网页,提供如何定位RTOS演示工程源代码、如何编译演示例程、如何配置硬件平台的全部信息。 演示例程说明网页还提供基本的RTOS移植细节信息,包括如何编写FreeRTOS兼容的中断服务例程,不同架构的中断处理会稍有不同。 通过下面的简单说明,可以在几分钟内运行RTOS。1.查找相关文档页 FreeR...转载 2020-11-25 16:23:59 · 719 阅读 · 0 评论 -
(一)为什么选择FreeRTOS?
1.为什么学习RTOS? 作为基于ARM7、Cortex-M3硬件开发的嵌入式工程师,我一直反对使用RTOS。不仅因为不恰当的使用RTOS会给项目带来额外的稳定性风险,更重要的是我认为绝大多数基于ARM7、Cortex-M3硬件的项目,还没复杂到使用RTOS的地步,使用状态机就足够了。 对于现代的微处理器,特别是资源相对丰富ARM7、Cortex-M3硬件来说,RTOS占用的硬件资源已经越来越可以忽略。所以在当今环境下,我们无需担心RTOS会拖累性能。相反,RTOS提...转载 2020-11-25 16:21:43 · 751 阅读 · 0 评论 -
实时操作系统和非实时操作系统的区别
实时操作系统:uCOS/VxWorks/RTLinux非实时操作系统:Linux/Windows/OSX他们之间的区别,详见下图:在上面的图中右边的任务优先级高于左边的任务,先看实时操作系统的,当优先级更高的任务2就绪的时候,即便任务1正在运行中,也必须立刻交出CPU的使用权,就跟中断一样,先执行任务2,等任务2执行完或者主动挂起(sleep)让出CPU的时候,任务1才能接着运行。uCOS就是这样的实时操作系统,它是可抢占性的内核。我曾跟很多同事争辩过uCOS高优先级任务就绪而.转载 2020-08-11 16:35:58 · 1699 阅读 · 0 评论