操作系统------工作原理与移植方法介绍内容摘要:

言中 short、int、 long等数据类型是与特定的处理器相关的,因此在 uC/OSII中需重新定义,增强它的可移植性。 例如: typedef unsigned char BOOLEAN。 /*布尔变量 */ typedef unsigned char INT8U。 / *无符号 8位整型变量 */ 堆栈单位 在任务切换时,寄存器的值会保存在当前运行任务的堆栈空间中, 所以 OS_STK数据类型应该和处理器的寄存器长度是一致的,定义如下: typedef unsigned int OS_ STK。 /*堆栈入口宽度为 32位 */ 堆栈增长方向 堆栈由高地址向低地址增长,是和编译器有关的,当进行函数调用时,入口参数和返回地址一般都会保存在当前任务的堆栈中,编译器的编译选项和由此生成的堆栈指令就会决定堆栈的增长方向。 define OS_STK_GROWTH 1 /*定义堆栈的增长方向: 1=向下, 0=向上 */  宏定义 包括开关中断的宏定义及进行任务切换的宏定义。 typedef unsigned int OS_CPU_SR /*保存 CPU状态寄存器 */ define OS_ENTER_CRITICAL() (cpu_sr=OS_CPU_SaveSR()) /*禁止中断 */ define OS_EXIT_CRITICAL() (OS_CPU_RestoreSR(cpu_sr)) /*允许中断 */ define OS_TAS_SW() OSCtrSw() /*任务切换 */ 修改 这里涉及到任务初始化时的一个堆栈设计,也就是在堆栈增长方向上如何定义每个需要保存的寄存器位置。 在 ARM体系结构下,处理器的现场通常是指 {pc、 lr、 r0~r1 CPSR、 SPSR}这些寄存器,是否需要全部保存这些寄存器是由编译器的特性和实时性能的要求来决定的,因为并不是所有编译器都会用到 R0~ R12通用寄存器,但为了处理简单,通常会将它们全部保存。 任务初始化函数(为每个任务申请一个堆栈空间) OS_STK *OSTaskStkInit(void (*task)(void *pd),void *p_arg,OS_STK *ptos,INT16U opt) { OS_STK *stk。 opt =opt。 /*39。 opt39。 is not used, prevent warning*/。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。