一. 基本问题
 
FreeRTOS有一个宏,portYIELD_WITHIN_API(), 意即在FreeRTOS的API中进行进程切换。
API一般使用taskENTER_CRITICAL()和taskEXIT_CRITICAL()包裹。所以portYIELD_WITHIN_API()主要指的是在CRITICAL区间内进行进程切换。
 
taskENTER_CRITICAL()会关闭中断,而进程切换也是依靠软件触发CPU中断进行,在PowerPC为System Call中断(ARM为SWI指令)。
 
在关闭中断的情况下,CPU如何响应System Call中断呢?
可以看到,portYIELD_WITHIN_API()所执行的进程切换动作与taskENTER_CRITICAL()的注释是矛盾的。
 
二. 问题求解
 
这个问题需要到芯片手册,甚至ISA手册中寻找答案。
 
1.如何关闭中断?
关中断一般是指关闭CPU对中断的响应,这里的中断一般指外部中断。PowerPC中,为MSR寄存器的EE位。
 
 
从中可以看到,EE位为0时,则禁止External Input, Decrementer, and Fixed-Interval Timer interrupts. 即禁止外部中断打断CPU。这些不包括System Call中断。
 
2. 外部中断与System Call
EE是外部中断的使能位,约束不到System Call中断。他们的不同点如下:
a.外部中断是异步的,而SC是同步的中断;
b.外部中断和SC的IVOR偏移量不同;
 
 
 

最新文章

  1. php获取用户 地区 、ip地址
  2. struts2 框架处理流程
  3. Creating Excel File in Oracle Forms
  4. UI特效--Android利用ViewFlipper实现屏幕切换动画效果
  5. Gen_server行为分析与实践
  6. Delphi 调试Dll报错 通过GetLastError显示错误信息。
  7. HDU 3790 最短路径问题 (SPFA)
  8. DIV+CSS 让同一行的图片和文字对齐
  9. orm查询
  10. Linux挂载
  11. 优秀代码摘录片段一:LinkedList中定位index时使用折半思想
  12. ZooKeeper-配置 zoo.cfg
  13. 在Heroku上免费部署ASP.NET Core(使用Docker和CircleCI)
  14. sort_gff.py
  15. java连接MySQL数据库的方式
  16. LuoGu P1083 借教室
  17. suse 奇怪的crash 问题
  18. ORACLE EBS常用表
  19. Java多线程--并行模式与算法
  20. 生成定长随机数-可做3des密钥

热门文章

  1. 树形dp compare E - Cell Phone Network POJ - 3659 B - Strategic game POJ - 1463
  2. java基础篇 之 接口
  3. 手把手教你撸一套Redux(Redux源码解读)
  4. 技术人的福音!教你如何使用Typora+PicGo实现图片自动上传功能
  5. [hdu5416 CRB and Tree]树上路径异或和,dfs
  6. [hdu4292]最大流,拆点
  7. Mysql常用sql语句(21)- regexp 正则表达式查询
  8. 1008 Elevator (20分)
  9. java8 新特性Stream流的应用
  10. Sentinel源码解析二(Slot总览)