FreeRTOS
文章平均质量分 77
p0inter
生而自由,爱而无畏,保持热爱奔赴山海
展开
-
FreeRTOS--堆内存管理(二)
堆内存管理代码具体实现heap_1内存申请函数内存释放函数heap_2内存块内存堆初始化函数内存块插入函数内存申请函数判断是不是第一次申请内存开始分配内存内存释放函数heap_3heap_4内存堆初始化函数内存块插入函数heap_5上一篇文章说了FreeRTOS实现堆内存的原理,这一篇文章说一下常用函数的代码的具体实现。heap_1heap_1的内存堆为ucHeap[],大小为configTOTAL_HEAP_SIZE内存申请函数heap_1的内存申请函数pvPortMalloc()源码如下:/原创 2021-12-08 11:22:51 · 4246 阅读 · 0 评论 -
FreeRTOS---堆内存管理(一)
FreeRTOS的堆内存管理简介动态内存分配及其与 FreeRTOS 的相关性动态内存分配选项内存分配方案Heap_1heap_2Heap_3Heap_4设置heap_4的起始地址Heap_5vPortDefineHeapRegions()堆相关的函数xPortGetFreeHeapSizexPortGetMinimumEverFreeHeapSizeMalloc调用失败的Hook函数这篇文章先说原理,下一遍文章说代码的具体实现简介从FreeRTOS V9.0.0开始,FreeRTOS应用程序可以完全原创 2021-12-07 11:01:44 · 4646 阅读 · 0 评论 -
The FreeRTOS Distribution(介绍、移植、类型定义)
1 Understand the FreeRTOS Distribution1.1 Definition :FreeRTOS PortFreeRTOS目前可以在20种不同的编译器构建,并且可以在30多种不同的处理器架构上运行,每个受支持的编译器和处理器组合被认为是一个单独的FreeRTOS Port。1.2 Building FreeRTOSFreeRTOS可以被认为是一个库,为应用程序提供多任务处理能力。 FreeRTOS以一组C源文件的形式提供,一些文件对FreeRTOS Port是通用的。而另原创 2021-12-02 20:57:00 · 345 阅读 · 0 评论 -
FreeRTOS任务通知
从v8.2.0版本开始,FreeRTOS新增了任务通知这个功能,可以使用任务通知来代替信号量、消息队列、事件标志组等这些东西,使用任务通知的话效率会更高。任务通知在FreeRTOS是一个可选的选项,要使用任务通知的话就需要将宏configUSE_TASK_NOTIFICATIONS定义为1 。FreeRTOS的每个任务都有一个32位的通知值,任务控制块中的成员变量ulNotifiedValue就是这个通知值。任务通知是一个事件,可以提高速度,减少RAM的使用,但是任务通知也是有限的,FreeRTOS的任务原创 2021-11-27 18:26:51 · 1501 阅读 · 0 评论 -
FreeRTOS事件标志组
使用信号量来同步的话,任务只能与单个事务或任务进行同步,有时候某个任务可能会需要与多个事件或任务进行同步,此时信号量就无能为力了,FreeRTOS为此提供了一个可选的解决方法,那就是事件标志组。0x01 事件标志组事件标志组的数据类型为EventGroupHandle_t,当configUSE_16_BIT_TICKS为1的时候,事件标志组可以存储8个事件位,当configUSE_16_BIT_TICKS设置为0的时候,可以存储24个事件位。事件0存在在bit0上,EventGroupHandle_t变原创 2021-11-27 15:50:45 · 453 阅读 · 0 评论 -
FreeRTOS软件定时器
软件定时器允许设置一段时间,当设置的时间达到后就执行指定的功能函数,被软件定时器调用的功能函数叫做定时器的回调函数。软件定时器的回调函数是在定时器服务任务中执行的,所以一定不能在回调函数中调用任何阻塞任务的API函数,比如VTaskDelay。软件定时器分为两种,单次定时器和周期定时器,单次定时器就执行一次,然后停止运行,不能自动重启,但我们可以手动重新启动,周期定时器就是执行完回调函数以后自动的重新启动,这样回调函数就会周期性的执行。0x01 定时器相关配置定时器的配置在FreeRTOSConfig原创 2021-11-26 18:25:56 · 866 阅读 · 0 评论 -
FreeRTOS信号量---二值信号量
信号量可以用来进行资源管理和任务同步,FreeRTOS中信号量又分为二值信号量、计算型信号量、互斥信号量和递归互斥信号量原创 2021-11-26 14:46:54 · 2302 阅读 · 1 评论 -
FreeRTOS队列
在实际应用中,我们会遇到一个任务或者中断服务需要和另一个任务进行消息传递,FreeRTOS提供了队列的机制来完成任务与任务、任务与中断之间的消息传递。0x01 队列简介队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间传递消息,队列中可以存储有限的、大小固定的数据项目。队列中能保存的最大数据项目数量叫做队列的长度。1. 数据存储队列提供了FIFO、LIFO的存储缓冲机制,数据发送到队列中会导致数据拷贝,数据拷贝是值传递,在队列中存储的是数据的原始值,而不是原始值的引原创 2021-11-25 17:14:53 · 411 阅读 · 0 评论 -
FreeRTOS时间管理
在使用FreeRTOS的过程中,我们通常会在一个任务函数中使用延时函数对这个任务延时,当执行延时函数的时候就会进行任务切换,并且此任务就会进入阻塞太,直到延时完成,任务重新进入就绪态。延时函数舒属于FreeRTOS的时间管理。0x00 FreeRTOS的延时函数FreeRTOS中,延时函数相对模式和绝对模式,相对模式是使用vTaskDelay()函数,绝对模式是使用vTaskDelayUntil函数。vTaskDelay要将INCLUDE_vTaskDelay配置为1,单位是msvoid vTask原创 2021-11-23 21:27:32 · 1960 阅读 · 0 评论 -
FreeRTOS的列表和列表项
列表和列表项列表列表是FreeRTOS中的一个数据结构,概念上和链表有点类型,是一个循环双向链表,列表被用来跟踪FreeRTOS中的任务。列表的类型是List_T,具体定义如下:typedef struct xLIST{ listFIRST_LIST_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ configLIST原创 2021-11-23 09:41:09 · 488 阅读 · 1 评论 -
FreeRTOS中断配置与临界段
Cortex-M中断中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序(中断服务程序),处理完毕后又返回原被暂停的程序继续运行。Cortex-M内核的MCU提供了一个用于中断管理的嵌套向量中断控制器(NVIC)。当多个中断来临的时候,处理器应响应哪一个中断是由中断的优先级来决定的,高优先级(优先级的编号小)的中断首先得到响应,可以抢占低优先级的中断。Cortex-M处理器有三个固定优先级和256个可编程优先级,最多有128个抢占等级,优先级配置寄存原创 2021-11-22 11:36:42 · 1159 阅读 · 0 评论 -
FreeRTOS任务挂起和恢复
任务挂起:暂停某个任务的执行任务恢复:让暂停的任务继续执行通过任务挂起和恢复,可以达到让任务停止一段时间后重新运行。相关API函数:vTaskSuspendvoid vTaskSuspend( TaskHandle_t xTaskToSuspend );xTaskToSuspend :要挂起任务的任务句柄,如果使用函数xTaskCreate创建任务的话,xTaskCreate的参数pxCreatedTask就是此任务的任务句柄,如果使用xTaskCreateStatic创建任务,那么函数的原创 2021-11-21 20:03:56 · 1292 阅读 · 0 评论 -
FreeRTOS任务创建和删除
任务创建和删除的API函数xTaskCreate():使用动态方法创建一个任务xTaskCreateStatic():使用静态方法创建一个任务xTaskCreateRestricated():创建一个使用MPU进行限制的任务,相关内存使用动态内存分配vTaskDelete():删除一个任务xTaskCreate使用该函数,configSUPPORT_DYNAMIC_ALLOCATION要设置为1 #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) B原创 2021-11-20 16:35:58 · 909 阅读 · 0 评论 -
FreeRTOS任务基础知识
任务特性在RTOS中,一个实时应用可以作为一个独立的任务,支持抢占,支持优先级,每个任务都有自己的堆栈,当任务切换时将上下文环境保存在堆栈中,再次调用任务时,取出上下文信息,继续运行。任务优先级每一个任务都可以分配一个从0~(configMAX_PRIORITIES-1)的优先级,configMAX_PRIORITIES在FreeRTOSConfig中有定义如果所使用的硬件平台支持类似计算前导零这样的指令(Cortex-M处理器支持)。并且configUSE_PORT_OPTIMISED_TASK原创 2021-11-19 21:33:43 · 2006 阅读 · 0 评论 -
FreeRTOS系统配置文件FreeRTOSConfig.h
实际使用FreeRTOS的时候,我们时常需要根据自己需求来配置FreeRTOS,而且不同架构的MCU在使用的时候配置也不同,FreeRTOS的系统配置文件FreeRTOSConfig.h可以完成FreeRTOS的裁剪和配置。FreeRTOSConfig.h分成两个部分,一个是INCLUDE_开始的宏,另一个是config开始的宏。INCLUDE_开始的宏INCLUDE_开头的宏用来配置FreeRTOS中的API函数,当配置为1时,表示使用该函数,配置为0表示不能使用。比如INCLUDE_vTaskPri原创 2021-11-19 21:00:26 · 696 阅读 · 0 评论 -
FreeRTOS在STM32F429上移植
准备工作FreeRTOS系统源码基础工程,这里我们用跑马灯实验1.在工程里面添加FreeRTOS源码在工程里面新建一个名为FreeROTS的文件夹将FreeRTOS源码添加到这个文件夹里面protable里面只需留下Keil、MemMang、RVDS文件夹2、向工程分组中添加文件FreeRTOS_CORE的文件在FreeRTOS源码的首目录下,FreeRTOS_PORTABLE的port.c在RVDS文件夹下的ARM_CM4F中,heap_4.c在MenMang中,是内存管理方法原创 2021-11-19 19:11:05 · 1958 阅读 · 1 评论