最近用单片机移植一个hdmi芯片的配置程序,将demo移植到工程中后,debug发现有个静态变量的值被意外改变,偶尔会程序没有根据程序设计意图而变化的值。
最终找到原因,工程默认的栈大小设置的不合适。具体原因是demo大量使用结构体,栈的开销巨大,某个结构体的变量地址和该静态变量地址是冲突的。当栈大小设置成较大的值后,就不会出现地址冲突的情况。
IAR栈大小设置:
我用的单片机是GD32f303VET6,原STACK设置的大小是0x200,修改成0x1400后正常。
最近用单片机移植一个hdmi芯片的配置程序,将demo移植到工程中后,debug发现有个静态变量的值被意外改变,偶尔会程序没有根据程序设计意图而变化的值。
最终找到原因,工程默认的栈大小设置的不合适。具体原因是demo大量使用结构体,栈的开销巨大,某个结构体的变量地址和该静态变量地址是冲突的。当栈大小设置成较大的值后,就不会出现地址冲突的情况。
IAR栈大小设置:
我用的单片机是GD32f303VET6,原STACK设置的大小是0x200,修改成0x1400后正常。