ARM9プロセッサの基本的なCプログラムでグローバル変数を定義するときに問題が発生します。私はEABIGNUコンパイラを使用しており、12KBのエルフから生成されたバイナリは4GBです!問題はスキャッターファイルにあると思いますが、頭を動かすのに問題があります。
256KBのROM(ベースアドレス0xFFFF0000)と32KBのRAM(ベース0x01000000)があります
SECTIONS {
. = 0xFFFF0000;
.text : {
* (vectors);
* (.text);
}
.rodata : { *(.rodata) }
. = 0x01000000;
sbss = .;
.data : { *(.data) }
.bss : { *(.bss) }
ebss = .;
bssSize = ebss - sbss;
}
そして私のプログラムは次のとおりです。
int a=10;
int main() {
int b=5;
b = (a>b)? a : b;
return b;
};
をローカル変数として宣言すると、つまり.dataセクションがない場合、すべてが機能します。大丈夫。どんな助けでも大歓迎です。
-2011年3月16日-
誰かがこれを手伝ってくれますか、私はどこにも行かず、マニュアル、フォーラムなどを読んだことがあります...
私のブート、コンパイルコマンド、およびobjcopyコマンドは以下に貼り付けられています
.section "vectors" reset: b start undef: b undef swi: b swi pabt: b pabt dabt: b dabt nop irq: b irq fiq: b fiq
.text
start:
ldr sp, =0x01006000
bl main
stop: b stop
arm-none-eabi-gcc -mcpu = arm926ej-s -Wall -nostartfiles -Wall main.c boot.s -o main.elf -T \ scatter_file
arm-none-eabi-objcopy ./main.elf --output- target = binary ./main.bin
arm-none-eabi-objdump ./main.elf --disassemble-all> ./main.dis