本帖最后由 gaofeisz_sibet 于 2013-6-7 14:34 编辑
- void USART3_IRQHandler(void)
- {
-
- static INT8U RecvData;//中断处理函数结束,该静态变量的值不会被销毁,非常重要!
- #ifdef OS_TICKS_PER_SEC//如果时钟节拍数定义了,说明要使用UCOSII了。
- OSIntEnter();
- #endif
- if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
- {
-
- /* Read one byte from the receive data register */
- RecvData = USART_ReceiveData(USART3);
- //USART_ClearFlag(USART3,USART_FLAG_TC);
- USART_SendData(USART3, RecvData);
- while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET){}
- OSMboxPost(gp_MBox_USART, (void*)(&RecvData));
- }
- #ifdef OS_TICKS_PER_SEC//如果时钟节拍数定义了,说明要使用UCOSII了。
- OSIntExit();
- #endif
- }
- /*USART处理任务*/
- static void TASK_USART(void *p_arg)
- {
- INT8U err;
- INT8U *msg;
-
- p_arg = p_arg;//防止编译器产生警告
- while(1)
- {
- msg = (INT8U *)OSMboxPend(gp_MBox_USART, 0, &err);
-
- //USART_ClearFlag(USART3,USART_FLAG_TC);
- USART_SendData(USART3, *msg);
- while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET){}
- if (((*msg)&0x80) == 0x00)
- g_ms1 = ((*msg)&0x7f) * 10;
- else
- g_ms2 = ((*msg)&0x7f) * 10;
- }
- }//不加static结果肯定是不可预见的,ISR中的RecvData地址在中断返回后已经被释放了,等收消息的时候值自然就不同了。
|