外部事件的响应模式:ETTT USTC 模式1:在SR中完成对事件的服务。前后台系统 响应时间=中断响应时间=中断延迟时间十中断处理时间 模式2:中断触发任务,任务完成事件服务。多任务系统 一优点:减少中断服务时间,有利于高优先级任务的实时性 响应时间=中断响应时间十任务调度时间十任务执行时间 ·任务调度算法、任务数、任务通信、资源共享 ·事件发生频率:频率越低,响应时间越容易满足 ·任务执行时间:最坏时间分析(WCET) 中断响应 外部事件1 响应输出1 中断响应 任务调度 任务执行 外部事件2 响应输出2 llxx@ustc.edu.cn 26/94
外部事件的响应模式:ET/TT • 模式1:在ISR中完成对事件的服务。前后台系统 – 响应时间=中断响应时间=中断延迟时间+中断处理时间 • 模式2:中断触发任务,任务完成事件服务。多任务系统 – 优点:减少中断服务时间,有利于高优先级任务的实时性 – 响应时间=中断响应时间+任务调度时间+任务执行时间 • 任务调度算法、任务数、任务通信、资源共享 • 事件发生频率:频率越低,响应时间越容易满足 llxx@ustc.edu.cn 26/94 • 任务执行时间:最坏时间分析(WCET) 中断响应 外部事件1 响应输出1 中断响应 任务调度 任务执行 外部事件2 响应输出2
控制软件编程模型/范式 。简单系统控制:单任务,无需OS的支持 Run-to-Completion Tasks - Endless-Loop Tasks:non-terminal ·直到系统关闭或者出现异常停止运行 一前后台系统 cyclic executive:cooperative multitasking (activities) 。 复杂系统控制:多任务,Divide and Conquer -Threads模型:多任务并发异步执行 ·CPU轮流服务于一系列任务中的某一个 ·使CPU的利用率得到最大的发挥 ·使应用程序模块化、层次化。 使用嵌入式操作系统进行任务调度 llxx@ustc.edu.cn 27/94
控制软件编程模型/范式 • 简单系统控制:单任务,无需OS的支持 – Run-to-Completion Tasks – Endless-Loop Tasks:non-terminal • 直到系统关闭或者出现异常停止运行 – 前后台系统 llxx@ustc.edu.cn 27/94 – cyclic executive:cooperative multitasking(activities) • 复杂系统控制:多任务,Divide and Conquer – Threads模型:多任务并发异步执行 • CPU轮流服务于一系列任务中的某一个 • 使CPU的利用率得到最大的发挥 • 使应用程序模块化、层次化。 – 使用嵌入式操作系统进行任务调度
前后台系统:ET例,多任务(ISR) 后台循环 前台中断 ISR 时间 ISR ISR void MyTask (void) while (1){ •实时性要求较低、运行周期较长,且计算复 Wait for an event to occur; 杂的上层控制策略算法任务作为后台 Perform task operation; •实时性要求高的采样等任务作为前台
前后台系统:ET例,多任务(ISR)? ISR 后台循环 前台中断 时间 28/94 ISR ISR •实时性要求较低、运行周期较长,且计算复 杂的上层控制策略算法任务作为后台 •实时性要求高的采样等任务作为前台
前后台:EMSBench程序架构 STC main() SecondaryRPMISR() IgnitionFireISR() Read aenaora Calculate RPM RTIISR() Swltch senaor data 1m4 Calculate fuel/Ignltlon RPM IgnltionFire ■角是a Data Swltch cuntrul tiata PrlmaryRPMISR.() COM Fuel/Ignltlon Injection IgnltlonDwell IgnitlonFire Constanta Injectlon Data InjectorXISR)】 IgnitlonDwellISR() Injection active Inlectlon not actlve: IgnitlonDwell Charge aet deactlvatlon aet queued actlvatlon) Data Ignitlon Coll Data acceas -Set IRQ trigger>Set trigger flag
前后台:EMSBench程序架构
cyclic executive:TT例 USTC 超级循环:轮询式,时间驱动 int main(void){ 系统上电,调用main函数 /initialization code here 首先初始化 while (1){ 然后进入超级循环,逐一 currTemp=tempRead(); 轮询外部事件 直到系统关闭或者出现异 IcdWrite(currTemp); 常停止运行 /waste CPU cycles until 50 ms Device 1/O Task 1 currTemp=tempRead(); Output R1 Manager 1 /do other stuff Device 1/O Task 2 /waste CPU cycles until 100 ms Task 3 Output Manager 2 Task 4 Periodic timer's) Timing:minor cycle,major cycle?
cyclic executive:TT例 int main(void) { // initialization code here while (1) { currTemp = tempRead(); lcdWrite(currTemp); 超级循环:轮询式,时间驱动 系统上电,调用main函数 首先初始化 然后进入超级循环,逐一 轮询外部事件 直到系统关闭或者出现异 常停止运行 // waste CPU cycles until 50 ms currTemp = tempRead(); // do other stuff // waste CPU cycles until 100 ms } } Timing:minor cycle,major cycle?