完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
有点区别,但是区别不大,如下:
void USART1_IRQHandler(void) { u8 res; #ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了. OSIntEnter(); #endif if(USART1->SR&(1<<5))//接收到数据 { res=USART1->DR; if((USART_RX_STA&0x8000)==0)//接收未完成 { if(USART_RX_STA&0x4000)//接收到了0x0d { if(res!=0x0a)USART_RX_STA=0;//接收错误,重新开始 else USART_RX_STA|=0x8000;//接收完成了 }else //还没收到0X0D { if(res==0x0d)USART_RX_STA|=0x4000; else { USART_RX_BUF[USART_RX_STA&0X3FFF]=res; USART_RX_STA++; if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收 } } } } #ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了. OSIntExit(); #endif } |
|
|
|
原来如此,,谢谢
|
|
|
|
原子 那他这个进入中断服程序的主程序 是用任务写 还是像平常那样写?
|
|
|
|
像平常一样,在刚进入和退出中断函数的时候加多2个函数即可.
|
|
|
|
是不是每个中断都是这样写?可是我在用定时中断时并没有加进入和退出函数,也可以运行的!
void TIM3_IRQHandler(void) //TIM3中断 { if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否 { TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx更新中断标志 Timer3_Count++; if(Timer3_Count==30) { Timer3_Flag_1=1; } if(Timer3_Count==50) { Timer3_Flag_2=1; } if(Timer3_Count==80) { Timer3_Flag_3=1; } if(Timer3_Count>80) { Timer3_Count=0; } } } 用三个标志位建立任务,比如轮换显示不同的界面,也是可以的。 |
|
|
|
不加也可以用,不过某些情况,可能出问题.最好加上.
|
|
|
|
如果isr里没调用ucosii的函数,而且isr跟各个任务也没联系,那可以不加。
|
|
|
|
只有小组成员才能发言,加入小组>>
809 浏览 0 评论
1161 浏览 1 评论
2535 浏览 5 评论
2871 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2719 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1103浏览 3评论
198浏览 2评论
464浏览 2评论
378浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
459浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 11:39 , Processed in 1.194057 second(s), Total 93, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号