实时系统UCOS&FreeRTOS
2024-04-26 15:12:51 0 举报
AI智能生成
嵌入式STM32下使用UCOS III
作者其他创作
大纲/内容
UCOS III
内存管理
标准C
占用大量代码空间
没有线程安全
运行不确定性,每次调用时间不同
内存碎片化
特点
每个内存块大小一样
API
创建内存区
OSMemCreate
获取内存块
OSMemGet
释放内存块
OSMemPut
系统移植
uc- OS3
cfg
配置文件模版文件
Ports
接口文件,CPU与系统桥梁
Source
源码文件
Template
与动态Tick管理相关
uc- CPU
ARM-Cortex M
内核相关
uc- LIB
字符操作,数学,内存管理
任务调度
抢占式
不同优先级
时间片轮询
同一优先级
任务状态
运行状态
运行
同一时间只有一个任务处于运行
就绪
初始创建
被抢占
不可以阻塞
挂起
延时/等待事件就被挂起
休眠
任务被删除,但还没有交给系统
中断
中断打断
三大列表
就绪列表
准备运行的任务
OSRdyList【x】 x是优先级
Tick列表
等待超时/挂起超时的任务
OSTickList
挂起列表
等待信号量,事件
PendList
任务
初始化系统
OSInit
创建
OSTaskCreate
删除
OSTaskDel
开启任务
OSStart
队列
功能
任务到任务;中断到任务 信息传递
功能代码
创建
OSQCreate
删除
OSQDel
写队列
OSQPost
读队列
OSQPend
清空队列
OSQQFlush
终止任务挂起等待消息队列
OSQPendAbout
特点
入队出队
传输数据
指针
多任务访问
出队阻塞
可设置阻塞事件
信号量
二值信号量
用途
互斥访问
类似互斥信号量,会出现优先级翻转
任务同步
更适合
特点
资源数 0/1
功能代码
创建
OSSemCreate
删除
OSSemDel
释放
OSSemPost
获取
OSSemPend
终止任务挂起等待信号量
OSSemPendAbort
强制设置资源数
OSSemSet
计数型信号量
用途
事件计数
资源管理
功能代码与二值信号量一致
优先级翻转
特点
低优先级先于高优先级执行
由于高优先级等待资源受阻塞,低优先级的任务先执行
互斥信号量
特点
拥有优先级的二值信号量
优先级继承
会将低优先级的任务提升到与其一样的优先级
功能代码
创建
OSMutexCreate
删除
OSMutexDel
获取
OSMutexPend
释放
OSMutexPost
任务内嵌信号量/队列
任务信号量
特点
只能本任务获取信号量,可以由其他任务或者中断释放
优点
内存更小
效率高
缺点
无法广播
API
获取
OSTaskSemPend
终止任务挂起等待信号量
OSTaskSemPendAbort
释放指定任务信号量
OSTaskSemPost
强制设置值
OSTaskSemSet
任务队列
特点
只能本任务获取,可以由其他任务或者中断释放
优点
内存更小
效率高
缺点
无法广播
API
清空
OSTaskQFlush
获取
OSTaskQPend
终止任务挂起等待消息队列
OSTaskQPendAbort
释放指定任务消息队列
OSTaskQPost
事件标志
特点
指示事件是否发生的比特位
事件组就是多个事件组成的整数
事件组最多32个事件标志
任务和中断进行写,只能有任务读
可以等待一位或者多位
API
创建
OSFlagCreate
删除
OSFlagDel
释放
OSFlagPost
获取
OSFlagPend
终止挂起等待事件
OSFlagPendAbort
获取任务等待到的事件
OSFlagPendGetFlagRdy
软件定时器
裁剪
OS_CFG_TMR_EN = 1 配置使用定时器
分辨率
OS_CFG_TICK_RATE_HZ / OS_CFG_TMR_TASK_RATE_HZ
种类
单次定时器
周期定时器
状态
未使用态
停止态
运行态
完成态
API
创建
OSTmrCreate
删除
OSTmrDel
获取剩余时间
OSTmrRemanGet
设置时间
OSTmrSet
开启定时器
OSTmrStart
获取状态
OSTmrStateGet
停止
OSTmrStrop
FreeRTOS
任务管理
多线程
消息队列
信号量
二值信号量
任务与任务间的同步
任务和中断间同步
计数信号量
互斥信号量
临界资源的访问
递归信号量
互斥量
锁
优先级继承机制
当低优先级任务正在占用该资源的时候,即便高优先级任务也只能等待。
这里高优先级任务无法 运行而低优先级任务可以运行的现象称为“优先级翻转”
这里高优先级任务无法 运行而低优先级任务可以运行的现象称为“优先级翻转”
暂时提高占有资源的低优先级任务的优先级
事件
标志位
任务与任务间的同步
任务和中断间同步
任务通知
特征
可以替代二值信号量、计数信号量、事件组,也可以替代 长度为 1 的队列
比通过信号量等 ICP 通信方式解除阻塞的任务要快 45%,并且更加省 RAM 内存空间
只能有一个任务接收通知消息,因为必须指定接收通知的任务
只有等待通知的任务可以被阻塞,发送通知的任务,在任何情况下都不会因为发 送失败而进入阻塞态
方式
如果有通知未读,不覆盖通知值
直接覆盖通知值
设置通知值的一个或者多个位,可以当做事件组来使用
递增通知值,可以当做计数信号量使用
软件定时器
特性
定时精度与系统时钟的周期有关。一般系统利用 SysTick 作为软件定时器的基础时钟
采用消息队列进行通信
分类
单次模式
周期模式
内存管理
heap_1.c
优:分配简单,时间确定
缺:只分配、不回收
heap_2.c
优:动态分配、最佳匹配
缺:碎片、时间不定
heap_3.c
优:调用标准库函数
缺:速度慢、时间不定
heap_4.c
优:相邻空闲内存可合并
缺:可解决碎片问题、时间不定
heap_5.c
优:在heap_4基础上支持分隔的内存块
缺:可解决碎片问题、时间不定
中断管理
相关硬件
外设
产生一个中断信号,该信号连接至中断控制器
中断控制器
接收其他外设中断信号 的输入
出中断信号给 CPU
CPU 本身
响应中断源的请求,中断当前正在执行的任务,转而执行中断处理程序
运行机制
保存当前处理机状态信息
载入异常或中断处理函数到 PC寄存器
把控制权转交给处理函数并开始执行
当处理函数执行完成时,恢复处理器状态信息
从异常或中断中返回到前一个程序执行点
收藏
收藏
0 条评论
下一页