ImageVerifierCode 换一换
格式:PPTX , 页数:100 ,大小:1.07MB ,
资源ID:9398706      下载积分:18 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/9398706.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(嵌入式系统rteosμcosii的移植.pptx)为本站上传会员【精***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

嵌入式系统rteosμcosii的移植.pptx

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,嵌入式系统rteoscosii的移植,嵌入式系统rteoscosii的移植,第1页,主要内容,移植规划,C/OS-II,移植,嵌入式系统初始化,嵌入式系统rteoscosii的移植,第2页,移植规划,-,概述,所谓“,移植,”,就是使一个实时内核能在其它微处理器或微控制器上运行。,尽管大个别,C/OS-II,代码是用,C,语言编写,不过在编写与处理器硬件相关代码时还是不得不使用汇编语言。,移植主要工作就是编写这些与处理

2、器硬件相关代码。,操作系统移植大致能够分为两个层次:,跨体系结构移植,针对特定处理器移植,嵌入式系统rteoscosii的移植,第3页,移植规划,在移植前针对所使用微处理器进行规划,主要有以下几个方面考虑:,编译器选择,任务模式选择,支持指令集,嵌入式系统rteoscosii的移植,第4页,移植规划(续),编译器选择,针对,ARM,处理器核,C,语言编译器有很多,如,SDT,、,ADS,、,IAR,、,TASKING,和,GCC,等,当前在我国最流行是,ADS,、,SDT,和,GCC,SDT,和,ADS,均为,ARM,企业自己开发,,ADS,为,SDT,升级版,以后,ARM,企业不再支持,SD

3、T,,故不选择,SDT,。,GCC,即使支持广泛,很多开发套件使用它作为编译器,不过与,ADS,比较其编译效率较低,这对充分发挥芯片性能不利,考虑,使用,ADS,编译程序和调试,嵌入式系统rteoscosii的移植,第5页,ARM,工作模式,ARM处理器有7种操作模式:,用户模式,(usr),-正常程序执行模式,快速中止模式,(fiq),-支持高速数据传输或通道处理,中止模式,(,irq),-用于通用中止处理,管理员模式,(svc),-操作系统保护模式.,中止模式,(abt),-支持虚拟内存和/或内存保护等异常,系统模式,(sys),-支持操作系统特殊用户模式(运行操作系统任务),未定义模式,

4、und),-支持硬件协处理器软件仿真,除了用户模式外,其它模式均可视为特权模式,嵌入式系统rteoscosii的移植,第6页,移植规划(续),任务模式取舍,ARM7,处理器核含有上述七种模式,其中除用户模式外其它均为,特权模式,。其中管理、中止、未定义、中止和快中止模式,与对应异常相联络,,任务使用这些模式不太适合。,系统模式除了是特权模式外,其它与用户模式一样,因而可选为,任务使用模式只有用户模式和系统模式,。,为了尽可能降低任务代码错误对整个程序影响,,缺省任务模式定为用户模式,可选为系统模式,,同时提供接口使任务能够在这两种模式间切换。,嵌入式系统rteoscosii的移植,第7页,移

5、植规划(续),支持指令集,带,T,变量,ARM7,处理器核含有两个指令集:,标准,32,位,ARM,指令集,16,位,Thumb,指令集,两种指令集有不一样应用范围。,为了最大程度地支持芯片特征,任务应该,能够使用任意一个指令集并能够自由切换,,而且不一样任务应该能够使用不一样指令集,嵌入式系统rteoscosii的移植,第8页,移植,C/OS-II,概述,要移植一个操作系统到一个特定,CPU,体系结构并不是一件很轻易事情,它对移植者有以下要求:,1,对目标体系结构要有很深了解;,2,对,OS,原理要有较深入了解;,3,对所使用编译器要有较深入了解;,4,对需要移植操作系统要有相当了解;,5,

6、对详细使用芯片也要一定了解,嵌入式系统rteoscosii的移植,第9页,要移植一个操作系统到一个特定,CPU,体系结构上并不是一件很轻易事情,它对移植者有以下要求:,1,对目标体系结构要有很深了解;,2,对,OS,原理要有较深入了解;,3,对所使用编译器要有较深入了解;,4,对需要移植操作系统要有相当了解;,5,对详细使用芯片也要一定了解。,概述,要移植一个操作系统到一个特定,CPU,体系结构上并不是一件很轻易事情,它对移植者有以下要求:,1,对目标体系结构要有很深了解;,2,对,OS,原理要有较深入了解;,3,对所使用编译器要有较深入了解;,4,对需要移植操作系统要有相当了解;,5,对详细

7、使用芯片也要一定了解。,参考,ARM,企业,ARM,体系结构,文档,参考,嵌入式实时操作系统,C/OS-II,一书,参考,ADS,软件自带,编译器和连接器手册,参考,嵌入式实时操作系统,C/OS-II,一书,参考详细芯片,数据手册,和,使用手册,因为第,4,点影响是全局性,它决定移植代码框架和功效。,所以重点介绍第,4,点。,嵌入式系统rteoscosii的移植,第10页,主要内容,移植规划,C/OS-II,移植,嵌入式系统初始化,嵌入式系统rteoscosii的移植,第11页,C/OS,-II,文件结构,嵌入式系统rteoscosii的移植,第12页,C/OS-II,移植,应用程序,(用户代

8、码),C/OS-II,(与处理器无关代码),OS_CORE.c,OS_FLAG.c,.,C/OS-II,配置,(与应用相关),OS_CFG.H,INCLUDES.H,C/OS-II,移植,(与处理器相关代码),CPU,定时器,硬件,软件,C/OS-II,硬件软件体系结构,用于产生系统时钟,移植时需要编写代码,嵌入式系统rteoscosii的移植,第13页,移植,C/OS-II,满足条件,处理器,C,编译器能产生可重入代码,在程序中能够打开或者关闭中止,处理器支持中止,而且能产生定时中止(通常在,10,100Hz,之间),处理器支持能够容纳一定量数据硬件堆栈(通常是几千字节),处理器有将堆栈指针

9、和其它,CPU,存放器内容存放和读出到堆栈(或者内存)指令,嵌入式系统rteoscosii的移植,第14页,什么是可重入代码,可重入代码指是一段能够被多个任务同时调用,而无须担心会破坏数据代码(比如:一个函数),即:可重入型函数在任何时候都能够被中止执行,过一段时间以后又能够继续运行,而不会因为在函数中止时候被其它任务重新调用,而影响函数中数据,嵌入式系统rteoscosii的移植,第15页,可重入代码举例,程序,1,:可重入型函数,void swap(int*x,int*y),int temp;,temp=*x;,*x=*y;,*y=temp;,嵌入式系统rteoscosii的移植,第16页

10、非可重入代码举例,程序,2,:非可重入型函数,int temp;,void swap(int*x,int*y),temp=*x;,*x=*y;,*y=temp;,嵌入式系统rteoscosii的移植,第17页,不可重入函数被中止破坏,嵌入式系统rteoscosii的移植,第18页,怎样使函数含有可重入性,使,Swap(),函数含有可重入性条件:,把,Temp,定义为局部变量,调用,Swap(),函数之前关中止,调用,后再开中止,用信号量禁止该函数在使用过程中,被再次调用,嵌入式系统rteoscosii的移植,第19页,概述,依据,C/OS-II,要求,移植,C/OS-II,到一个新体系结构上

11、需要提供,2,个或,3,个文件:,OS_CPU.H,(,C,语言头文件),OS_CPU_C.C,(,C,程序源文件),OS_CPU_A.ASM,(汇编程序源文件),其中,OS_CPU_A.ASM,在一些情况下不需要,但极其罕见。不需要,OS_CPU_A.ASM,必须满足以下苛刻条件:,1,.,能够直接使用,C,语言开关中止;,2,.,能够直接使用,C,语言编写中止服务程序;,3,.,能够直接使用,C,语言操作堆栈指针;,4,.,能够直接使用,C,语言保留,CPU,全部存放器。,移植需要编写文件,嵌入式系统rteoscosii的移植,第20页,概述,移植内容,类型,所属文件,描述,BOOLEAN

12、INT8U,、,INT8S,、,数据类型,OS_CPU.H,与编译器无关数据类型,OS_STK,数据类型,OS_CPU.H,堆栈数据类型,OS_ENTER_CRITICAL(),和,OS_EXIT_CRITICAL(),宏,OS_CPU.H,开关中止代码,OS_STK_GROWTH,常量,OS_CPU.H,定义堆栈增加方向,OS_TASK_SW,函数,OS_CPU.H,任务切换时执行代码,OSTaskStkInit(),函数,OS_CPU_C.C,任务堆栈初始化函数,OSInitHookBegin(),、,OSInitHookEnd(),、,函数,OS_CPU_C.C,C/OS-II在执

13、行一些操作时调用用户函数,普通为空,OSStartHighRdy(),函数,*OS_CPU_A.ASM,进入多任务环境时运行优先级最高任务,,OSIntCtxSw(),函数,*OS_CPU_A.ASM,中止退出时任务切换函数,OSTickISR(),中止服务程序,*OS_CPU_A.ASM,时钟节拍中止服务程序,实际上,还有一个文件很主要,它就是,IRQ.INC,,它定义了一个汇编宏,它是,C/OS-II for ARM7,通用中止服务程序汇编与,C,函数,接口代码,。时钟节拍中止服务程序也没有移植,因为其与芯片和应用都强烈相关,需要用户自己编写,不过能够经过,IRQ.INC,简化用户代码编写

14、移植代码包含主要内容,嵌入式系统rteoscosii的移植,第21页,关于头文件,includes.h,和,config.h,C/OS-II,要求,全部,.C,文件都要包含头文件,includes.h,,这么使得用户项目中每个,.C,文件不用分别去考虑它实际上需要哪些头文件。,使用,INCLUDES.H,缺点是它可能会包含一些实际不相关头文件,这意味着每个文件编译时间可能会增加,但却增强了代码可移植性。,在移植中另外增加了一个头文件,config.h,,要求,全部用户程序必须包含,config.h,,,在,config.h,中包含,includes.h,和特定头文件和配置项,。而,C/OS

15、II,系统文件依然只是包含,includes.h,,即,C/OS-II,系统文件完全无须改动。,全部配置改变包含头文件增减均在,config.h,中进行,,而,includes.h,定下来后无须改动(,C/OS-II,系统文件需要包含东西是固定)。这么,,C/OS-II,系统文件需要编译次数大大降低,编译时间随之降低。,congfig.h,UC/OS,内核文件,Includes.h,用户程序,嵌入式系统rteoscosii的移植,第22页,设置与处理器和编译器相关代码,OS_CPU.H,中定义了与编译器相关数据类型。比如:,INT8U,、,INT8S,等。,与,ARM,处理器相关代码,使用,

16、OS_ENTER_CRITICAL(),和,OS_EXIT_CRITICAL(),宏开启关闭中止,设置堆栈增加方向:堆栈由高地址向低地址增加,嵌入式系统rteoscosii的移植,第23页,编写,OS_CPU.H,C/OS-II,使用结构常量,OS_STK_GROWTH,中指定堆栈生长方式:,置,OS_STK_GROWTH,为,0,表示堆栈,从下往上长,。,置,OS_STK_GROWTH,为,1,表示堆栈,从上,(高地址),往下,(低地址),长,。,即使,ARM,处理器查对于两种方式均支持,但,ADS,C,语言编译器仅支持一个方式,即,从上往下长,而且必须是满递减堆栈,,所以,OS_STK_G

17、ROWTH,值为,1,。,#define OS_STK_GROWTH 1,堆栈生长方式,嵌入式系统rteoscosii的移植,第24页,编写,OS_CPU.H,C/OS-II,不使用,C,语言中,short,、,int,、,long,等数据类型定义,因为它们,与处理器类型相关,隐含着不可移植性,。代之以移植性强整数数据类型,这么,既直观又可移植,不过这就成了必须移植代码。依据,ADS,编译器特征,这些代码以下程序清单所表示,(与编译相关),。,typedef,unsigned char BOOLEAN;,typedef,unsigned char INT8U;,typedef,signed c

18、har INT8S;,typedef,unsigned short INT16U;,typedef,signed short INT16S;,typedef,unsigned int INT32U;,typedef,signed int INT32S;,typedef,float FP32;,typedef,double FP64;,typedef,INT32U OS_STK;,不依赖于编译数据类型,嵌入式系统rteoscosii的移植,第25页,设置,includes.h,typedef unsigned char BOOLEAN;,typedef unsigned char,INT8U,;

19、typedef signed char,INT8S,;,typedef unsigned int INT16U;,typedef signed int INT16S;,typedef unsigned long INT32U;,typedef signed long INT32S;,typedef float FP32;,typedef double FP64;,typedef unsigned long OS_STK;,typedef unsigned long OS_CPU_SR;,extern int INTS_OFF(void);,extern void INTS_ON(void);

20、define,OS_ENTER_CRITICAL(),cpu_sr=INTS_OFF();,#define,OS_EXIT_CRITICAL(),if(cpu_sr=0)INTS_ON();,#define,OS_STK_GROWTH,1 /*,从高向低*,/,嵌入式系统rteoscosii的移植,第26页,程序状态存放器(,CPSR,),条件位,:,N=1-,结果为负,0-,结果为正或,0,Z=1-,结果为,0,0-,结果不为,0,C=1-,进位,,0-,借位,V=1-,结果溢出,,0,结果没溢出,Q,位,:,仅,ARM 5TE/J,架构支持,指示增强型,DSP,指令是否溢出,J,位,仅

21、ARM 5TE/J,架构支持,J=1:,处理器处于,Jazelle,状态,中止禁止位,:,I =1:,禁止,IRQ.,F=1:,禁止,FIQ.,T Bit,仅,ARM xT,架构支持,T=0:,处理器处于,ARM,状态,T=1:,处理器处于,Thumb,状态,Mode,位,(,处理器模式位,):,0b10000User,0b10001FIQ,0b10010IRQ,0b10011Supervisor,0b10111Abort,0b11011Undefined,0b11111System,27,31,N Z C V,Q,28,6,7,I F,T,mode,16,23,8,15,5,4,0,24,

22、f,s,x,c,U n d e f i n e d,J,嵌入式系统rteoscosii的移植,第27页,编写,OS_CPU.H,C/OS-II,运行时,处理器可能处于模式以下列图所表示:,使用软中止,SWI,作底层接口,Thumb,指令集,ARM,指令集,用户模式,系统模式,用户任务使用处理器模式,ARM7,内核含有指令集,ARM,指令,用户模式,ARM,指令,系统模式,Thumb,指令,系统模式,Thumb,指令,用户模式,嵌入式系统rteoscosii的移植,第28页,编写,OS_CPU.H,为了使底层接口函数与处理器状态无关,同时在任务调用对应函数不需要知道函数位置,在移植中使用,软中止

23、指令,SWI,作为底层接口,使用不一样,功效号,区分不一样函数。软中止功效号分配以下表所表示,未列出为保留功效。,使用软中止,SWI,作底层接口,功效号,接口函数,介绍,0 x00,void OS_TASK_SW(void),任务级任务切换函数,0 x01,_OSStartHighRdy(void),运行优先级最高任务,由OSStartHighRdy产生,0 x02,void OS_ENTER_CRITICAL(void),关中止,0 x03,Void OS_EXIT_CRITICAL(void),开中止,0 x80,Void ChangeToSYSMode(void),任务切换到系统模式,0

24、 x81,Void ChangeToUSRMode(void),任务切换到用户模式,0 x82,Void TaskIsARM(INT8U prio),任务代码是,ARM,代码,0 x83,Void TaskIsTHUMB(INT8U prio),任务代码是,THUMB,代码,嵌入式系统rteoscosii的移植,第29页,编写,OS_CPU.H,用软中止作为操作系统底层接口就需要在,C,语言中使用,SWI,(,SoftWare Interrupt,),指令。在,ADS,中,有一个关键字,_swi,,用它申明一个不存在函数,则调用这个函数就在调用这个函数地方插入一条,SWI,指令,而且能够指定功

25、效号。同时,这个函数也能够有参数和返回值,其传递规则与普通函数相同。,使用软中止,SWI,作底层接口,/*,任务级任务切换函数*,/,_swi(0 x00)void OS_TASK_SW(void);,/*,运行优先级最高任务 *,/,_swi(0 x01)void _OSStartHighRdy(void);,/*,关中止 *,/,_swi(0 x02)void OS_ENTER_CRITICAL(void);,/*,开中止 *,/,_swi(0 x03)void OS_EXIT_CRITICAL(void);,/*,任务切换到系统模式 *,/,_swi(0 x80)void ChangeT

26、oSYSMode(void);,/*,任务切换到用户模式 *,/,_swi(0 x81)void ChangeToUSRMode(void);,/*,任务代码是,ARM,代码 *,/,_swi(0 x82)void TaskIsARM(INT8U prio);,/*,任务代码是,THUMB,代码*,/,_swi(0 x83)void TaskIsTHUMB(INT8U prio);,程序中调用软中止时使用函数名,软件中止号,该调用不返回参数,嵌入式系统rteoscosii的移植,第30页,编写,OS_CPU_C.C,C/OS-II,移植要求用户编写,10,个,C,函数:,OSTaskStkIn

27、it,():,OSTaskCreat,()和,OSTaskCreatExt,()经过调用,本函数,初始化任务栈结构,OSTaskCreateHook,():每当添加任务时由,OS_TCBInit(),函数调用,OSTaskDelHook,():任务被删除后由,OSTaskDel,()调用,OSTaskSwHook,():任务切换时两种情况均会调用该函数,OSTaskIdleHook,():,OSTaskIdle,()函数可调用该函数实现,CPU,低功耗模式,OSTimeTickHook,():本函数在每个时钟节拍都会被,OSTimeTick,()调用,OSInitHookBegin,():进入

28、OSInit,()函数后本函数会马上被调用,OSInitHookEnd,():,OSInit,()函数返回之前被调用,OSTCBInitHook,():,OS_TCBInit(),在调用,OSTaskCreateHook,()之前将先,调用本函数,唯一必要函数是,OStaskStkInit,(),其它,9,个函数必须申明,但不一定要包含任何代码,嵌入式系统rteoscosii的移植,第31页,编写,OS_CPU_C.C,该函数用于初始化任务堆栈,使任务堆栈看起来就像刚发生中止一样。即任务被执行时,就像从中止返回一样。,在编写此函数之前,必须先确定任务堆栈结构。而,任务堆栈结构是与,CPU,体

29、系结构、编译器有亲密关联,。本移植堆栈结构以下列图所表示。,OSTaskStkInit(),任务入栈,其它数据,LR,R12,R11,R10,R9,R8,.,栈底,任务环境开始,SP,PC,R2,R1,R0,OSEnterSum,空闲空间,嵌入式系统rteoscosii的移植,第32页,编写,OS_CPU_C.C,OSTaskStkInit(),OS_STK*,OSTaskStkInit,(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT16U opt),OS_STK*stk;,opt =opt;,stk =ptos;,*stk=(OS_STK)t

30、ask;,*-stk=(OS_STK)task;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=(unsigned int)pdata;,*-stk=(USER_USING_MODE|0 x00);,*-stk=0;,return(stk);,入栈数据,任务入栈,其它数据,LR,R12,R11,R10,R9,R8,.,栈底,任务环境开始,SP,PC,R2,R1,R0,OSEnterSum,空闲空间,嵌入式系统rte

31、oscosii的移植,第33页,编写,OS_CPU_C.C,OSTaskStkInit(),OS_STK*,OSTaskStkInit,(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT16U opt),OS_STK*stk;,opt =opt;,stk =ptos;,*stk=(OS_STK)task;,*-stk=(OS_STK)task;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=0;,*-stk=0;,*-st

32、k=0;,*-stk=(unsigned int)pdata;,*-stk=(USER_USING_MODE|0 x00);,*-stk=0;,return(stk);,该数据比较尤其,它用于保留该任务关中止次数,它在调用,OS_ENTER_CRITICAL(),时加,1,,在调用,OS_EXIT_CRITICAL(),时减,1,。,这么每个任务都能够独立控制本任务中止允许状态,而不会影响其它任务中止允许状态。所以关中止和开中止就能够嵌套。,嵌入式系统rteoscosii的移植,第34页,编写,OS_CPU_C.C,软件中止异常服务程序,操作系统与硬件相关底层函数使用软件中止作为接口,以下表所

33、表示。,移植代码中一个主要工作就是为这些软件中止,编写服务程序,功效号,接口函数,介绍,0 x00,void OS_TASK_SW(void),任务级任务切换函数,0 x01,_OSStartHighRdy(void),运行优先级最高任务,由OSStartHighRdy产生,0 x02,void OS_ENTER_CRITICAL(void),关中止,0 x03,Void OS_EXIT_CRITICAL(void),开中止,0 x80,Void ChangeToSYSMode(void),任务切换到系统模式,0 x81,Void ChangeToUSRMode(void),任务切换到用户模式

34、0 x82,Void TaskIsARM(INT8U prio),任务代码是,ARM,代码,0 x83,Void TaskIsTHUMB(INT8U prio),任务代码是,THUMB,代码,嵌入式系统rteoscosii的移植,第35页,编写,OS_CPU_C.C,软件中止异常服务程序,功效号,介绍,0 x00,任务级任务切换函数,0 x01,运行优先级最高任务,由OSStartHighRdy产生,0 x02,关中止,0 x03,开中止,0 x80,任务切换到系统模式,0 x81,任务切换到用户模式,0 x82,任务代码是,ARM,代码,0 x83,任务代码是,THUMB,代码,功效号,接

35、口函数,介绍,0 x00,void OS_TASK_SW(void),任务级任务切换函数,0 x01,_OSStartHighRdy(void),运行优先级最高任务,由OSStartHighRdy产生,0 x02,void OS_ENTER_CRITICAL(void),关中止,0 x03,Void OS_EXIT_CRITICAL(void),开中止,0 x80,Void ChangeToSYSMode(void),任务切换到系统模式,0 x81,Void ChangeToUSRMode(void),任务切换到用户模式,0 x82,Void TaskIsARM(INT8U prio),任务代

36、码是,ARM,代码,0 x83,Void TaskIsTHUMB(INT8U prio),任务代码是,THUMB,代码,void SWI_Exception(int SWI_Num,int*Regs),OS_TCB *ptcb;,switch(SWI_Num),case 0 x02:/,关中止,.,case 0 x03:/,开中止,.,case 0 x80:/,任务切换到系统模式,.,case 0 x81:/,任务切换到用户模式,.,case 0 x82:/,任务代码是,ARM,代码,.,case 0 x83:/,任务代码是,Thumb,代码,.,default:,这两个软件中止使用汇编代码完

37、成,嵌入式系统rteoscosii的移植,第36页,编写,OS_CPU_C.C,软件中止异常服务程序,功效号,介绍,0 x00,任务级任务切换函数,0 x01,运行优先级最高任务,由OSStartHighRdy产生,0 x02,关中止,0 x03,开中止,0 x80,任务切换到系统模式,0 x81,任务切换到用户模式,0 x82,任务代码是,ARM,代码,0 x83,任务代码是,THUMB,代码,C/OS-II,开启多任务环境函数叫做,OSStart(),,用户在调用,OSStart(),之前,必须已经建立了一个或更多任务。,OSStart(),最终调用函数,OSStartHighRdy(),

38、运行多任务开启前优先级最高任务。,void,OSStartHighRdy,(void),_OSStartHighRdy();,该函数在,Os_cpu_a.s,文件中实现。,嵌入式系统rteoscosii的移植,第37页,编写,OS_CPU_C.C,软件中止异常服务程序,功效号,介绍,0 x00,任务级任务切换函数,0 x01,运行优先级最高任务,由OSStartHighRdy产生,0 x02,关中止,0 x03,开中止,0 x80,任务切换到系统模式,0 x81,任务切换到用户模式,0 x82,任务代码是,ARM,代码,0 x83,任务代码是,THUMB,代码,关中止和开中止是为了保护临界段代

39、码。这些代码与处理器相关,是需要移植代码。在,ARM,处理器核中关中止和开中止时经过改变,程序状态存放器,CPSR,中对应控制位实现。因为使用了软件中止,程序状态存放器,CPSR,保留到,程序状态保留存放器,SPSR,中,软件中止退出时会将,SPSR,恢复到,CPSR,中,所以程序只要改变程序状态保留存放器,SPSR,中对应控制位就能够了。,嵌入式系统rteoscosii的移植,第38页,编写,OS_CPU_C.C,软件中止异常服务程序,功效号,介绍,0 x00,任务级任务切换函数,0 x01,运行优先级最高任务,由OSStartHighRdy产生,0 x02,关中止,0 x03,开中止,0

40、x80,任务切换到系统模式,0 x81,任务切换到用户模式,0 x82,任务代码是,ARM,代码,0 x83,任务代码是,THUMB,代码,void SWI_Exception(int SWI_Num,int*Regs),.,case,0 x02,:/,关中止,_asm ,MRS R0,SPSR,ORR R0,R0,#NoInt,MSR SPSR_c,R0,OsEnterSum+;,break;,case,0 x03,:/,开中止,if(-OsEnterSum=0),_asm,MRS R0,SPSR,BIC R0,R0,#NoInt,MSR SPSR_c,R0,break;,.,每关闭一次中止

41、中止关闭计数器加,1,每调用一次开中止函数,该计数器减,1,,为,0,时允许打开中止,关闭中止,打开中止,嵌入式系统rteoscosii的移植,第39页,编写,OS_CPU_C.C,软件中止异常服务程序,功效号,介绍,0 x00,任务级任务切换函数,0 x01,运行优先级最高任务,由OSStartHighRdy产生,0 x02,关中止,0 x03,开中止,0 x80,任务切换到系统模式,0 x81,任务切换到用户模式,0 x82,任务代码是,ARM,代码,0 x83,任务代码是,THUMB,代码,它们能够在任何情况下使用。它们改变,程序状态保留存放器,SPSR,对应位段,而程序状态保留存放器

42、会在软件中止退出时复制到,程序状态存放器,CPSR,,任务处理器模式就改变了。,嵌入式系统rteoscosii的移植,第40页,编写,OS_CPU_C.C,软件中止异常服务程序,功效号,介绍,0 x00,任务级任务切换函数,0 x01,运行优先级最高任务,由OSStartHighRdy产生,0 x02,关中止,0 x03,开中止,0 x80,任务切换到系统模式,0 x81,任务切换到用户模式,0 x82,任务代码是,ARM,代码,0 x83,任务代码是,THUMB,代码,void SWI_Exception(int SWI_Num,int*Regs),.,case,0 x80,:/,任务切换到

43、系统模式,_asm,MRS R0,SPSR,BIC R0,R0,#0 x1f,ORR R0,R0,#SYS32Mode,MSR SPSR_c,R0,break;,case,0 x81,:/,任务切换到用户模式,_asm,MRS R0,SPSR,BIC R0,R0,#0 x1f,ORR R0,R0,#USR32Mode,MSR SPSR_c,R0,break;,.,使用内嵌汇编将处理器模式切换到用户模式,使用内嵌汇编将处理器模式切换到系统模式,嵌入式系统rteoscosii的移植,第41页,编写,OS_CPU_C.C,软件中止异常服务程序,功效号,介绍,0 x00,任务级任务切换函数,0 x01

44、运行优先级最高任务,由OSStartHighRdy产生,0 x02,关中止,0 x03,开中止,0 x80,任务切换到系统模式,0 x81,任务切换到用户模式,0 x82,任务代码是,ARM,代码,0 x83,任务代码是,THUMB,代码,任务能够使用,ARM,两种指令集任意一个运行,不过任务建立时默认只是一个指令集。假如任务使用第一条指令与默认指令集不一样,则程序运行错误。所以增加两个函数,TaskIsARM(),和,TaskIsTHUMB(),用于改变任务建立时默认指令集。,它们都有唯一参数:需要改变任务优先级,值得注意是,这两个函数必须在对应任务建立后但还没有运行时调用。,嵌入式系统r

45、teoscosii的移植,第42页,编写,OS_CPU_C.C,软件中止异常服务程序,功效号,介绍,0 x00,任务级任务切换函数,0 x01,运行优先级最高任务,由OSStartHighRdy产生,0 x02,关中止,0 x03,开中止,0 x80,任务切换到系统模式,0 x81,任务切换到用户模式,0 x82,任务代码是,ARM,代码,0 x83,任务代码是,THUMB,代码,.,case,0 x82,:/,任务代码是,ARM,代码,if(Regs0 OSTCBStkPtr1&=,(1 5);,break;,case,0 x83,:/,任务代码是,Thumb,代码,if(Regs0 OST

46、CBStkPtr1|=,(1 5);,break;,.,被设置任务号一定不能大于最低优先级任务,获取指定任务任务控制块地址,修改任务堆栈中,CPSR,值,在任务重新运行时,切换到,ARM,指令方式,修改任务堆栈中,CPSR,值,在任务重新运行时,切换到,Thumb,指令方式,CPSR,:,程序状态存放器,嵌入式系统rteoscosii的移植,第43页,编写,OS_CPU_C.C,软件中止异常服务程序,功效号,介绍,0 x00,任务级任务切换函数,0 x01,运行优先级最高任务,由OSStartHighRdy产生,0 x02,关中止,0 x03,开中止,0 x80,任务切换到系统模式,0 x81

47、任务切换到用户模式,0 x82,任务代码是,ARM,代码,0 x83,任务代码是,THUMB,代码,注意,:,这两个函数必须在对应任务建立后但还没有运行时,调用,。,假如在低优先级任务中创建高优先级任务就十分危险了。此时,处理方法有三种:,(1),高优先级任务使用默认指令集;,(2),改变函数,OSTaskCreateHook(),使任务默认不是处于就绪状态,建立任务后调用函数,OSTaskResume(),来使任务进入就绪状态;,(3),建立任务时禁止任务切换,调用函数,TaskIsARM(),或,TaskIsTHUMB(),后再允许任务切换。,嵌入式系统rteoscosii的移植,第44

48、页,编写,OS_CPU_C.C,在,Os_cpu_c.c,文件中还有许多,Hook,(),函数,,它们在某个特定系统动作时被调用,,,允许执行函数中用户代码,。这些函数默认是空函数,用户依据实际情况添加相关代码。它们分别以下表所表示。,Hook(),函数,函数名,被执行条件,OSInitHookBegin(),在开始执行,OSInit(),函数时被执行,OSInitHookEnd(),在,OSInit(),函数结束时被执行,OSTaskCreateHook(),在任务建立时被调用,OSTaskDelHook(),在任务删除时被调用,OSTaskSwHook(),在进行任务切换时被调用,OSTa

49、skStatHook(),被统计任务调用,每秒执行一次,OSTCBInitHook(),在建立全部TCB后,由OSTCBInit函数调用,OSTimeTickHook(),每个时钟节拍产生后被调用,OSTaskIdleHook(),由空闲任务调用,嵌入式系统rteoscosii的移植,第45页,移植,C/OS-II,编写,OS_CPU_A.ASM,在,OS_CPU_A.ASM,文件中有:,软件中止汇编接口程序,任务切换程序,OS,开启时运行就绪最高优先级任务程序,嵌入式系统rteoscosii的移植,第46页,OS_CPU_A.ASM,C/OS-II,移植要求用户编写,4,个汇编语言函数:,O

50、SStartHighRdy,(),OSCtxSw,(),OSIntCtxSw,(),OSTickISR,(),假如编译器支持插入行汇编代码,就能够将全部与处理器相关代码放到,OS_CPU_C.C,文件中,而无须再有单独汇编语言文件,嵌入式系统rteoscosii的移植,第47页,编写,OS_CPU_A.ASM,在调用软中止之后,处理器切换到,ARM,指令和管理模式下工作。在执行软件中止服务函数之前,要提取中止号和其它入口参数,这些经过软件中止接口程序完成。,软件中止汇编接口,SoftwareInterrupt,LDR SP,StackSvc,STMFD SP!,R0-R3,R12,LR,MOV

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服