新手入门
- 积分
- 16
- 金钱
- 16
- 注册时间
- 2019-7-12
- 在线时间
- 4 小时
|
本帖最后由 DengHongun 于 2019-12-9 13:58 编辑
实验简述:USART1通过接收中断接收电脑发过来的单个字符,并在中断中调用“”xQueueSendFromISR“”发送到Message_Queue队列中去。TIM2定时500ms更新中断,在中断中读取Message_Queue中的消息,如果队列Message_Queue中有消息,就读出来并通过USART1发送到电脑显示屏上。
Debug中出现的问题:每次Debug都会产生UsageFault导致的HardFault。经反复验证,是TIM2中断中定义了一个char message_receive变量,此变量用来存放从队列Message_Queue中读到的信息这里有问题。(这里用malloc给变量message_receive分配一块内存去存放读到的信息,用完后再释放掉就可以了)虽然问题点和解决方法已经找到,单产生这个问题的原因尚不理解,望大神能指点一二。代码如下:
void TIM2_IRQHandler(void)
{
char message_receive;
BaseType_t HigherPriorityTaskWoken = pdFALSE;
if( xQueueReceiveFromISR(Message_Queue,&message_receive,&HigherPriorityTaskWoken) )
{
printf("500ms中断扫描到串口有接收到的信息,信息如下:\t\t\r\r\n\n");
printf("信息是: %c\t\t\r\r\n\n",message_receive);
}
portYIELD_FROM_ISR(HigherPriorityTaskWoken);
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}
|
|