FreeRTOS系统中使用ADC-DMA模式,在DMA中断中发送信号量,结果程序进入一次中断后不再进入中断。
检查ADC及DMA寄存器:在KEIL中把ADC1->CR等寄存器添加到watch窗口,注意添加DMA寄存器时,基地址稍稍有些不同,LISR的基地址是DMA->LISR,DMA_SxCR等寄存器的基地址为 DMA2_Stream0->CR,具体到某个数据流。检查后确认配置没有问题。
断点调试发现程序卡死在:configASSERT( pxQueue );查看具体信号量的句柄,发现没有被赋值,分析流程发现ADC及DMA的使能是在信号量句柄使能之前,所以产生了卡死的BUG,在中断中添加:
if(voltagecplt!=NULL)
{
}
BUG解决。
另一种情况:引用