
FreeRTOS
文章平均质量分 60
嵌入式操作系统FreeRTOS的一些学习记录
KINO32
欢迎加入QQ群913070414共同交流学习
展开
-
(十)内存管理
(1)内存管理使用heap_1.c-heap_5.c文件,初始化时根据宏定义分配指定大小内存(2)heap_1:申请连续内存块,不能释放内存,申请完毕就会申请失败(3)heap_2:使用最佳匹配算法,不能用于内存申请和释放是随机大小的应用,不能将相邻的两个小内存块合并(4)heap_3:使用c中的malloc和free方法申请释放内存,需要在startup.s启动文件中设置Heap_Size堆的大小。原创 2024-03-24 14:20:36 · 275 阅读 · 0 评论 -
(九)任务通知
3.3 发送通知给任务,设置通知值的一个或多个位,可以当做事件组来使用。3.4 发送通知给任务,递增通知值,可以当做计数信号量来使用。(6)无需创建,属于任务控制块中的变量,创建任务时即创建完成。3.1 发送通知给任务,如果有通知未读,不覆盖通知值。(8)只有任务可以等待通知,而不允许中断中等待通知。3.2 发送通知给任务,直接覆盖通知值。(2)每个任务都有一个32位的通知值。发送通知,没有通知值(信号量类型)发送通知,带通知值,并返回原通知值。(3)发送任务通知的几种情况。(7)中断/任务均能发送通知。原创 2024-03-23 21:49:10 · 516 阅读 · 0 评论 -
(八)软件定时器
(3)定时时间不严格周期,会根据任务执行时间改变,用于对精度要求不严格的场景。(2)硬件定时器不够用的情况下可使用软件定时器扩展剪裁。(1)基于消息队列和任务实现的定时器。开启软件定时器,带中断保护。关闭软件定时器,带中断保护。(5)回调函数不允许阻塞。(4)使用时需要打开。原创 2024-03-23 15:22:30 · 382 阅读 · 0 评论 -
(七)事件组
(2)不同于信号量的是,信号量是一对一的,而事件可以是一对多和多对一的,即一个任务等待多个事件或多个任务等待同一个事件。(1)用于实现任务与任务、任务与中断之间通信和同步,无数据传输。(3)逻辑与:等待的任意一个事件发生都可以唤醒。(4)逻辑或:等待的事件必须全部发生才会被唤醒。设置事件,即置时间组中对应位为1。原创 2024-03-21 22:38:21 · 353 阅读 · 0 评论 -
(六)信号量
(1)创建互斥量(2)创建递归互斥量(3)删除互斥量(4)获取互斥量(5)释放互斥量(6)获取递归互斥量(7)释放递归互斥量。原创 2024-03-19 00:24:18 · 418 阅读 · 0 评论 -
(五)消息队列
队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断与任务间传递信息,实现了任务接收来自于其他任务或中断的不定长度信息。删除队列,删除后所有消息都会被回收不能再使用。出队并删除队列项(带中断保护)出队不删除队列项(带中断保护)从队列尾部入队(带中断保护)从队列首部入队(带中断保护)原创 2024-03-17 20:02:32 · 693 阅读 · 0 评论 -
(四)任务管理
(1)就绪态:处于就绪列表的任务,可被任务调度器调度进行任务切换,初始化的任务就处于就绪态(2)阻塞态:从就绪列表中移除,添加到阻塞列表中的任务,不可被任务调度器调度进行任务切换,等待(阻塞时间结束/得到信号量)加入到就绪列表后才可以被调度器调度(3)运行态:正在运行的任务处于运行态(4)挂起态:从就绪列表或阻塞列表中移除加入到挂起列表的任务,任务调度器不可见此类任务,需要调用恢复函数进行恢复就绪态(1)挂起任务函数(2)任务恢复函数,将任务从挂起状态恢复到就绪状态。原创 2024-03-17 16:22:20 · 393 阅读 · 0 评论 -
(三)创建任务
函数获取空闲任务的信息。原创 2024-03-17 13:30:07 · 497 阅读 · 0 评论 -
(二)移植FreeRTOS到STM32中
(7)将FreeRTOS源码目录下的FreeRTOS/Source/portable文件夹下的MemMang和RVDS文件夹复制到STM32项目的freertos/port文件夹下,其中MemMang文件夹下是不同的内存管理文件,一般选择heap_4.c文件,RVDS/ARM_CM3文件夹下存放的是单片机m3内核,不同单片机根据不同内核进行选择。(5)将FreeRTOS源码目录下的FreeRTOS/Source/include文件夹下的.h头文件全部复制到STM32项目的freertos/inc文件夹下。原创 2024-03-16 19:40:02 · 1885 阅读 · 0 评论 -
(一)列表和列表项
(1)列表 -> c语言中的链表(2)列表项 -> c语言中的节点(3)使用到的文件list.c和list.h和(1)List_t列表(链表)结构体(2)ListItem_t列表项(节点)结构体(3)函数初始化链表(4)函数初始化节点(5)函数将节点插入到链表的结尾(6)函数,按照升序插入节点到链表中(7)函数将节点从链表中删除(8)其他还有一些宏定义可查询节点数量等。原创 2024-03-12 23:18:57 · 427 阅读 · 0 评论