2017-01-17 1 views
-1

Я сам создаю свой собственный файл. Я получаю какой-то странный результат от программы, и поэтому просто вставляю в нее какую-то легкую переменную (тест). Я хотел бы спросить, почему тест не = 100 ?????? При каких обстоятельствах это произойдет?Как правильно установить переменную в .bss и сделать ее init. value = 0

это результат показать в БГД

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

Здесь:

(gdb) step 
182 test = 100; 
(gdb) p test 
$1 = 236 '\354' 

вы остановили до того линии 182 выполнил. Значение test вероятно инициализирована, а просто бывает 236.

Если вы хотите, чтобы увидеть значение 100, необходимо выполнить команду next так что вы смотрите на значения testпосле он был назначен ,

Смежные вопросы