uCOSII嵌入式操作系统介绍与移植
![uCOSII嵌入式操作系统介绍与移植_第1页](https://file3.zhuangpeitu.com/fileroot3/2022-4/18/b5a7f7c4-b4e4-4656-8d0a-c558104452fc/b5a7f7c4-b4e4-4656-8d0a-c558104452fc1.gif)
![uCOSII嵌入式操作系统介绍与移植_第2页](/images/s.gif)
![uCOSII嵌入式操作系统介绍与移植_第3页](/images/s.gif)
《uCOSII嵌入式操作系统介绍与移植》由会员分享,可在线阅读,更多相关《uCOSII嵌入式操作系统介绍与移植(21页珍藏版)》请在装配图网上搜索。
1、课 件uCOS-II嵌入式操作系统介绍与移植目录n1、uC/OS-II简介n2、uC/OS-II的移植n3、OS_CPU.H的移植 n4、OS_CPU.c的移植 n5、OS_CPU_A.S的移植 n6、多任务应用程序的编写 uC/OS-II简介n1、uC/OS-II是一个简单、高效的嵌入式实时操作系统内核n2、支持 x86、ARM、PowerPC、MIPS 等众多体系结构n3、可从www.ucos-网站上获得全部源码及其在各种体系结构平台上的移植范例。uC/OS-II特点n1、uC/OS-II内核具有可抢占的实时多任务调度功能n2、提供了许多系统服务,如信号量、消息队列、邮箱、内存管理、时间函
2、数等n3、这些功能可以根据不同的需求进行裁减。uC/OS-II的移植n1、汇编语言、C语言代码需要移植n2、移植工作集中在多任务切换的实现上n3、在ARM处理器上的移植,需要完成的工作包括:修改三个和体系结构相关的文件,代码量大约是500行。这三个文件是OS_CPU_C.c、OS_CPU_C.H以及OS_CPU_A.SOS_CPU.H的移植n1、数据类型定义 n2、ARM处理器相关宏定义 n3、堆栈增长方向 数据类型定义 n1、INT8U -unsigned charn2、INT8S -signed char n3、INT16U -unsigned shortn4、INT16S -signed
3、 shortn5、INT32U -unsigned intn6、INT32S -signed intARM处理器相关宏定义n1、退出临界区n#d e f i n e O S _ E N T E R _ C R I T I C A L()ARMDisableInt()n2、进入临界区 n#d e f i n e O S _ E X I T _ C R I T I C A L()ARMEnableInt()堆栈增长方向n1、堆栈由高地址向低地址增长,这个也是和编译器有关的,当进行函数调用时,入口参数和返回地址一般都会保存在当前任务的堆栈中,编译器的编译选项和由此生成的堆栈指令就会决定堆栈的增长方向
4、。n#define OS_STK_GROWTH 1OS_CPU.c的移植n1、任务堆栈初始化 n2、系统hook函数 n3、中断级任务切换函数 任务堆栈初始化OSTaskStkInitn1、由OSTaskCreate或OSTaskCreateExt调用n2、用来初始化任务的堆栈并返回新的堆栈指针stk。初始状态的堆栈模拟发生一次中断后的堆栈结构。n3、在ARM体系结构下,任务堆栈空间由高至低依次将保存着pc、lr、r12、r11、r10、r1、r0、CPSR、SPSRn4、堆栈初始化结束后,OSTaskStkInit返回新的栈顶指针,OSTaskCreate或 OSTaskCreateExt将
5、指针保存在任务的OS_TCB中。系统hook函数n1、任务创建钩子OSSTaskCreateHookn2、任务删除钩子OSTaskDelHookn3、任务切换钩子OSTaskSwHookn4、任务统计钩子OSTaskStatHookn5、时钟节拍处理钩子OSTimeTickHook中断级任务切换函数OSIntCtxSwn1、该函数由OSIntExit()和OSExIntExit()调用n2、在时钟中断ISR(中断服务例程)中发现有高优先级任务等待的时钟信号到来,则需要在中断退出后并不返回被中断任务,而是直接调度就绪的高优先级任务执行。n3、该函数通过设置一个全局变量need_to_swap_c
6、ontext标志以表示在中断服务程序中进行任务切换,然后在OSTickISR()中判断该变量以进行正确的动作。OS_CPU_A.S的移植 n1、时钟节拍中断服务函数 n2、退出临界区和进入临界区函数 n3、任务级上下文切换函数 n4、OSStartHighRd 时钟节拍中断服务函数OSTickISRn1、时钟节拍是特定的周期性中断n2、时钟节拍率越快,系统的额外开销就越大。越慢则系统响应速度越慢n3、本系统使用定时器0作为时钟节拍源,产生间隔10mS的时钟节拍n4、OSTickISR()就是时钟节拍中断服务函数,也就是定时器0的中断处理函数OSTickISR函数n1、首先在被中断任务堆栈中保存
7、CPU寄存器的值,然后调用OSIntEnter()n2、调用OSTimeTick(),检查所有处于延时等待状态的任务,判断是否有延时结束就绪的任务。n3、最后调用OSIntExit(),如果在中断中(或其他嵌套的中断)有更高优先级的任务就绪,并且当前中断为中断嵌套的最后一层。OSIntExit()将进行任务调度。如果当前中断不是中断嵌套的最后一层,或中断中没有改变任务的就绪状态,OSIntExit()将返回调用者OSTickISR(),最后OSTickISR()返回被中断的任务。退出/进入临界区函数 ARMDisableInt/ARMEnableInt n1、直接操作CPSR的I、F位n2、A
8、RMDisableInt将CPSR的I、F位设置为1,关闭所有中断n3、ARMEnableInt将CPSR的I、F位设置为0,打开中断任务级上下文切换函数 OS_TASK_SW n1、该函数当任务因为被阻塞而主动请求cpu调度时被执行,由于此时的任务切换都是在非异常模式下进行的,因此区别于中断级别的任务切换。n2、它先将当前任务的cpu现场保存到该任务堆栈中,然后获得最高优先级任务的堆栈指针,从该堆栈中恢复此任务的cpu现场,使之继续执行。这样就完成了一次任务切换。OSStartHighRd n1、该函数是在OSStart函数中调用n2、负责从最高优先级任务的TCB中获得该任务的堆栈指针sp,
9、并依次将cpu现场恢复,这时系统就将控制权交给用户创建的该任务进程,直到该任务被阻塞或者被其他更高优先级的任务抢占cpun3、该函数仅在多任务启动时被执行一次,用来启动之前创建的第一个,也就是最高优先级的任务执行多任务应用程序的编写 n1、C语言入口函数 n1、调用函数ARMTargetInit初始化ARM处理器;n2、调用OSInit进行操作系统初始化;n3、调用OSTaskCreate函数两个任务:TaskLED和TaskSEG;n4、调用ARMTargetStart函数启动时钟节拍中断;n5、调用OSStart启动系统任务调度。多任务应用程序的编写 n2、任务处理函数nVoid Task(UINT8 id)nnWhile(1)nnn
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。