RTOS基础及其在10A Charger中的应用1_图文

RTOS基础及其在10A RTOS基础及其在10A Charger中 Charger中的应用

目录
? ? ? ? 前后台系统 RTOS系统的架构 RTOS系统的架构 RTOS的任务管理机制 RTOS的任务管理机制 10A charger应用实例 charger应用实例

前后台系统架构 前后台系统架构

中断
? 在中断中置标志 位表明相关任务 需要执行
EPWM CNT == 0

AD Sample Start Flag = 1

AD Interrupt

Return

前后台的不足
每一个任务被延迟的最大时间 都是主函数一个循环的时间,实 时性不好 不利于程序的模组化

基于RTOS的 基于RTOS的10A charger架构 charger架构

(1)uc_II系统 (2)不可剥夺 型内核

硬件层(黄色部分)
DSP 2802的各个功能模块: 2802的各个功能模块: I/O PORTS(PWM PORTS) SCI,SPI,CAN ADC

硬件抽象层(褐色部分)
在这一层,主要通过对DSP寄存器对 DSP的资源进行操作 通过宏(MACRO)的方式,实现对硬件 操作。

Device Driver 层
这一层主要是在各个中断中实现,通过调用 硬件抽象层的宏(MACRO), 硬件抽象层的宏(MACRO),来获得与低层硬 件无关的数据,提供给任务级使用。

通过这一层和硬件抽象层提供给kernel和任务 通过这一层和硬件抽象层提供给kernel和任务 级与处理器无关的数据。提高更高层的可移植 性。

任务层(蓝色部分) 任务层(蓝色部分)
Charger的任务层包括: Charger的任务层包括: 状态切换; 时序控制; 相关侦测和保护; 交互通信 中断也可以看着是任务,但优先级和 时效性要求最高的任务 通过和Device Driver一层的接口来获得 通过和Device Driver一层的接口来获得 模拟量的数据。通过Kernel提供的服务 模拟量的数据。通过Kernel提供的服务 和别的任务同步。 用户应用程序主要通过任务级完成。 用户应用程序主要通过任务级完成。
APP Task Sci Task CAN Task BusBatProt Task Supervisor Task SCI Receive Interrupt SCI Transmit Interrupt

Interrupt

CAN Interrupt

TBASE_ IN T Interrupt

ADCAEOC Interrupt

Kernel层(粉红色部分) Kernel层(粉红色部分)
RTOS的一个主要任务是任务的调度和切换 RTOS的一个主要任务是任务的调度和切换 也 就是CPU如何对需要处理的任务进行服务。 就是CPU如何对需要处理的任务进行服务。 Kernel层是RTOS主要的设计任务,通过提供 Kernel层是RTOS主要的设计任务,通过提供 特定的系统服务,来实现对任务的调度以及切 换,实现任务之间的同步与通信。 主要有以下三部分组成: 任务的管理和调度 任务之间 的通信和同步 Timer结构以及时间管理 Timer结构以及时间管理

任务间通信和同步
10A charger系统内的任务有中断、定 charger系统内的任务有中断、定 时和其他任务唤醒三种方式; 系统内基本没有共享的外设,不需要 信号量进行资源的互斥。任务间的数据 共享是通过全局变量和函数进行的。 10A charger是一个事件驱动的系统, charger是一个事件驱动的系统, 任务之间是通过简单的事件进行同步和 通信的。

任务管理
共有4 共有4个任务,每个任务有各自的优先 级,优先级固定不变 每个任务都在系统启动之前建立 不可删除任务 任务只有三种状态:就绪、挂起和执行 使用优先级的调度策略

TCB结构 TCB结构
每个任务通过一个任务控制块来管理自己的信息, 任务控制块的结构如下:

任务堆栈
每个任务有各自的独立任务堆栈,这样 在采用C语言编写程序的时候才不会有任 何的限制 任务堆栈的大小由处理器、编译器架构 以及任务级的函数嵌套n、中断嵌套m、 传递的参数x、临时变量y共同决定 任务栈大小= n × 调用函数 的开销 + m ×中断时保存现场的开销 + x + y

优先级、TCB列表 列表、 优先级、TCB列表、就绪表的关系
OSRdyMap(1 word,16bits) 15 14 13 …… prio …… 2 1 0 0 1 …… Task priority=prio prio …… OS_LOWEST _PRIO OSTCBTbl[OS_LOWEST_PRIO+1]

调度
用OSRdyMap中的一个bit来表示任务的状态,任务被挂起时,对 OSRdyMap中的一个bit来表示任务的状态,任务被挂起时,对 应的bit为 ,就绪或者执行时为1 应的bit为0,就绪或者执行时为1。 ? 在就绪表中将优先级为prio的任务置就绪(相应bit置1): 在就绪表中将优先级为prio的任务置就绪(相应bit置1): #define OSTaskRdy(prio) OSRdyMap |= (1 << prio) ? 在就绪表中将优先级为prio的任务置挂起(相应bit1清零) : 在就绪表中将优先级为prio的任务置挂起(相应bit1清零) #define OSTaskSuspend(prio) OSRdyMap &= ~ (1 << prio)

调度( 调度(Scheduler)

创建任务
void OSTaskCreate (void (*task)(void), INTOS stksize, INTOS prio) 找到对应的TCB 找到对应的TCB 从系统堆栈中分配大小为stksize的区域并初 从系统堆栈中分配大小为stksize的区域并初 始化系统堆栈 初始化TCB中各项 初始化TCB中各项 任务置为就绪态

创建一个任务

任务级切换函数OSSched() 任务级切换函数OSSched()

中断级切换函数OSIntExit() 中断级切换函数OSIntExit()

中断管理
无嵌套的中断处理(不能在中断中打 开中断) 中断的时间要求尽可能短 Buck、 Buck、Boost IGBT控制也在中断中执 IGBT控制也在中断中执 行,该部分程序占用了大多数的CPU时 行,该部分程序占用了大多数的CPU时 间,注意中断溢出。

事件管理
1、等待特定的事件,如果没有事件,那么挂起该任务 TASK_EVENT OSMaskEventPend(TASK_EVENT mask) 比较常用的是等待所有的事件: 比较常用的是等待所有的事件: #define OSEventPend OSMaskEventPend(0); 2、等待一个事件,并返回事件,如果没有事件,不挂起。 TASK_EVENT OSEventGet(void) 3、发送一个事件给特定的任务 void OSEventSend( INTOS prio,INTOS EventId) void OSISREventSend( INTOS prio,INTOS EventId)

发送事件EventSend(prio,EventId) EventSend(
OSRdyMap(1 word,16bits) 15 14 13 …… prio …… 3、make the task ready TCB 1、ptcb= &OSTCBTbl[prio]; 2 1 0 0 1 …… prio OSEvent …… 2、Set the EventId Bit =1 15 14 13 …… EventId …… 2 1 OS_LOWEST _PRIO OSTCBTbl[OS_LOWEST_PRIO+1] 0

……

时间管理
大多数任务需要一个定时的机制来实现定时的 调度,需要一个定时的中断来管理定时。 每一个任务需要一个变量来记录timer的周期 每一个任务需要一个变量来记录timer的周期 (OSTimerPeriod),还需要一个变量来记录计 OSTimerPeriod), 数值( 数值(OSTimerCnt) 当timer的周期值为0时,表示这个timer是被禁 timer的周期值为0时,表示这个timer是被禁 止的。 当计数器的值大于或等于周期值时,将计数器 清零,并唤醒任务。唤醒的方式通过发送一个 EventId=0的事件给任务的TCB。 EventId=0的事件给任务的TCB。

时间节拍函数OSTimerTick 时间节拍函数OSTimerTick
Ptc b=OS TCB Tbl ptcb end =&OS TCB Tbl [OS _LOW EST _PRI O] No P tcb <=pt cbe nd? r etur n

Ye s 计数器周期值 等 于 0吗 ? No 递 加 该 T CB 的 计 数 器 No Yes

计数器值等 于周期值吗? Ye s 计数器清零

标 示 time r 事 件 , 唤醒任务

Pt cb+ +

应用实例
void main() {//启动系统 {//启动系统 UPSHardwareInitial(); OSInit(); sTaskInitial(); OSStart(); } 系统在初始化硬件后( 系统在初始化硬件后(UPSHardwareInitial ); 调用OSInit初始化OS的各个变量; 调用OSInit初始化OS的各个变量; 创建各个任务( 创建各个任务(sTaskInitial ); 在创建完任务后,调用函数OSStart启动多任务. 在创建完任务后,调用函数OSStart启动多任务.

创建任务,设定timer 创建任务,设定timer

任务实例

中断实例

开关中断的应用

开关中断的应用

谢谢!


相关文档

1-2.RTOS基础
RTOS uCOS-II 原理及应用 -- 2
RTOS uCOS-II 原理及应用
RTOS uCOS-II 原理及应用 第一章
RTOS uCOS-II 原理及应用 -- 6
基于rtos的单片机系统在温室环境控制中的应用研究
RTOS uCOS-II 原理及应用 -- 3
RTOS在WCDMA BTS平台中的应用
RTOS_uCOS-II_原理及应用课件5
电脑版