野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4518|回复: 1

PRIMASK 关闭中断后能进入PendSV吗?

[复制链接]
发表于 2015-6-30 10:44:37 | 显示全部楼层 |阅读模式
这是困扰很久的问题了,求大神解答。在任务级调度函数中OS_TASK_SW()函数是在临界段中执行的,即已经通过将PRIMASK写入1关闭所有可屏蔽的中断。
那么在OS_TASK_SW()中触发的PendSV异常还能够得到响应吗?
虽然知道结果是一定可以响应的,否则任务怎么切换呢。可是不明白为什么中断关闭了还能响应PendSV异常呢???
  1. <div>OSCtxSw</div><div>    LDR     R0, =NVIC_INT_CTRL                                  ; Trigger the PendSV exception (causes context switch)</div><div>    LDR     R1, =NVIC_PENDSVSET</div><div>    STR     R1, [R0]</div><div>    BX      LR</div>
复制代码



  1. <div>void  OS_Sched (void)</div><div>{</div><div>#if OS_CRITICAL_METHOD == 3                            /* Allocate storage for CPU status register     */</div><div>    OS_CPU_SR  cpu_sr = 0;</div><div>#endif</div><div>
  2. </div><div>
  3. </div><div>
  4. </div><div>    OS_ENTER_CRITICAL();</div><div>    if (OSIntNesting == 0) {                           /* Schedule only if all ISRs done and ...       */</div><div>        if (OSLockNesting == 0) {                      /* ... scheduler is not locked                  */</div><div>            OS_SchedNew();</div><div>            if (OSPrioHighRdy != OSPrioCur) {          /* No Ctx Sw if current task is highest rdy     */</div><div>                OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];</div><div>#if OS_TASK_PROFILE_EN > 0</div><div>                OSTCBHighRdy->OSTCBCtxSwCtr++;         /* Inc. # of context switches to this task      */</div><div>#endif</div><div>                OSCtxSwCtr++;                          /* Increment context switch counter             */</div><div>                OS_TASK_SW();                          /* Perform a context switch                     */</div><div>            }</div><div>        }</div><div>    }</div><div>    OS_EXIT_CRITICAL();</div><div>}</div>
复制代码



回复

使用道具 举报

 楼主| 发表于 2015-6-30 10:52:44 | 显示全部楼层
另外,CM3权威指南8.4.3提到  PRIMASK用于除能NMI和硬Fault之外的所有异常,它有效地把当前优先级改为0.
这句话该怎么理解呢,除能中断不是在中断服务函数中执行的,那么该把那个异常的优先级改为0呢???
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-12-4 16:25 , Processed in 0.033005 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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