我自己创建自己的makefile。 我从程序中得到一些奇怪的结果,所以我只是简单地插入一些简单的变量(测试)。 我想问为什么测试不= 100 ?????? 在什么情况下会发生什么?
这是gdb
中显示的结果74 __CRC_CLK_ENABLE();
(gdb) step
182 test = 100;
(gdb) p test
$1 = 236 '\354'
我在linux上运行,这是我第一次使用命令行并创建自己的makefile。 我正在研究stm32项目。 我的问题是: 1)我有一些变量和init为零,它落入.bss部分,但是一旦我调试它并发现它不是零的情况 当我将它初始化为非零时,它会落入.data部分,并且一旦步进它就会出现非零值 2)一旦我使用gdb启动程序,它不会落入main(),为什么? enter image description here
这是我的链接器文件:
_sidata = .;
.data : /* LMA address is _sidata (in FLASH) */
{
. = ALIGN(4);
_sdata = .; /* data section VMA address */
*(.data*)
. = ALIGN(4);
_edata = .;
} >ram
/* Uninitialized data section (zeroed out by startup code) */
.bss :
{
. = ALIGN(4);
_sbss = .;
*(.bss*)
*(COMMON)
. = ALIGN(4);
_ebss = .;
} >ram AT >flash
答案 0 :(得分:0)
下面:
(gdb) step
182 test = 100;
(gdb) p test
$1 = 236 '\354'
在第182行执行之前,您已停止。 test
的值可能未初始化,恰好是236。
如果要查看值100,则需要执行next
命令,以便在分配后查看test
的值。