FreeRTOS接收队列的时候进入硬件异常
本帖最后由 JezzeGoo 于 2013-3-17 23:36 编辑初学FreeRTOS,在STM32上面移植了,跑LED任务一切正常,今天调试串口,一步一步调试,发现接收队列的时候会进入HardFault_Handler,static void prvCopyDataFromQueue( xQUEUE * const pxQueue, const void *pvBuffer )
{
if( pxQueue->uxQueueType != queueQUEUE_IS_MUTEX )
{
pxQueue->pcReadFrom += pxQueue->uxItemSize;
if( pxQueue->pcReadFrom >= pxQueue->pcTail )
{
pxQueue->pcReadFrom = pxQueue->pcHead;
}
memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->pcReadFrom, ( unsigned ) pxQueue->uxItemSize );
}
}上面的函数是接收队列的时候执行的,问题出在最后一句的memcpy,每次memcpy的时候都会进入硬件异常。后来调试发现pvBuffer有的时候分配到的地址为0,虽然pvBuffer在主程序中已经malloc了。
后来把代码改成如下:static void prvCopyDataFromQueue( xQUEUE * const pxQueue, const signed portCHAR *pvBuffer )
{
if( pxQueue->uxQueueType != queueQUEUE_IS_MUTEX )
{
pxQueue->pcReadFrom += pxQueue->uxItemSize;
if( pxQueue->pcReadFrom >= pxQueue->pcTail )
{
pxQueue->pcReadFrom = pxQueue->pcHead;
}
memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->pcReadFrom, ( unsigned ) pxQueue->uxItemSize );
}
}把pvBuffer的指针类型改为char型,结果程序一切正常,再也不会进硬件错误了,求解释?是FreeRTOS源码有问题么? 遇到和楼主一样的问题,mark 估计是队列指针没初始化造成的!
页:
[1]