uCOS-II中断服务程序代码分析_第1页
uCOS-II中断服务程序代码分析_第2页
uCOS-II中断服务程序代码分析_第3页
uCOS-II中断服务程序代码分析_第4页
uCOS-II中断服务程序代码分析_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、uc/os-ii 中断服务程序代码分析在讲解 uc/os-ii 中断处理机制之前 , 大家要了解 uc/os-ii 中对于中断函数的处理机制。我们在查阅嵌入式实时操作系统cos -ii(第二版 )书中 p103页时,可以查看到在 uc/os-ii 中的中断处理机制如下描述: void isp_function( void ) 保存全部的 cpu 寄存器; 调用 osintenter()或 osintnesting+; if(osintnesting = 1 ) ostcbcur-ostcbstkptr= sp ; 清中断源 ; 重新打开中断 ; 执行用户代码做中断服务; 调用 osintexi

2、t(); 恢复所有 cpu 寄存器 ; 执行中断返回指令 ; 在 uc/os-ii 中, 对于中断中的任务切换 , 是用两个函数实现的1、osintenter() 2、osintexit() 在 osintenter()中将用于记录中断嵌套的计数器osintnesting 自增 1; 其函数源代码如下 : void osintenter (void) if (osrunning = os_true) if (osintnesting 0) osintnesting-; if (osintnesting = 0) if (oslocknesting = 0) os_schednew(); if

3、(ospriohighrdy != ospriocur) ostcbhighrdy = ostcbpriotblospriohighrdy; #if os_task_profile_en 0 ostcbhighrdy-ostcbctxswctr+; #endif osctxswctr+; osintctxsw(); os_exit_critical(); 这部分代码的意思 , 大家自己想一下了 , 这里我主要讲解一下在os_cpu_a.a 文件中的 osintctxsw() 函数了。大家记住一点 : 在 osintexit()函数调用时 , 我们已经将当前任务的所用到的pc ,lr,r0-r12,cpsr压入到被中断了的任务堆栈中了, 所以在这里就不再需要重复压栈的操作了。详细代码如下 : osintctxsw ldr r0, =ost askswhook mov lr, pc bx r0 ldr r0, =ospriocur ldr r1, =ospriohighrdy ldrb r2, r1 strb r2, r0 ldr r0, =ostcbcur ldr r1, =ostcbhighrdy ldr r2, r1 str r2, r0 ldr sp, r2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论