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