定时器回调函数的实现,在文件RTX_Conf_CM.c:/*--------------------------- os_tmr_call -----------------------------------*/
#include "bsp.h"
extern OS_SEM semaphore;
void os_tmr_call (U16 info) {
/* This function is called when the user timer has expired. Parameter */
/* 'info' holds the value, defined when the timer was created. */
/* HERE: include optional user code to be executed on timeout. */
/* 定时器回调函数中仅支持isr_开头的系统函数,os_开头的不支持,此回调函数是在
滴答定时器中断中执行的。
*/
switch(info)
{
case 1: /* 参数为1 */
isr_sem_send (&semaphore);
break;
case 2: /* 参数为2 */
bsp_LedToggle(1);
break;
}
}
17.3.2 STM32F407开发板实验配套例子: V4-416_RTX实验_定时器组 实验目的: 1. 学习RTX的定时器组。 2. RTX的定时器仅支持单次,不支持周期性执行,如果需要周期执行,需要重复创建。 3. 定时器回调函数os_tmr_call中仅支持isr_开头的系统函数,os_开头的不支持,此回调函数是在滴答定时器中断中执行的。 4. 回调函数os_tmr_call在文件RTX_Conf_CM.c文件中。 实验内容: 1.K1按键按下,串口打印。 2.K2键按下,创建单次定时器,10个系统时钟节拍后在定时器回调函数中给任务AppTaskMsgPro发信号量同步信号。 3.K3键按下,创建单次定时器,10个系统时钟节拍后在定时器回调函数翻转LED1。 4.各个任务实现的功能如下: AppTaskUserIF任务 :按键消息处理。 AppTaskLED任务 :LED闪烁。 AppTaskMsgPro任务 :消息处理,等待RTX定时器发来的信号量同步信号。 AppTaskStart任务 :启动任务,也是最高优先级任务,这里实现按键扫描。 RTX配置: RTX配置向导详情如下: Task Configuration Number of concurrent running tasks 允许创建4个任务,实际创建了如下四个任务: AppTaskUserIF任务 :按键消息处理。 AppTaskLED任务 :LED闪烁。 AppTaskMsgPro任务 :消息处理,等待RTX定时器发来的信号量同步信号。 AppTaskStart任务 :启动任务,也是最高优先级任务,这里实现按键扫描。 Number of tasks with user-provided stack 创建的4个任务都是采用自定义堆栈方式。 Number of user timers 范围1 – 250,表示用户定时器个数。 这里创建了1个用户定时器。 RTX任务调试信息:
|