- 1、本文档共125页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
什么是可重入代码 可重入的代码指的是一段代码(比如:一个函数)可以被多个任务同时调用,而不必担心会破坏数据。 也就是说,可重入型函数在任何时候都可以被中断执行,过一段时间以后又可以继续运行,而不会因为在函数中断的时候被其他的任务重新调用,影响函数中的数据。 可重入代码举例 程序1:可重入型函数 void swap(int *x, int *y) { int temp; temp=*x; *x=*y; *y=temp; } 非可重入代码举例 程序2:非可重入型函数 int temp; void swap(int *x, int *y) { temp=*x; *x=*y; *y=temp; } 返回 打开/关闭中断 在?COS-II中,可以通过: OS_ENTER_CRITICAL() OS_EXIT_CRITICAL() 宏来控制系统关闭或者打开中断。这需要处理器的支持。 在ARM7TDMI的处理器上,可以设置相应的寄存器来关闭或者打开系统的所有中断。 处理器支持中断并且能产生定时中断 ?COS-II是通过处理器产生的定时器的中断来实现多任务之间的调度的。 ARM7TDMI的处理器上可以产生定时器中断。 处理器支持硬件堆栈 ?COS-II进行任务调度的时候,会把当前任务的CPU寄存器存放到此任务的堆栈中,然后,再从另一个任务的堆栈中恢复原来的工作寄存器,继续运行另一个任务。所以,寄存器的入栈和出栈是?COS-II多任务调度的基础。 ARM7处理器中有专门的指令处理堆栈,可以灵活的使用堆栈。 移植对开发工具的要求 移植?COS-II需要一个标准的C交叉编译器; 由于移植时需要对CPU的寄存器进行操作,所以需要C交叉编译器能够支持汇编语言程序; 嵌入式C编译器一般都包括汇编器、链接器和定位器。链接器是用来将不同的模块(编译或汇编过的文件)链接成目标文件;定位器则允许将代码和数据放置在目标处理器的指定内存空间中; 例:?C/OS-II在S3C44B0X上的移植 设置OS_CPU.H中与处理器和编译器相关的代码 用C语言编写六个操作系统相关的函数(OS_CPU_C.C) 用汇编语言编写四个与处理器相关的函数(OS_CPU.ASM) 设置与处理器和编译器相关的代码 OS_CPU.H中定义了与编译器相关的数据类型。比如:INT8U、INT8S等。 与 ARM处理器相关的代码,使用OS_ENTER_CRITICAL() 和OS_EXIT_CRITICAL() 宏开启/关闭中断 设置堆栈的增长方向 :堆栈由高地址向低地址增长 用C语言编写六个操作系统相关的函数 void *OSTaskStkInit (void (*task)(void *pd),void *pdata, void *ptos, INT16U opt) void OSTaskCreateHook (OS_TCB *ptcb) void OSTaskDelHook (OS_TCB *ptcb) void OSTaskSwHook (void) void OSTaskStatHook (void) void OSTimeTickHook (void) 后5个函数为接口函数,可以不加代码 堆栈初始化 低地址内存 存储的处理器寄存器值 中断返回地址 处理器状态字 任务起始地址 pdata 高地址内存 堆栈指针 堆栈增长方向 用汇编语言编写四个与处理器相关的函数 OSStartHighRdy() OSCtxSw() OSIntCtxSw() OSTickISR() 关于移植 相对于其他的嵌入式操作系统,uCOS-II的移植虽然是一个很简单的过程,但是,对于不熟悉uCOS-II的开发者,移植还是有一定难度的。 移植要点 定义函数OS_ENTER_CRITICAL和OS_ENTER_CRITICAL。 定义函数OS_TASK_SW执行任务切换。 定义函数OSCtxSw实现用户级上下文切换,用纯汇编实现。 定义函数OSIntCtxSw实现中断级任务切换,用纯汇编实现。 定义函数OSTickISR。 定义OSTaskStkInit来初始化任务的堆栈。 uC/OS的完善 固定的基于优先级的调度,不支持时间片,使用起来不方便。一个任务的基础上增加一个基于时间片的微型调度核 系统时钟中断,没有提供用户使用定时器,可以借鉴linux的定时器加以修改 在对临界资源的访问上使用关闭中断实现,没有使用CPU提供的硬件指令,例如测试并置位。 只是一个实时多任务内核,没有图形用户接口(GUI)、文件系统(FS)和TCP/IP协议栈 移植uCOS-II值得注意的地方(1) 开关中断的方式。
您可能关注的文档
- 机械制造基础工艺第5章 工艺过程设计.ppt
- 第23讲 侧向分型与抽芯机构1专题课件.ppt
- 附件成型及粘贴工艺培训课件.pptx
- 第十一章 钢的化学热处理.ppt
- 中文版青岛海立电机有限公司介绍培训课件.ppt
- 消失模铸件品质控制培训课件.ppt
- 工件定位基准的选择教学课件.ppt
- 自愈合防水工艺介绍幻灯片.pptx
- 文献检索、文献管理软件应用及文献筛选.pptx
- 高中数学人教版选修1-2同课异构1.1 回归分析的基本思想及其初步应用 情境互动课型教学课件.ppt
- 具有改进均匀性更小边框amoled显示器设计介绍.pdf
- 访问面试指南其余部分nce non to ibibig混合金融非至.pdf
- 图腾柱raz n分册级68totem poles.pdf
- 早期发育中优势相关基因表达项目开始heterosis.pdf
- 印地语文学高级试卷1hindi liture paper 1.pdf
- 解决方案单元销售应收款主题crmb1 tbsol.pdf
- cvpr18-geometric robustness of deepand几何鲁棒性改进.pdf
- 机械制造及自动化本专业教学实施细则.pdf
- azoles part 132 synthesis and brominelithium exchange唑类化合物部分合成及溴锂交换.pdf
- 一集文字记录眼部测试大家好margot stranscript成绩单.pdf
文档评论(0)