伊春网站建设,久久建筑网 围栏工程专项施工方案,如何更好的建设和维护网站,东莞网站快速排名优化在调试串口任务中增加如下代码#xff0c;发现可以用keil进行仿真#xff0c;但是烧录程序后#xff0c;调试串口没有打印#xff0c;状态灯也不闪烁#xff0c;单片机完全起不来 博主就纳了闷了#xff0c;究竟是什么原因#xff0c;这段代码可是公司永流传的老代码了发现可以用keil进行仿真但是烧录程序后调试串口没有打印状态灯也不闪烁单片机完全起不来 博主就纳了闷了究竟是什么原因这段代码可是公司永流传的老代码了我移植过来的可不敢出现问题 初步定位是该任务的运行空间少了立马查看代码
xTaskCreate( Debug_Uart_Task, (const char*)UART, 64, ( void * ) NULL, tskUART_PRIORITY, ( TaskHandle_t * ) NULL );由原函数可知给的堆栈空间为64 * 2 128个字节
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,const char * const pcName,const uint16_t usStackDepth,void * const pvParameters,UBaseType_t uxPriority,TaskHandle_t * const pxCreatedTask ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */{
才给了区区128个字节这有点少了毕竟我增加了很多功能于是我从64增加到120。烧录打印板卡单片机还是起不来。既然起不来那就改回去减少变量。 死去的调试记忆在攻击我
再次怀疑为FreeRTOS整个堆空间少了查看代码 尝试加大FreeRTOS整个堆空间增加0x300更改后如下
#define configTOTAL_HEAP_SIZE ((size_t)(19*512 0x468)) //系统所有总的堆大小
整个单片机的存储空间是固定的增加了FreeRTOS的堆空间就要同步减少单片机的栈空间 更改后如下图 再次烧录后单片机可以正常启动。 你以为到这完了调试过程中总是会出现各种状况。。。
单片机在运行过程中使用串口指令调试会使得程序进入错误中断HardFault_Handler单片机挂掉当然这种必现的bug还算比较好找原因的
在仿真调试的时候初步认为程序没有问题不太可能导致这样的情况发生毕竟我在别的项目用这套代码运行的好好的
对比我定位是串口任务运行空间过少导致的毕竟我这才给了64
xTaskCreate( Debug_Uart_Task, (const char*)UART, 64, ( void * ) NULL, tskUART_PRIORITY, ( TaskHandle_t * ) NULL );加大了运行空间后程序正常运行。 如此调试告一段落