初始值为零的变量,或者没有初始值的变量,按道理应该会被分配到bss段,也就是ZI-data,但是我发现在ARM编译器5和编译器6里的现象不一样。定义一个全局变量
int test_val;
不给初始值,在ARM编译器6里,查看map文件,显示test_val在bss段,符合常规的理解
__stdout 0x20000000 Data 4 stdout.o(.data)
COM_RX_PORT 0x20000004 Data 8 stm32_eval.o(.data.COM_RX_PORT)
COM_TX_PORT 0x2000000c Data 8 stm32_eval.o(.data.COM_TX_PORT)
COM_USART 0x20000014 Data 8 stm32_eval.o(.data.COM_USART)
USART_InitStructure 0x20000020 Data 16 main.o(.bss.USART_InitStructure)
test_val 0x20000030 Data 4 main.o(.bss.test_val)
__initial_sp 0x20000438 Data 0 startup_stm32f10x_hd_vl.o(STACK)
而使用ARM编译器5的话,test_val却被分配到了data段
test_val 0x20000000 Data 4 main.o(.data)
GPIO_PORT 0x20000018 Data 16 stm32_eval.o(.data)
BUTTON_PORT 0x20000028 Data 32 stm32_eval.o(.data)
COM_USART 0x20000048 Data 8 stm32_eval.o(.data)
COM_TX_PORT 0x20000050 Data 8 stm32_eval.o(.data)
COM_RX_PORT 0x20000058 Data 8 stm32_eval.o(.data)
__stdout 0x20000060 Data 4 stdout.o(.data)
USART_InitStructure 0x20000064 Data 16 main.o(.bss)
__initial_sp 0x20000478 Data 0 startup_stm32f10x_hd_vl.o(STACK)
我的编译器5版本是5.06 update 7 build 960,编译器6版本是6.15,有没有大佬来解释一下,这个算是编译器5的bug吗?
|