freertos死在了vListInsert的问题,求大神
各位大神,请教一下xSemaphoreGiveFromISR中断释放的问题如下1.xSemaphoreGiveFromISR在UART接收中断中释放,并加上portEND_SWITCHING_ISR切换,在工作一段时间后,就死在了vListInsert 函数中的for循环里了,再也出不来
2.中断组是 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);,
3.任务堆栈空间1024字节,这个是读通信数据函数,收到多少字节发送多少字节
static void commPollTask(void * pvParameters)
{
int16u_t len;
int8u_t buffer;
SERIAL_Init(&serial1,USART1,200,9600);
while(1){
len = SERIAL_ReadDat(&serial1,buffer,100);
if(len){
SERIAL_SendDat(&serial1,buffer,len);
}
}
}
4.UART1中断配置如下
/* Enable the USART Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 7;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
4.中断函数如下
void serialRecvISR(SERIAL *pDev)
{
static portBASE_TYPE xSerialHigherPriorityTaskWoken = pdFALSE;//pdFALSE;
if(USART_GetITStatus(pDev->pUSART, USART_IT_RXNE) != RESET){
while(pDev->pUSART->SR & USART_FLAG_RXNE){
//进入临界
portENTER_CRITICAL();
pDev->buffer = pDev->pUSART->DR & 0x01FF;
pDev->saveIndex++;
if(pDev->saveIndex >= SERIAL_BUFF_SIZE){
pDev->saveIndex = 0;
}
if(pDev->saveIndex == pDev->readIndex){
pDev->readIndex++;
if(pDev->readIndex >= SERIAL_BUFF_SIZE){
pDev->readIndex = 0;
}
}
//退出临界
portEXIT_CRITICAL();
}
USART_ClearITPendingBit(pDev->pUSART, USART_IT_RXNE);
//USART_ClearITPendingBit(pDev->pUSART, USART_IT_TC);
//发送信号量通知读取
xSemaphoreGiveFromISR(pDev->xSemaISR,&xSerialHigherPriorityTaskWoken);
portEND_SWITCHING_ISR(xSerialHigherPriorityTaskWoken);// 手动切换任务(用在中断环境)
}
if(USART_GetFlagStatus(pDev->pUSART,USART_FLAG_ORE)!= RESET){
USART_ClearFlag(pDev->pUSART,USART_FLAG_ORE); //读SR
USART_ReceiveData(pDev->pUSART);
}
} 补充一下,SERIAL_ReadDat 函数里调用来等待中断释放信号的
if(xSemaphoreTake(pDev->xSemaISR, pDev->frameTimeOut ) != pdTRUE){
pDev->rxStatus = SERIAL_IDLE;
return 0;
} 没发现什么问题,帮顶。
回 eric2013 的帖子
eric2013:没发现什么问题,帮顶。 (2017-04-13 12:05) images/back.gif硬汉哥你都不知道原因么, 结帖,刚学使用FREERTOS,使用的是STEMWIN的例程,NND,中断配置问题,改了中断管理后,没有问题了 原来如此,串口中断优先级高了,不受FreeRTOS中断优先级管理了。 遇到同样问题了死在该函数内部,但原因没找到。 我也遇到同样的问题。开机运行的时间到死机,时间不确定。有时候一直就没事,有时候就卡在这个函数这里了。 我也遇到这样的问题,但是死机不是每次都有,偶尔会发生。死机后也是停在了这个函数这里。
页:
[1]