![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
FreeRTOS
龙井茶110
嵌入式刚入门的一个小白, 请各位多多包涵
展开
-
FreeRTOS CPU使用率统计
想要使用CPU 利用率统计的话, 需要在FreeRTOSConfig.h 配置于系统运行时间和任务状态收集有关的配置选项.并且实现portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() 和 portGET_RUN_TIME_COUNTER_VALUE() 这两个宏定义.调用 vTaskGetRunTimeStats() 和 vTaskList() 函数获得任务的相关信息与CPU使用率的相关信息....原创 2021-04-14 22:44:03 · 502 阅读 · 0 评论 -
FreeRTOS 中断管理
中断, 中断属于异步异常. 外部发生某一事件, 请求CPU迅速处理, CPU 暂时暂停当前的工作.转入处理所发生的的事件.FreeRTOS 许多处于临界段的地方. 临界段虽然保护了关键代码的执行不被打断, 但也会影响系统的实时,FreeRTOS的中断管理支持: 开/关中断。 恢复中断。 中断使能。 中断屏蔽。 可选择系统管理的中断优先级。当中断产生时,首先 会保存当前处理机状态信息然后 载入异常或中断处理函数到pc寄存器接着 把控制权转交给处理函原创 2021-04-14 22:25:29 · 278 阅读 · 0 评论 -
FreeRTOS 内存管理
FreeRTOS 规定的内存管理函数接口1 void *pvPortMalloc( size_t xSize ); //内存申请函数2 void vPortFree( void *pv ); //内存释放函数3 void vPortInitialiseBlocks( void ); //初始化内存堆函数4 size_t xPortGetFreeHeapSize( void ); //获取当前未分配的内存堆大小5 size_t xPortGetMinimumEverFreeHeapSize( voi原创 2021-04-14 21:34:20 · 182 阅读 · 0 评论 -
FreeRTOS 任务通知
任务通知的优势:使用任务通知比通过信号量等ICP通信方式解除阻塞的任务要快45%, 并且更加省RAM内存空间.任务通知的缺点:只能由一个任务接收通知消息, 因为必须制定接收通知的任务只有等待通知的任务可以被阻塞, 发送通知的任务, 在任何情况下不会因为发送失败而进入阻塞态.通知任务的几种方式1,发送通知给任务,如果有通知未读,不覆盖通知值。2,发送通知给任务,直接覆盖通知值。3, 发送通知给任务,设置通知值的一个或者多个位,可以当做事件组来使用。4,发送通知给任务,递增通知值,可以当做计数原创 2021-04-14 07:42:26 · 271 阅读 · 0 评论 -
FreeRTOS 软件定时器
系统节拍配置宏 configTICK_RATE_HZ, 即1S能跳动多少下,软件定时器的运作机制.FreeRTOS 采用两个定时器列表维护软件定时器, pxCurrentTimerList 与 pxOverflowTimerList是列表指针, 在初始化的时候分别指向 xActiveTimerList1 与 xActiveTimerList2pxCurrentTimerList: 系统将新创建的定时器以超时时间升序的方式插到 此链表中, 系统在定时任务中扫描 此链表的第一个定时器查看是否已经超时,原创 2021-04-13 07:47:39 · 409 阅读 · 0 评论 -
FreeRTOS事件
事件是一种实现任务间通信的机制, 主要用于实现多任务间的同步, 但事件通信只能是事件类型的通信, 无数据传输,事件组 存储在 EventBits_t 类型的变量中, uxEventBits 类型由configUSE_16_BIT_TICKS 这个宏决定, 如果该宏为1, 则EventBits_t 是16位的, 其中有8个位用来存事件组, 如果该宏为0, 则 EventBits_t 就是32位的, 其中24个位用来存储事件组,...原创 2021-04-11 22:05:44 · 927 阅读 · 0 评论 -
FreeRTOS 互斥量
互斥量, 是一种特殊的二值信号量, 它和信号量不同的是, 它支持互斥量所有权, 递归访问以及防止优先级翻转的特性, 用于实现临界资源的独占处理.两种状态,: 开锁和闭锁互斥量虽然也可以用于任务与任务之间的同步, 或者任务与中断之间的同步, 但是互斥量更多的是用于保护资源的互锁.互斥量具有优先级集成机制.互斥量应用场景1, 可能会引起优先级翻转的情况2, 任务可能多次获取互斥量的情况下, 这样可以避免同一任务多次递归持有而造成死锁的问题,注意: 互斥量不能再中断服务函数中使用, 因为其特有的优先原创 2021-04-11 21:40:38 · 270 阅读 · 0 评论 -
FreeRTOS 信号量
信号量基本概念信号量(Semaphore) 是一种实现任务间通信的机制, 可以实现任务之间或临界资源的互斥访问,常用于协助一组相互竞争的任务来访问临界资源.信号量数值,含义0: 表示没有积累下的释放信号量操作, 且有可能在此信号量阻塞的任务.正值, 表示有一个或多个释放信号量操作....原创 2021-04-11 09:48:30 · 155 阅读 · 0 评论 -
FreeRTOS 消息队列
队列又称消息队列, 是一种常用于任务间通信的数据结构, 队列可以在任务与任务之间, 中断和任务间传递消息.当任务从消息队列中读取消息的时候, 队列如果是空的, 那么当前任务会被阻塞, 用户还可以指定阻塞的时间xTicksToWait.超过这个时间, 任务也会从阻塞态转化为就绪态, .消息队列是一种异步通信方式....原创 2021-04-07 07:40:11 · 753 阅读 · 0 评论 -
FreeRTOS任务管理
任务挂起函数:vTaskSuspend() // 想要使用该函数 必须将INCLUDE_vTaskSuspend 定义为1vTaskSuspendAll() 将所有任务都挂起调用了多少次vTaskSuspendAll() 就需要调用 xTaskResumeAll() 进行恢复uxSchedulerSuspended 用于记录调度器是否被挂起, 该变量默认初始值为pdFLASE, 表明调度器是没被挂起的, 每调用一次vTaskSuspendAll() 函数就将变量加一, 用于记录调用了多少次vT原创 2021-04-06 20:59:39 · 634 阅读 · 0 评论 -
FreeRTOS 的FreeRTOSConfig.h文件
configUSE_IDLE_HOOK 0 // 空闲任务的钩子函数,空闲任务钩子是一个函数, 这个函数由用于来实现, FreeRTOS 规定了函数的名字和参数: void vApplicationIdleHook(void ),这个函数在每个空闲任务周期都会被调用 对于已经删除的 RTOS 任务,空闲任务可以释放分配给它们的堆栈内存。因此必须保证空闲任务可以被 CPU 执行使用空闲钩子函数设置 CPU 进入省电模式是很常见的, 不可以调用会引起空闲任务阻塞的 API 函数...原创 2021-04-01 09:42:03 · 180 阅读 · 0 评论 -
LPC1768 的FreeRTOS移植
首先是移植源码, 然后移植FreeRTOSConfig.h 接着配置 重点注意.s文件, 首先引入.个人理解应该是声明的意思 IMPORT xPortPendSVHandler ;ynxiaofan@ IMPORT xPortSysTickHandler ;ynxiaofan@ ...原创 2019-07-16 15:20:28 · 870 阅读 · 0 评论 -
FreeRTOS学习(十二)事件标志组
声明及感谢: 跟随正点原子资料学习, 在此作为学习的记录和总结环境 keil , stm32f103信号量能使单个事件或者任务进行同步, 但是当需要某个任务和多个事件或任务同步时,信号量就无能为力, 所以FreeRTOS提供一个可选的解决方法, 那就是事件标志组. 1, 创建事件标志组xEventGroupCreate() // 使用动态方法创建事件标志组xEventGroupCre...转载 2019-02-25 17:00:42 · 940 阅读 · 0 评论 -
FreeRTOS学习(十一)软件定时器
软件定时器简介,1, 软件定时器允许设置一段时间, 当设置的时间到达之后就执行指定的功能函数, 被定时器调用的这个函数叫做定时器的回调函数。 回调函数两次执行间隔叫做定时器的定时周期, 简而言之, 当定时器的定时周期到了以后就会执行回调函数。需要开启的宏定义:1, configUSE_TIMERS要使用软件定时器的话就要设置 此宏定义为1, 当设置为1的话定时器服务任务就会启动FreeRT...转载 2019-02-18 21:19:50 · 1567 阅读 · 0 评论 -
FreeRTOS学习(一) 任务的创建和删除
任务的创建 :原创 2019-01-16 10:15:00 · 328 阅读 · 0 评论 -
FreeRTOS学习(三)开关中断
背景知识, Cotex-M3的NVIC最多支持240个IRQ(中断请求),1个不可屏蔽(NMI),1个Systick(滴答定时器)Cortex-M处理器有三个固定的优先级(优先级为负数那几个就是固定的) 和256(因为每个中断都由中断优先级设置寄存器来设置,此寄存器为8位的,所以是256优先级)可编程的优先级, 最多有128个抢占优先级但是芯片厂家根据实际应用的情况会,将优先级最高分组会进行固...原创 2019-01-16 10:16:15 · 1259 阅读 · 0 评论 -
FreeRTOS学习(二) 任务挂起和恢复
声明及感谢: 跟随正点原子资料学习, 在此作为学习的记录和总结环境 keil , stm32f1031. 任务挂起vTaskSuspend(Task1Task_Handler) // 参数传入任务句柄2. 任务恢复任务恢复有两种情况,第一种: 在非中断中恢复vTaskResume(Task1Task_Handler); // 参数为任务句柄 即可恢复任务注意: 只有通过函数vTas...原创 2019-01-16 10:15:20 · 633 阅读 · 0 评论 -
关于FreeRTOS 杂项记录
关于任务堆栈的作用: 表示任务在进行上下文切换时,保存当前任务的环境. 所以每个任务都有任务堆栈原创 2019-01-16 10:15:47 · 116 阅读 · 0 评论 -
FreeRTOS学习(四) 列表的插入和删除
首先定义列表,以及列表项;List_t TestList; // 列表ListItem_t ListItem1; // 列表项1ListItem_t ListItem2; // 列表项2ListItem_t ListItem3; // 列表项3第一步: 初始化列表和列表项 // 初始化列表和列表项 vListInitialise(&TestList); vListInit...原创 2019-01-16 10:16:30 · 1388 阅读 · 0 评论 -
FreeRTOS学习(五) 任务相关API函数
API函数预览:1. UBaseType_t uxTaskPriorityGet( TaskHandle_t xTask ) // 获取某个任务的优先级参数: xTask 传入任务句柄原创 2019-01-16 11:23:08 · 657 阅读 · 0 评论 -
FreeRTOS学习(六) 时间片调度
声明及感谢: 跟随正点原子资料学习, 在此作为学习的记录和总结环境 keil , stm32f103对于FreeRTOS 允许同等任务优先级存在, 那么对于多个同等优先级的任务运行,情况的是如何?FreeRTOS 的机制就是对于同等优先级任务来说, 每个任务允许运行一个时间片.这个任务消耗完一个时间片,那么CPU的使用权,将会移交给同等优先级下的另一个任务.使用,如此反复, 直到次优先级完...原创 2019-01-16 16:48:49 · 11159 阅读 · 0 评论 -
FreeRTOS学习(七) 内核控制函数
声明及感谢: 跟随正点原子资料学习, 在此作为学习的记录和总结环境 keil , stm32f103函数预览taskTIELD() 任务切换taskENTER_CRITICAL() 进入临界区,用于任务中taskEXIT_CRITICAL() 退出临界区,用于任务中taskENTER_CRITICAL_FROM_ISR() 进入临界区,用于中断服务函数中taskEXIT_CRITIC...原创 2019-01-16 22:25:05 · 571 阅读 · 0 评论 -
FreeRTOS学习(八) 延时函数
声明及感谢: 跟随正点原子资料学习, 在此作为学习的记录和总结环境 keil , stm32f103FreeRTOS延时函数有两个分别是:vTaskDelay()vTaskDelayUntil()例程:http://www.freertos.org/vtaskdelayuntil.html...原创 2019-01-17 08:03:27 · 19814 阅读 · 0 评论 -
FreeRTOS学习(九) 队列操作
声明及感谢: 跟随正点原子资料学习, 在此作为学习的记录和总结环境 keil , stm32f103队列用于通信的, 所以队列也可也叫消息队列.队列出队阻塞当任务尝试从一个队列中读取消息的时候可以指定一个阻塞时间.(1) 当阻塞时间 设置为0 的时候为 不阻塞(2) 当阻塞时间设置为0~portMAX_DELAY 为 阻塞时间就是 设置的时间. 阻塞的时间单位为时钟节拍数...原创 2019-01-17 13:24:23 · 594 阅读 · 1 评论 -
FreeRTOS学习(十) 信号量
声明及感谢: 跟随正点原子资料学习, 在此作为学习的记录和总结环境 keil , stm32f103二值信号量 通常用于互斥访问,或同步, 大多数用于同步(任务与任务 或 任务 与中断的同步).和队列一样,信号量API函数允许设置一个阻塞时间, 阻塞时间是当任务获取信号量时, 由于信号量无效从而导致任务进入阻塞态的最大时钟节拍数. 如果多个任务同时阻塞在同一个信号量上的话,那么优先级最...原创 2019-01-17 15:38:32 · 1002 阅读 · 0 评论