嵌入式学习小组
直播中

张桂兰

7年用户 1312经验值
私信 关注

如何在UCOSiii下正确的使用中断服务函数?

刚刚开始接触ucosiii.   把ucosiii移植了后,就直接去用原子的ucos程序了 今天刚刚看了任务创建 删除 挂起 恢复. 发现前面几个都是led的任务.
感觉就是变成了很多个裸奔的小伙伴在里面跑...然后想把之前学的都慢慢挂进去练习.然后遇到了问题....
我想在中断服务函数里面做点事. 请问如何正确的使用.
看了原子的usart。c函数里面 的中断服务是这样子的  我的板子是原子的STM32F429
void USART1_IRQHandler(void)                        
{
#if SYSTEM_SUPPORT_OS                 
        OSIntEnter();   
#endif
         ··································需要执行的事件
#if SYSTEM_SUPPORT_OS                 
        OSIntExit();                                                                                          
#endif
}
然后我照猫画虎,只创建了一个任务.
大概目的:原子的第7个实验:定时器中断实验   . 只是这里任务每9秒反转一次tiM2的CR1,  反转CR1 为1时,定时器每1秒就会闪烁一次这个led
(这个中断我用裸奔先写了一个没问题的)
void TIM2_IRQHandler(void)
{
#if SYSTEM_SUPPORT_OS                 
        OSIntEnter();   
#endif
if(TIM2->SR&0X0001)
{
       LED1=!LED1;
}
TIM2->SR&=~(1<<0);
#if SYSTEM_SUPPORT_OS                 
OSIntExit();                                                                                          
#endif
               
}
Ucos下的通用寄存器中断使用,谁能简短说说或者上传一份简单的通用定时器例子看看么.=  -  =
老不进去有点蛋疼.裸奔的倒是进去了.

回帖(5)

王琰

2019-9-27 06:26:41
已解决.
举报

张翔

2019-9-27 06:38:08
中断标志位你有没有清除!
举报

刘丹芹

2019-9-27 06:43:59
应该不是这个问题, 上面是我随便打进去的一个大概例子...        TIM2->SR&=~(1<<0);已经清楚中断标志位了-   -
实际的我是裸奔下写了一个定时器级联的文件.可以同时输出4路PWM脉冲计数输出一个不差.速度暂时测到3MHZ左右还是正常的(比如我现在想要4路分别输出10个,200个,5000个,250个脉冲的程序).
打算分享前我想把这个弄进去ucos里,奈何今天才开始学ucos...  发布了任务.这ucos的中断蛋疼的飞起.原子的ucos例子我还没看到有说整个中断啥用的.
举报

谢芳芳

2019-9-27 07:03:15
有个软定时器中断啥的,我看着没什么卵用=  =...  现在还在看, 希望今天整进去...
举报

更多回帖

发帖
×
20
完善资料,
赚取积分