初级会员

- 积分
- 88
- 金钱
- 88
- 注册时间
- 2010-12-14
- 在线时间
- 8 小时
|
5金钱
从定时器3中断发送信号量到一个任务,定时中断还没有再次到来,怎么这个任务还是能获取到信号量,执行几次任务。我用的keil软件仿真。
不知道是不是定时器中断标志清除有问题,望大家给予建议,先谢谢了
/***********************数据产生任务TASK_DATA_GENERATE**********************/
void TsakDataGenerate(void *pdata)
{
u8 err;
pdata=pdata;
while(1)
{
OSSemPend(DATASem,0,&err); //等待DATASem信号量
datagenerater=datagenerater+0x10;
OS_ENTER_CRITICAL(); //关中断
printf("进入TaskDataGenerate任务处理****");
printf("数据输出: 0x%x \n",(u8)datagenerater);
printf("TaskDataGenerate任务处理完毕!**** \n");
printf("\n");
OS_EXIT_CRITICAL(); //开中断
OSTimeDlyHMSM(0,0,0,10);
}
}
/***************定时器3中断服务程序*******************/
void TIM3_IRQHandler(void)
{
OS_ENTER_CRITICAL(); //关中断
//OSIntEnter();
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志
//LED1=!LED1;
}
OS_EXIT_CRITICAL(); //开中断
//OSIntExit();
timer_IT_cnt++; //定时器3--定时中断计数
printf("进入定时器3中断处理:第 %d 次 \n",timer_IT_cnt);
//printf("定时器3中断处理完毕! \n");
printf("\n");
OSSemPost(DATASem); //发送DATASem信号量
}
打印结果:
|
|