当前位置: 首页 > 工具软件 > μC OS-II > 使用案例 >

基于ARM Cortex-M0的μC/OS-II中断服务函数

梅逸清
2023-12-01

前言:

本期介绍在将μC/OS-II移植到ARM Cortex-M0后,已创建多个任务后,怎么编写单片机外设中断服务函数。

OS调配各个任务独自运行,各任务有各自的中断服务。因此,需要将各任务的中断行为报告OS。OS需要记录下各任务进入和退出中断的行为,这样才能全面且有效地调配各个任务运行。因此带OS和不带OS的软件系统的外设中断服务函数是不一样的。

下面以外设通用计数器GPTimer0的中断服务函数为例,介绍如何编写中断服务函数。

1.  GPTimer0中断服务函数源码及说明(见源码注释)

typedef unsigned int   OS_CPU_SR;  #define  OS_ENTER_CRITICAL()  {cpu_sr = OS_CPU_SR_Save();}#define  OS_EXIT_CRITICAL()   {OS_CPU_SR_Restore(cpu_sr);}//--------------GPTimer0 Interrupt Handler---------------void GPTM0_IRQHandler(void) {  OS_CPU_SR cpu_sr;      // 定义CPU状态寄存器(PSR = 32bit)变量  //  OS_ENTER_CRITICAL();    // 读取CPU状态寄存器,缓存到cpu_sr  OSIntEnter();           // 告诉OS中断嵌套数加1  OS_EXIT_CRITICAL();    // 将cpu_sr更新到CPU状态寄存器  //  pGPTM0Ctrl->GPTM_ISC = pGPTM0Ctrl->GPTM_RIS; // 清除GPTimer中断状态  printf("GPTimer0 Interrupt occurred\r\n");   // GPTimer中断服务内容  //  OSIntExit();          // 中断嵌套数减1.OS根据中断优先级重新调配中断服务}

2.  小结

从以上源码及其说明可以看出,编写带OS的软件系统的中断服务函数,必须严格使用OS定义的与中断相关的函数且按固定步骤进行。

 类似资料: