实时操作系统μC/OS-Ⅱ

第3章 μC/OS-Ⅱ的中断和时钟
3.1 μC/OS-Ⅱ的中断过程
☆μC/OS-Ⅱ的中断过程:系统接收到中断请求后,如果这时CPU处于中断允许状态(即中断开放),系统会中止正在运行的当前任务,而按照中断向量的指向转而去运行中断服务子程序;当中断服务子程序的运行结束后,系统将会根据情况返回到被中止的任务继续运行,或者转向运行另一个具有更高优先级别的就绪任务。
☆可剥夺的μC/OS-Ⅱ内核,中断服务子程序运行结束后,系统根据情况进行任务调度,去运行优先级别最高的就绪任务,并不一定是被中断的任务。
☆幢系统允许中断嵌套,即高优先级别的中断请求可中断低优先级别的中断服务程序的运行。全局变量OSIntNeating记录中断嵌套的层数。
☆μC/OS-Ⅱ响应中断的过程示意图:

☆中断服务函数OSIntEnter()(把全局变量OSIntNesting加1,用以记录中断嵌套的层数),在中断服务程序保护被中断任务的断点数据之后,运行用户中断服务代码之前来调用:
void OSIntEnter(void)
{
if(OSRunning == TRUE)
{
if(OSIntNesting < 255)
{
OSIntNesting++; //中断嵌套层数计数器加1
}
}
}
☆退出中断服务函数OSIntExit()
流程图:

在中断嵌套层数计数器为0,调度器未被锁定且从任务就绪表中查找到的最高级就绪任务又不是被中断的任务的条件下将要进行任务切换,否则就返回被中断的服务子程序。
源代码:
void OSIntExit(void)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif

if(OSRunning == TRUE)
{
OS_ENTER_CRITICAL();
if(OSIntNesting > 0)
{
OSIntNesting--; //中断嵌套层数计数器减1
}
if((OSIntNe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值