[学习笔记]FreeRTOS
FreeRTOS 传送门:FreeRTOS 从入门到精通 - 精华总结 - 知乎 (zhihu.com) 官方文档:Free RTOS Book and Reference Manual Tasks and Queues 任务管理 新建任务设置 Task Name: 设置任务的名称,它会基于此名字建立一个指向任务的句柄 Priority: 设置任务的优先级,高优先级的任务会抢占低优先级的任务 Stack Size: 设置任务栈的大小,用于储存任务相关的变量,关于堆栈详细内容请参考 Entry_Function:设置任务的入口函数,这个函数便是开发者实现任务功能的地方 Code Generation Option: IDE自动生产初始代码的选项,这里选择默认设置 Parameter: 传递给任务的参数 Allocation: 设置任务所在的地方,选择动态的话是生成在堆中,选择静态的话则生成在静态区 关于任务 一个任务包含Stack区(用于储存任务相关的变量)和任务控制块TCB区(Task Control Block,用于储存任务本身的设置) 任务占用字节数 = TCB_size + (4 x Task stack size) 使用 实现任务函数的功能 *osKernelStart();* 语句启动FreeRTOS的任务调度程序,单片机就运行起来了。 内存管理 分配方案 FreeRTOS提供了五种方案 Heap_1 适用于系统不用删除任务或者内核对象 Heap_2 适用于重复添加和删除相同任务的系统 它会对大的内存块进行分割,但无法合并相连的内存块,容易导致内存的碎片化 Heap_3 使用的场景不多 Heap_4 更具普适性,也是默认配置 适用于通用的应用(系统会添加和删除不同大小的任务) Heap_5 用不同的数组空间对内存进行分配 是4的升级版 相关函数 size_t xPortGetFreeHeapSize( void ); 回当前堆中的空闲空间大小(单位是字节),可以用来优化堆空间大小 size_t xPortGetMinimumEverFreeHeapSize( void ); 返回在系统运行过程中堆空间的最小空闲空间,如果最小空闲空间很小的话可以考虑提高堆大小configTOTAL_HEAP_SIZE的值 这个函数只能在Heap_4或者Heap_5下调用…