《2022年S.D.Lu的uCOSII入门学习笔记中断函数.pdf》由会员分享,可在线阅读,更多相关《2022年S.D.Lu的uCOSII入门学习笔记中断函数.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、S.D.Lu 的 uC/OS II 入门学习笔记 (8):中断函数本篇的实验将在例3-2 的基础上进行修改,目的是学习在C/OS II 系统下如何编写中断服务函数。实验中使用的是TIM2 的溢出中断。关于STM32 通用定时器的使用,需要另外学习,在此不进行讨论。 只需知道在定时器初始化中,以下两个参数决定了定时器的溢出率就可以了。例 8-1,在例 3-2 的基础上进行修改。步骤 1:在工程中添加相关文件。本例中将用到NVIC 和定时器的相关函数,所以需在工程中添加相关文件。并在 includes.h 中包含其头文件。步骤 2:编写定时器初始化函数。在 bsp.h 文件中增加函数声明。在 bs
2、p.c 文件中编写函数,并在BSP_Init() 函数中调用。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 4 页 - - - - - - - - - - 步骤 3:编写 NVIC 设置函数。在 bsp.h 文件中增加函数声明。在 bsp.c 文件中编写函数,并在BSP_Init() 函数中调用。步骤 4:编写中断服务函数。在 stm32f10 x_it.c 文件中增加定时器中断函数。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - -
3、- - - - - - -第 2 页,共 4 页 - - - - - - - - - - 步骤 5:修改任务代码。将 app.c 文件内容改为如下。屏蔽掉LED1 的控制代码,注意while(1) 中要保留延时函数。 LED2 的控制不使用信号量。编译运行, LED1 和 LED2 不停的闪烁, LED1 频率比 LED2 略低。改变TIM2 的预分频值 (TIM2_Init函数中 ),即可改变 LED1 的闪烁频率。如果之前学习过STM32 的定时器编程,对例8-1 分析后会发现,步骤4 的中断函数和“裸奔”系统的中断只有一点区别,就是在中断函数用户代码的前后分别增加了OSIntEnter(
4、);和 OSIntExit(); 函数。这两个函数的作用是对C/OS II 的中断嵌套进行管理的,即记录中断嵌套了多少层。一般来说, 中断服务函数不应该执行复杂的程序,特别是在实时操作系统中,否则中断过程会占用过多的CPU 时间,就会影响系统的实时性。所以一般在中断函数中只负责发送消息,由相应的任务执行相应的运算等复杂操作。下面的例子简单的展示了这样处理的过程。例 8-2 将中断函数修改,中断函数不控制LED1 ,只负责发送信号量,LED1 由 Task_LED 申请信号量后控制。将 app.c 文件内容改为如下。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 4 页 - - - - - - - - - - 编译运行,和前面的运行结果相同。作者: S.D.Lu 深圳2014-6-16 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 4 页 - - - - - - - - - -