- 1、本文档共56页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式系统及应用;第七章中断管理;主要内容;从发展过程来看:
中断(interrupt)最初被用来替换I/O操作的轮询处理方式,以提高I/O处理的效率。
随后,中断又包含了自陷(trap,也称为内部中断或是软件中断)的功能。
后来,中断的概念得到进一步扩大,被定义为导致程序正常执行流程发生改变的事件(不包括程序的分支情况)。可把概念被扩大的中断称为广义中断。;在实际应用中,广义的中断通常被分为中断、自陷和异常(exception)等类别。
中断是由于CPU外部的原因而改变程序执行流程的过程,属于异步事件,又称为硬件中断。自陷和异常则为同步事件;
自陷表示通过处理器所拥有的软件指令、可预期地使处理器正在执行的程序的执行流程发生变化,以执行特定的程序。自陷是显式的事件,需要无条件地执行;
Motorola 68000系列中的Trap指令
ARM中的SWI指令
Intel 80x86???的INT指令??;异常为CPU自动产生的自陷,以处理异常事件。
如被0除、执行非法指令和内存保护故障等。
异常没有对应的处理器指令,当异常事件发生时,处理器也需要无条件地挂起当前运行的程序,执行特定的处理程序。 ;中断的分类 ;可屏蔽中断和不可屏蔽中断 ;硬件中断和软件中断;硬件中断和软件中断;边缘触发中断和电平触发中断;边缘触发中断和电平触发中断;向量中断、直接中断和间接中断;向量中断;向量中断;中断控制器;中断控制器;中断处理的过程 ;中断检测;取指令
;中断响应;中断处理;中断处理;中断处理;非嵌套的中断处理方式;程序;嵌套的中断处理方式;程序;实时内核的中断管理 ;实时内核的中断管理;实时内核的中断管理;实时内核的中断管理;实时内核的中断管理;实时内核的中断管理;用户栈;YourISR:
Save all CPU registers; (1)
Call OSIntEnter() or, increment OSIntNesting directly; (2)
if (OSIntNesting == 1) { (3)
OSTCBCur-OSTCBStkPtr = SP; (4)
}
Clear interrupting device; (5)
Re-enable interrupts (optional) (6)
Execute user code to service ISR; (7)
Call OSIntExit(); (8)
Restore all CPU registers; (9)
Execute a return from interrupt instruction; (10);void OSIntExit (void)
{
OS_ENTER_CRITICAL(); (1)
if ((--OSIntNesting | OSLockNesting) == 0) { (2)
OSIntExitY = OSUnMapTbl[OSRdyGrp]; (3)
OSPrioHighRdy = (INT8U)((OSIntExitY 3) +
OSUnMapTbl[OSRdyTbl[OSIntExitY]]);
if (OSPrioHighRdy != OSPrioCur) {
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
OSCtxSwCtr++;
OSIntCtxSw(); (4)
}
}
OS_EXIT_CRITICAL();
};实时内核的中断管理;用户中断服务程序 ;用户中断服务程序;/*Uses to handle data from dataReceiveISR*/
dsrTask()
{
while(1)
{
wait_for_signal_from_isr();
process_data_of_ISR();
}
}
文档评论(0)