RL-RTX应用

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

ARMReal-TimeLibraryTraining1Real-Time库:RTX内核ARMReal-TimeLibraryTraining2RTXKernel“RTX内核”(Real-TimeeXecutive)是一个实时操作系统“RTX内核”支持ARM7、ARM9、Cortex-M3。基于RTX的内核Source:允许创建多任务的应用程序允许系统资源弹性使用,如CPU存储器RTX内核是一个静态系统要想应用程序中使用RTX内核,必须加RTX库(可以使用菜单“options”自动加载)以下两个版本都可以使用•ARM7™/ARM9™•Cortex™-M3基于RTX内核ARMReal-TimeLibraryTraining4RTXKernel开始实时执行创建任务开始/停止任务执行从一个任务到另一个任务转换实现任务间的通讯基本功能ARMReal-TimeLibraryTraining5RTXKernel“事件标志”“信号量”“互斥”“信箱”进程间的通信提供一个任务间通信的机制:ARMReal-TimeLibraryTraining6RTXKernel/TechnicaldataSource::IRQ•调度程序可以禁止一小段时间(µs)FIQ•不能被禁止•不能从FIQ-ISR调用专用系统内核函数SWI(ARM7&ARM9设备的软件中断功能)•RTX内核保留SWI0到7•SWI功能受中断保护(FIQ除外)•自我创建的SWI功能必须用于RTX内核的处理os_clock_demon任务RTXARM7&ARM9提示ARMReal-TimeLibraryTraining9RTXKernelIRQ•不能由RTX调度程序禁止无FIQSVC(SoftwareInterruptFunctionforCortex-Mdevices)•SVC0保留给RTX内核•可以中断SVC函数•自我创建的SVC功能必须用于RTX的SVC处理无os_clock_demon任务栈空间•最小128Byte(256Byte)RTXCortex-M3提示ARMReal-TimeLibraryTraining10RTX内核:任务的使用ARMReal-TimeLibraryTraining11Tasks-Basics应用程序的每个作业都会由分割的任务来处理每个外设也可由几个分割的任务来处理任务间进程的通信几个任务可以被“同步”执行每个任务都会有自己的优先权等级任务可以移植到其他应用程序中ARMReal-TimeLibraryTraining12SystemResources在文件“RTX_Config.c”中进行配置•当前运行的任务数量•用户定义栈的任务数量•默认的栈空间系统资源ARMReal-TimeLibraryTraining13SystemResourcesRTX内核需要的周期(按时间片)ARM7和ARM9设备上的RTX内核:•使用ARM的其中一个标准定时器Cortex-M的RTX内核:•使用系统定时器(Cortex-MCPU提供专用的RTOS定时器)定时器的时间片中断ARMReal-TimeLibraryTraining14SystemResourcesos_clock_demon:•系统时间片定时器任务•调用时间片定时器中断(ARM7&ARM9)•管理其他所有任务(延时溢出,唤醒任务,挂起任务等)•具有最高的优先权•Cortex-M中不使用RTX库(Cortex-M设备有扩展的RTOS特性)os_idle_demon:•RTX内核的空闲任务•如果没有任务运行RTX内核,转换到•优先权最低RTX内核默认的任务ARMReal-TimeLibraryTraining15SystemResources每个任务由任务控制块定义TaskControlBlock(TCB)在配置文件“RTX_Config.c”中定义TCB存储池的大小•依据并发执行的任务数量来定义任务控制块Source:任务的TCB在创建任务后,根据任务的运行时间从存储池中动态分配任务的定位信息:•任务控制变量•任务状态变量任务控制块Source:RTX内核为所有任务的栈分配存储池存储池的大小取决于•默认栈的大小•当前运行任务的数量•用户自定义栈的任务数量•设备类型(Cortex-MorARM7/9)栈管理Source:附加栈:•os_clock_demon任务和•os_idle_demon任务Cortex-M:ARM7&ARM9:栈管理MemoryPoolSize=(OS_TASKCNT–OS_PRIVCNT+1)*StackSizeMemoryPoolSize=(OS_TASKCNT–OS_PRIVCNT+2)*StackSizeSource:任务创建以后,在运行时任务的栈由存储池动态分配用户定义的栈必须由程序分配,必须由新创建的任务指定栈存储块分配以后,指向其位置的指针必须写入到TCB栈管理Source:每个任务获得自己的栈并进行存储:•参数•变量•函数返回•(现场保存)任务转换:•当前运行任务的现场将会保存在本地栈中•切换到下一个任务•保存新任务的现场•新任务开始运行栈管理Source:RTX内核提供了栈溢出校对•在文件RTX_Config.c中允许/禁止此功能•当栈溢出时,RTX核进入函数stack_error_function()中,这个函数是一个死循环栈管理Source::用户/系统的栈定义在文件Startup.s中为RTX内核配置的最小栈空间为:•管理模式32bytes(0x00000020)•中断模式64bytes(0x00000040)•用户模式80bytes(0x00000050)第一个栈创建并启动后方可使用用户模式栈(UserModeStack)用户使用自己创建的中断时,必须要增加中断模式栈的空间(InterruptModeStack)用户使用自定义的SWI功能时,必须增加管理模式栈的空间(SupervisorModeStack)系统启动ARMReal-TimeLibraryTraining23SystemResourcesCortex-M3:在文件Startup.s中对主栈的大小进行配置RTX核使用系统服务调用(SystemSerViceCalls)•所有SVC函数都使用主栈•使用RTX核时主栈最小为128bytes•如果使用了中断,主栈的大小建议使用256bytes如果应用程序使用自有的SVC函数,应再增加主栈的大小系统启动ARMReal-TimeLibraryTraining24Multitasking多任务是按照操作系统的方式来处理多任务的同步,允许多任务共享系统资源。单CPU系统中,在同一时刻只允许处理一个任务。在各任务之间快速转换,感觉上是多任务在同步执行。几套多任务策略。定义ARMReal-TimeLibraryTraining25TaskManagement每个任务处于以下几个状态之一:•RUNNING•READY•INACTIVE•WAIT_DLY•WAIT_ITV•WAIT_OR•WAIT_AND•WAIT_SEM•WAIT_MUT•WAIT_MBX任务状态CPURunningT5ReadyT1ReadyT2Wait_XXT3Wait_XXT4CPURunningT5RunningT5ReadyT1ReadyT1ReadyT2ReadyT2Wait_XXT3Wait_XXT3Wait_XXT4Wait_XXT4ARMReal-TimeLibraryTraining26TaskManagementRUNNING:•当前运行的任务•同一时刻只有一个任务处于这一状态•当前CPU处理的正是这个任务READY:•任务处于准备运行状态INACTIVE:•任务还没有被执行或者是任务已经取消任务状态ARMReal-TimeLibraryTraining27TaskManagementWAIT_DLY:•任务等待延时后再执行WAIT_ITV:•任务等待设定的时间间隔到后再执行任务状态ARMReal-TimeLibraryTraining28TaskManagementWAIT_OR:•任务等待最近的事件标志WAIT_AND:•任务等待所有设置事件标志任务状态ARMReal-TimeLibraryTraining29TaskManagementWAIT_SEM:•任务等待从同步信号发来的“标志”WAIT_MUT:•任务等待可用的互斥量WAIT_MBX:•任务等待信箱消息或者等待可用的信箱空间来传送消息任务状态ARMReal-TimeLibraryTraining30Multitasking协同多任务处理抢占多任务处理循环多任务处理多任务策略ARMReal-TimeLibraryTraining31Basics任务调用自己的调度程序或者使自己进入休眠状态由程序员设计多任务操作系统不影响任务间的转换协同多任务处理ARMReal-TimeLibraryTraining32Functionsos_tsk_pass()•任务调用调度程序•调度程序决定下一个运行的任务os_dly_wait()•任务进入休眠,休眠时间预先设定•调度程序决定下一个运行的任务协同多任务处理ARMReal-TimeLibraryTraining33Basics调度程序可以抢占当前运行的任务调度程序决定下一个运行的任务因此,高优先权任务可以抢占低优先权任务当前的现场要进行保存抢占多任务处理ARMReal-TimeLibraryTraining34BasicsCPU时间被分割为时间片。处于“ready”状态的任务(与其他具有相同优先权的任务相比),调度程序会将之优先执行。使用类似os_tsk_pass()的方法,可以将循环多任务处理与协同多任务处理结合起来。当前运行的任务切换到等待状态的时候,由调度程序决定下一个运行的任务。循环多任务处理ARMReal-TimeLibraryTraining35Example两个任务有相同的优先权循环模式被禁止用示波器检测“portpin”会有什么情况发生?例1Task1:voidtask1(void)__task{while(1){portpin=1;}}Task2:voidtask2(void)__task{while(1){portpin=0;}}ARMReal

1 / 90
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功