【问题现象】
系统启动到初始化BOOT任务CORE STACK过程中打印堆栈地址时发生BUSFAULT。
【定位过程】
fa_vxnprintf函数打印指针时访问字符串数组charset取16进制数字时指针为0x004b5453("STK"),非stm32有效RAM或ROM地址。在 CORE_StackInit 函数中设置BOOT STACK Object Magic后ucharset全局指针值发变为 0x004b5453,但并非堆栈溢出,而是ucharset全局指针地址与BOOT STACK Object地址重叠,在初始化BOOT STACK时该指针被覆盖。
【问题原因】
1.ucharset 指针声明为 const char * ucharset 即 ucharset pointer to const char, 编译后 ucharset 为一个RAM变量,该指针指向16进制转化表,不可改变改指针的值,应当声明为 const char * const ucharset。
2.连接脚本中对RO DATA, RW DATA缺少描述导致段重叠。
【解决方案】