中断函数如下:
osThreadId tid_cyclemissionTask; //周期任务函数IDOS_EXTERN osSemaphoreId signalCycleMission; //周期任务的信号灯ID定义
osSemaphoreDef(signalCycleMission); // 定时器周期信号量定义
osThreadDef(cyclemissionTask, osPriorityNormal, 1, 0); //信号量定义
1s的定时器中断:
void TIM2_IRQHandler(void) //定时器2中断服务程序函数{
if (TIM_GetITStatus(TIM2, TIM_IT_Update)) //如果TIM2中断标志位触发,也就是超时溢出
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //首先清除标志位
osSemaphoreRelease(signalCycleMission);//发送signalCycleMission信号量
}
}
任务函数如下:
void cyclemissionTask(void const *argument)
{
signalCycleMission=osSemaphoreCreate(osSemaphore(signalCycleMission), 1);
TIMX_Init(9,7199); //T=(arr+1)*(psc+1)/系统时钟频率 50MS
}
创建信号量任务函数如下:
void cyclemissionTaskCreate(void)
{
tid_cyclemissionTask = osThreadCreate(osThread(cyclemissionTask), NULL);
}
以上都是为了发生中断后发送信号量
一下都是接受信号量后发生动作
for(;;)
{
res = osSemaphoreWait(signalCycleMission,osWaitForever);
if(res == osOK)
{
cunt++;
}
}
问题:1s中断一次,为什么cunt不增加 |