|
本帖最后由 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源码有问题么? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|