版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关中 开中 向量中断函数的编 附 参考资 uC/OS 1图1ARMOS_STK*OSTaskStkInit(void(*task)(void*pd),voidOS_STK*ptos,INT16U{OS_STK
= =ptos;/*获取堆栈指 *stk=(OS_STK) /*pc*--stk=(OS_STK) /*lr============ /*r0,第一个参数使用R0传 *--stk=(USER_USING_MODE|0x00);/*spsr,允许IRQ,FIQ中 return}int32os_enter_flag=中断,后面的代码处理可能有些罗唆,先跑起来再说,后面再优化。void{if(_OS_ENTER_CRITICAL()>{os_enter_flag=}{os_enter_flag=}} SP!,{R1, R0, R1, R1,#0BNE R0,R0,#(NoInt) CPSR_c,R0 R0, SP!,{R1,PCvoid{if(0=={}} SP!,{R0,LR} R0,CPSR R0,R0,#(NoInt) CPSR_c,R0 SP!,{R0,PC}1=0=#define void{=OSTCBHighRdy->OSTCBStkPtr;OSRunnig=TRUE;} CPSR_c,#(NoInt| R5, R5, ; R6,=OSTCBHighRdy R6, ;获取新任务堆栈指针OSTCBHighRdy->OSTCBStkPtr,存放在R4中 R4,[R6] SPR4 ;16寄存器CPSRR0- LR,[SP,#- CPSR_c,#(NoInt| SP,LDMFDSP!, SPSR_cxsf,LDMFDSP!,{R0-R12,LR,PCswi(0x00)voidOS_TASK_SW(void);swi(0x01)void_OSStartHighRdy(void); SP STMFDSP!,{R0-R3,R12, R1,SP ;R1指向参数位置,因为SWI软中断允许 R3, R3 中断前是否是ThumbLDRNEHR0[LR,#- ER0,R0,R0,[LR,#-否取得arm状态SWIR0,R0,R0,;r0=SWI号,R1指向参数位LDRLOPC,;SWI0x01为第一次任务切换LDREQPC,= LDMFDSP!,{R0-R3,R12,voidOSIntExit{if((--OSIntNesting|OSLockNesting)=={/*RescheduleonlyifallISRscompleted¬locked*/ =OSUnMapTbl[OSRdyGrp];OSPrioHighRdy=(INT8U)((OSIntExitY<<3)+if(OSPrioHighRdy!=OSPrioCur){/*Nocontextswitchifcurrenttaskishighestready*/OSTCBHighRdy=OSTCBPrioTbl[OSPrioHighRdy];/*Keeptrackofthenumberofcontextswitches /*Performinterruptlevelcontext }}
?…?目前堆栈指针的地址为SP’,这个时候如果立即进行任务切换,须知道上次堆栈SP的位置,由于OSIntExit()用C语言编写,无法知道编译器的编译结果,那么也就为了简单处理, R2[SP R12,[SP,#16] R0,CPSR CPSR_c,#(NoInt|SYS32Mode) R1 STMFDSP!{R1- STMFDSP!{R4- CPSR_c,LDMFDSP!{R4- CPSR_c,#(NoInt|SYS32Mode)STMFDSP!{R4- R1 R2,;STMFDSP!,{R2,R3} STMFDSP!,{R3};保存CPSR R1, R1, SP, R4,=OSPrioCur R6,[R5] R6, R6,[R6] R4, R6,
;OSTCBCur<=;获取新任务堆栈指针OSTCBHighRdy->OSTCBStkPtr,存放在R4中 R4,[R6] LR,[SP,#- CPSR_c,#(NoInt| SP,LDMFDSP!,{R4,R5} R4,[R3] SPSR_cxsf,LDMFDSP!,{R0-R12,LR,PC向量中断函数的编$IRQ_LabelHANDLER;; LR,LR,#4 ;计算返回地址STMFDSP!,{R0-R3,R12,LR} R3,SPSR ;保存状态STMFDSP!, R2,=OSIntNesting R1,[R2] R1,R1, R1,MSRCPSR_c,#(0x1f);processitasnarmUserGuidSTMFDSP!,{R0-R3,LR};processitasnarmUserGuid LDMFDSP!,{R0-R3,LR};processitasnarmUserGuidMSRCPSR_c,#(0x92);processitasnarmUserGuid CPSR_c,#(NoInt|R0,R0, R1, R1, R0,R1LDMFDS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中共宁波市镇海区委政法委编外人员招聘1人备考题库(浙江)及参考答案详解1套
- 2027中国信息通信研究院暑期实习生招聘备考题库参考答案详解
- 2026中国科学院科技创新发展中心劳务派遣人员招聘4人备考题库及参考答案详解
- 2026河北省中医院招聘29人备考题库含答案详解
- 北京炼焦化学厂有限公司部分岗位招聘2人备考题库及答案详解参考
- 2026四川达州市渠县公安局招聘辅警10人备考题库及完整答案详解1套
- 2026四川九州电子科技股份有限公司招聘仓储质量工程师1人备考题库及1套完整答案详解
- 安全检查表制定办法
- 2026江苏宿迁经济技术开发区人民检察院招聘司法辅助人员3人备考题库参考答案详解
- 2026广西北海市旅游有限公司招聘1人备考题库及参考答案详解
- 2025学年浙江省绍兴市诸暨市七年级新生分班测试数学卷
- 商务计划书框架化生成模板(版)
- 医护人员职业暴露应急处置与防护培训
- 电商财务制度
- 2026年中国热带农业科学院招聘备考题库完整参考答案详解
- 吉林省吉林市2025-2026学年九年级上学期期末质量检测物理试题(含答案)
- 雨课堂学堂在线学堂云《意在象中-中国古典诗词鉴赏(北京师大)》单元测试考核答案
- 2026中国中式餐饮白皮书-
- 做资料的合同范本
- 山东省滨州市滨城区2023-2024学年六年级下学期期末考试科学试题
- 评估咨询服务合同范本
评论
0/150
提交评论