2017-01-17 4 views
-1

自分でメークファイルを作成します。 私はプログラムから奇妙な結果を得るので、簡単な変数(テスト)を挿入するだけです。 私はなぜテストではない= 100 ?????? それはどのような状況で起こりますか?.bssで変数を正しく設定してinitにする方法。値= 0

これはgdbの

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

で結果ショーです私は、Linux上で実行しています。これは、コマンドラインを使用し、私自身のMakefileを作るのは初めてです。 私はstm32プロジェクトに取り組んでいます。 私の問題は次のとおりです: 1)私はいくつかの変数とinitを0にしていますが、それは.bssセクションに入りますが、一度デバッグしてゼロにならないことがわかります そして、 .dataセクションに入り、一度それをステップすると0以外の値になる。 2)gdbを使用してプログラムを起動すると、main()に陥るのはなぜですか?ここで

_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

:実行した182行前に停止している

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

enter image description here

が、これが私のリンカファイルです。 testの値は、おそらく初期化され、それが割り当てられている後、ちょうどあなたが値100を見たい場合は、あなたがtestの値を見ているようnextコマンドを実行する必要がある236

であることを起こります。

関連する問題