JezzeGoo 发表于 2013-3-17 23:35:39

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源码有问题么?

sgweilong 发表于 2013-9-16 13:31:34

遇到和楼主一样的问题,mark

rootxie 发表于 2013-9-16 21:37:15

估计是队列指针没初始化造成的!
页: [1]
查看完整版本: FreeRTOS接收队列的时候进入硬件异常