项目场景:
雅特力AT32F403A芯片移植FreeRTOS+Emwin
问题描述
雅特力AT32F403A芯片,在移植FreeRTOS+Emwin的时候莫名奇妙进入HardFault Handler,表现出来的现象就是程序刚烧录进去的时候都能正常工作,但是关机放置一个晚上后,第二天开机就莫名奇妙进入HardFault Handler。
原因分析:
开始以为是内存不足雅特力AT32F403A芯片的SRAM加大到96K,
Emwin开了50K:
#define GUI_NUMBYTES 50*1024,
FreeRTOS开了10K
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 10 * 1024 ) )
后来把雅特力AT32F403A芯片的SRAM加大到224K,
Emwin开了150K:
#define GUI_NUMBYTES 150*1024,
FreeRTOS开了30K
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 30 * 1024 ) )
反得试了更种内存的修改问题依然没有解决。
解决方案:
在无数次测试改进后发现雅特力AT32F403A芯片的FLASH总是有问题,后来J-Link Commander仿真看到PC飞到天上去了。
后来没法各种尝试,最后发现Artery ISP Multi-Port Programmer可以读取存储器CRC,抱着试一下的态度读取了存储器CRC,惊奇的发现刚烧入程序的时候存储器CRC是正常的,在关机放置一段时间后存储器CRC居然变了?这怎么回事?我程序里又没有FLASH擦除,后来用官方测试的固件1024_0x55.bin烧录到芯片,关机放置一个小时时间后存储器CRC居然又变了。所以雅特力AT32F403A芯片FreeRTOS+Emwin进入HardFault Handler的原因居然是内部FLASH出现突变,导致程序错误进入HardFault Handler