搜索
bottom↓
回复: 3

请问ucosii在stm32上移植的一个问题

[复制链接]

出0入0汤圆

发表于 2011-8-4 16:14:33 | 显示全部楼层 |阅读模式
下面的是网上广泛传播的移植代码:
OS_CPU_PendSVHandler             ;xPSR, PC, LR, R12, R0-R3已自动保存
    CPSID   I                    ;任务切换期间需要关中断
     
    MRS     R0, PSP              ;R0 = PSP
    ;如果PSP == 0,跳到OS_CPU_PendSVHandler_nosave执行 #1
    CBZ     R0, OS_CPU_PendSVHandler_nosave
    ;保存R4-R11到任务堆栈
    SUBS    R0, R0, #0x20        ;R0 -= 0x20                          
    STM     R0, {R4-R11}         ;保存R4-R11到任务堆栈
    ;OSTCBCur->OSTCBStkPtr = SP;
    LDR     R1, =OSTCBCur        ;R1 = &OSTCBCur
    LDR     R1, [R1]             ;R1 = *R1 (R1 = OSTCBCur)
    STR     R0, [R1]             ;*R1 = R0 (*OSTCBCur = SP) #2                       
OS_CPU_PendSVHandler_nosave
    ;调用OSTaskSwHook()
    PUSH    {R14}                ;保存R14,因为后面要调用函数            
    LDR     R0, =OSTaskSwHook    ;R0 = &OSTaskSwHook  
    BLX     R0                   ;调用OSTaskSwHook()
    POP     {R14}                ;恢复R14
    ;OSPrioCur = OSPrioHighRdy;
    LDR     R0, =OSPrioCur       ;R0 = &OSPrioCur
    LDR     R1, =OSPrioHighRdy   ;R1 = &OSPrioHighRdy
    LDRB    R2, [R1]             ;R2 = *R1 (R2 = OSPrioHighRdy)
    STRB    R2, [R0]             ;*R0 = R2 (OSPrioCur = OSPrioHighRdy)
    ;OSTCBCur = OSTCBHighRdy;
    LDR     R0, =OSTCBCur        ;R0 = &OSTCBCur      
    LDR     R1, =OSTCBHighRdy    ;R1 = &OSTCBHighRdy
    LDR     R2, [R1]             ;R2 = *R1 (R2 = OSTCBHighRdy)
    STR     R2, [R0]             ;*R0 = R2 (OSTCBCur = OSTCBHighRdy)
    LDR     R0, [R2]             ;R0 = *R2 (R0 = OSTCBHighRdy), 此时R0是新任务的SP
                                 ;SP = OSTCBHighRdy->OSTCBStkPtr #3   
    LDM     R0, {R4-R11}         ;从任务堆栈SP恢复R4-R11        
    ADDS    R0, R0, #0x20        ;R0 += 0x20
    MSR     PSP, R0              ;PSP = R0,用新任务的SP加载PSP  
    ORR     LR, LR, #0x04        ;确保LR位2为1,返回后使用进程堆栈 #4      
    CPSIE   I                    ;开中断
    BX      LR                   ;中断返回         


疑问在这里
    ORR     LR, LR, #0x04        ;确保LR位2为1,返回后使用进程堆栈 #4      
    CPSIE   I                    ;开中断
    BX      LR                   ;中断返回  
在这 CPSIE   I语句之后,会不会发生新的中断?导致BX LR不能执行,不能返回线程?

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。

出0入0汤圆

发表于 2011-8-4 16:51:13 | 显示全部楼层
去官网下载吧。

出0入0汤圆

 楼主| 发表于 2011-8-5 08:26:03 | 显示全部楼层
谁能给解释一下啊

出0入0汤圆

发表于 2011-8-5 08:31:16 | 显示全部楼层
很久不用了,不过STM32的中断是可以嵌套的,并且所有工作由硬件完成,所以中断前后运行环境是一样的,不知道解释的对不对
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-27 07:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表