- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Snippet
嵌入式操作系统ucosII的中断处理过程(上篇)转 2013-04-09 06:51
一. UCOSII的中断过程简介
系统接收到中断请求后,如果CPU处于开中断状态,系统就会中止正在运行的当前任务,而按中断向量的指向去运行中断服
务子程序,当中断服务子程序运行完成后,系统会根据具体情况返回到被中止的任务继续运行,或转向另一个中断优先级别
更高的就绪任务。
由于UCOS
II是可剥夺型的内核,所以中断服务程序结束后,系统会根据实际情况进行一次任务调度,如果有优先级更高的任务,就去
执行优先级更高的任务,而不一定要返回被中断了的任务。
二.UCOSII的中断过程的示意图
三.具体中断过程
1.中断到来,如果被CPU识别,CPU将查中断向量表,根据中断向量表,获得中断服务子程序的入口地址。
2.将CPU寄存器的内容压入当前任务的任务堆栈中(依处理器的而定,也可能压入被压入被中断了的任务堆栈中。
3.通知操作系统将进入中断服务子程序。即:调用OSIntEnter()或OSIntNesting直接
加1。
4 .If (OSIntNesting==1 ) {OSTCBCur-OSTCBStrPtr=SP;}
/
嵌入式操作系统ucosII的中断处理过程(上篇)转_王文罗的空... /wangwenluo2gxy/item/da2da05e701c2bdb...
四.相关代码
与编译器相关的数据类型:
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U;
typedef unsigned int OS_STK; //堆栈入口宽度为16 位
(一) void OSIntEnter (void)的理解
uCOS_II.H中定义:
#ifdef OS_GLOBALS
#define OS_EXT
#else
#define OS_EXT extern
#endif //定义全局宏OS_EXT
#ifndef TRUE
#define TRUE 1
#endif
OS_EXT BOOLEAN OSRunning; //定义外部BOOLEAN类型全局变量,用来指示
//核是否在运行
OS_EXT INT8U OSIntNesting;//定义外部8位无符号整型数全局变量,用来表
//示中断嵌套层数
OS_CORE.C中的OSIntEnter()函数原型:
void OSIntEnter (void)
{
if (OSRunning == TRUE) //如果内核正在运行则进入if
{
if (OSIntNesting 255)
//如果嵌套层数小于255,则可以继//续
{
第2页 共11页 2013/11/13 22:38
嵌入式操作系统ucosII的中断处理过程(上篇)转_王文罗的空... /wangwenluo2gxy/item/da2da05e701c2bd
文档评论(0)