FreeRTOS
FreeRTOS
Bungehurst
极限尤可突破,至臻亦不可止
展开
-
FreeRTOS 任务通知
FreeRTOS 任务通知简介FreeRTOS的任务之间都是相互独立的,这些任务间可能需要通信。任务通信有不同的方式,一般有两种:通过中间对象通信、直接通信。通过中间对象通信数据并不是直接由发送->接收,而是通过一个中间对象传递。任务间直接通信——任务通知任务通知允许任务、中断之间直接通信而不用中间对象。配置通过将configUSE_TASK_NOTIFICATIONS 设...原创 2020-04-24 20:00:13 · 1978 阅读 · 1 评论 -
FreeRTOS 事件组
FreeRTOS 事件组事件组实现了对多个任务的广播机制,可以用来做多任务的同步。事件组、标志、位一个事件标志是一个boolean类型的数,用来指示事件是否发生。这些标志组成了事件组。事件的状态由事件组中每一位表示,数据类型是EventBits_t如果某一位为1代表事件发生,0代表没发生例如:若事件组的数值为0x92,则代表:每一位的具体含义可以自己定义,事件组可以理解为一个标志...原创 2020-04-24 19:03:32 · 1026 阅读 · 0 评论 -
FreeRTOS 资源管理
FreeRTOS 资源管理简介在多任务系统中,有这么一种情况,如果某个任务开始访问资源,但是发生了任务调度,在它从运行态退出前,还没有完成对资源的访问。那么,如果这个资源被其他任务修改,就会造成数据的遗失,甚至系统崩溃。比如说有这么几种情况:访问外设如果一个外设端口的写入被打断,可能会产生错误。例如字符输出不连续等问题。读取、修改、写入这是一个Non-atomic操作,它用了不止...原创 2020-04-24 11:14:10 · 1099 阅读 · 0 评论 -
FreeRTOS 中断管理
FreeRTOS 中断管理一般来说,嵌入式系统有两种方式感知事件:轮询和中断二者相比,中断对事件的响应更加快速,但同时,由于中断是硬件层的机制,一旦发生多少会造成系统影响。而在中断服务函数中,如果有time-consuming的任务,就会影响整个系统的实时性。所以,应该尽可能减少在ISR中的操作。FreeRTOS API在ISR中的使用中断安全API The Interrupt Safe ...原创 2020-04-23 22:42:56 · 2016 阅读 · 0 评论 -
FreeRTOS 软定时器
FreeRTOS 软定时器软定时器不需要硬件支持,完全由FreeRTOS内核控制。软件定时器不会占用任何处理时间除非调用。配置使用软定时器需要进行如下配置:回调函数 Software Timer Callback Functions注意,回调函数不能包含可能造成阻塞态的任务,比如说延时函数!当调用xQueueReceive()队列接收函数时,需要将等待时间设置为0!属性和状态 A...原创 2020-04-23 16:02:44 · 1233 阅读 · 0 评论 -
FreeRTOS 队列
FreeRTOS 队列Queue 简介数据存储FreeRTOS的Queue是个FIFO先入先出的缓冲区。队列长度在队列创建时被指定。上图展示了队列的使用方法。在FreeRTOS的Queue实现中,采用的是复制而不是引用。这样的好处是:数据可以直接发送到队列中保存,而不用担心原数据会被覆盖或修改不用事先开辟缓冲区存储,直接复制到队列即可发送和接收是独立的也可以直接将指针作为元素...原创 2020-04-23 12:36:30 · 1578 阅读 · 0 评论 -
FreeRTOS 任务调度算法
FreeRTOS 任务调度算法配置在FreeRTOSConfig.h.文件中,可以通过configUSE_PREEMPTION和configUSE_TIME_SLICING配置调度算法。configUSE_TICKLESS_IDLE也会影响调度算法,它用来降低系统功耗。在FreeRTOS中,拥有相同优先级的任务会被交替执行,即Round Robin Scheduling(RR);在RR调...原创 2020-04-22 15:50:33 · 2146 阅读 · 0 评论 -
FreeRTOS 任务管理
FreeRTOS 任务管理任务函数我们可以按照以上方式定义任务函数,可以更改函数名、变量名。每一个任务都有一个进入点,任务是一个死循环,一旦启动不会自己停止。注意,任务函数是没有返回值的,而且一定不能有return。任务可以被显式删除。一个任务函数可以创建任意个的任务任务函数定义如下:API创建任务 (Creating Tasks)The xTaskCreate()...原创 2020-04-22 13:28:13 · 1292 阅读 · 0 评论 -
FreeRTOS 内存管理
FreeRTOS 内存管理(Heap Memory Management)动态内存分配(Dynamic Memory Allocation)为了使FreeRTOS简单易用, 内核对象并不是静态分配内存空间,而是动态的。FreeRTOS在每个内核对象被创建时分配空间,在对象被删除时回收空间。C语言标准库中的malloc()和free()是用来分配空间的,但是在某些情况下有些问题,比如说:在...原创 2020-04-21 16:18:50 · 1178 阅读 · 1 评论 -
FreeRTOS 数据类型和代码风格
FreeRTOS数据类型和代码风格数据类型TickType_tTickType_t作为tick count的数据类型,他可以是unsigned 16/32的值(通过configUSE_16_BIT_TICKS宏定义配置),在8/16位单片机上,16bit的类型能很大程度上提高性能,但是在32位处理器上,一般不建议使用16位。BaseType_tBaseType_t一般用于boolean返...原创 2020-04-21 13:15:20 · 1404 阅读 · 1 评论 -
FreeRTOS 基本配置
FreeRTOS 基本配置首次将FreeRTOS移植到目标系统上时,我们需要对其进行配置。FreeRTOSConfig.hFreeRTOSConfig.h文件是FreeRTOS的配置文件,我们可以通过修改宏定义的值,对其功能进行定制。下面依次说一下每个功能的作用。#ifndef FREERTOS_CONFIG_H#define FREERTOS_CONFIG_HApplication...原创 2020-04-21 10:35:47 · 1678 阅读 · 0 评论 -
FreeRTOS 简介
FreeRTOS 简介FreeRTOS 是一个嵌入式实时操作系统,什么是实时操作系统呢?对于一个嵌入式系统,比如说一个数据采集器,他需要不停地采集数据并发送给主机,例如有三个任务,一个是采集任务,一个是发送任务,一个显示任务。正常情况下,应该是先采集再显示并发送,理想中显示和发送是同时进行的。但是我们的MCU在一个时刻只能跑一个任务,也就是说必有个先后关系,我们可以认为定义顺序如下——采集-...原创 2020-04-20 21:53:51 · 13996 阅读 · 2 评论