第一节中提供的ISR例程中包含了了两个内核函数调用–OSIntEnter()和OSIntExit(),在不受内核监控的ISR中,不需要这两个函数。因此,该类型的ISR格式如下所示。应该指出的是,保存CPU寄存器的方法不一定相同,因为它可能不需要保存所有涉及上下文切换的寄存器。此外,开发不受内核监控的ISR的开发人员需牢记,前面的ISR代码中可以添加代码来重新启用中断,以实现中断嵌套,然而,在不受内核监控的ISR中,这种处理方式是有问题的。
NonKernelAwareISR:
Save CPU registers;
App_ISR();
Restore CPU registers;
Return
在μC/OS-II和μC/OS-III观察到的中断例程的不同方式,使得写这些代码的工作变得有挑战性。然而,根据上面的信息和前一篇文章的内容,总结出实现ISR开发的两条基本规则:
应用开发人员需基于不同的中断控制器,实现中断相关的代码,参考Micriμm的文档和示例项目来确定适用于用户平台的 “典型”的ISR。
如果ISR程序不使用内核服务,不会被使用内核服务的程序中断,可以使用不受内核监控的方式实现ISR,减少系统开销。
基于这些规则,你可以充分利用嵌入式微控制器的功能,使用任务和中断编写可靠的应用程序。更多信息可以参考μC/OS-II和μC/OS-III书及在线文档。