ucos在M3中的中断嵌套机制

本文详细介绍了M3处理器的中断控制器特性,包括可嵌套中断支持和中断优先级管理。同时,讲解了UCOS如何利用OSIntEnter()和OSIntExit()管理中断嵌套,强调了在OSIntNesting大于0时不应切换任务的原因,防止寄存器数据损坏和任务调度错误。最后总结了中断嵌套的条件以及中断服务程序与任务切换的关系。
摘要由CSDN通过智能技术生成

M3的中断控制器特性

可嵌套中断支持的作用范围很广,覆盖了所有的外部中断和绝大多数系统异常。外在表现是,这些异常都可以被赋予不同的优先级。当前优先级被存储在xPSR的专用字段中。当一个异常发生时,硬件会自动比较该异常的优先级是否比当前的异常优先级更高。如果发现来了更高优先级的异常,处理器就会中断当前的中断服务例程(或者是普通程序),而服务新来的异常——即立即抢占。
在CM3内核以及NVIC的深处,就已内建了对中断嵌套的全力支持,根本无需使用汇编去写封皮代码(wrapper code)。事实上,我们要做的就只是为每个中断适当地建立优先级,不用再操心别的。表现在:

第一、 NVIC和CM3处理器会根据优先级的设置来控制抢占与嵌套行为。因此,在某个异常正在响应时,所有优先级不高于它的异常都不能抢占之,而且它自己也不能抢占自己。

第二、 有了自动入栈和出栈,就不用担心在中断发生嵌套时,会使寄存器的数据损毁,从而可以放心地执行服务例程。因为所有服务例程都只使用主堆栈,因此对于中断嵌套最关键的就是计算主堆栈的容量。每发生一次中断嵌套至少需要八个字,且何时嵌套,嵌套多少级不可预知。

另一方面,是相同的异常是不允许重入的。因为每个异常都有自己的优先级,并且在异常处理期间,同级或低优先级的异常是要阻塞的。因此对于同一个异常,只有在上次实例的服务例程执行完毕后,方可继续响应新的请求。

ucos如何管理中断嵌套

ucos对于中断嵌套,提供了两个函数OSIntEnter ()和OSIntExit ()
2.1 OSIntEnter ()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值