Gcc tabanlı bir çıplak metal mcu projesi oluştururken, başlatma sırasında .data ve .bss bölümlerinin başlatılmasına dikkat etmeniz gerekir..data bölümünün init verilerini nereden alması gerektiğini nereden öğrenebilirim? (gcc linker)
Tüm bölümü yalnızca 0 olarak doldurduğumdan, .bss bölümü oldukça kolaydır. Ancak, .data bölümündeki değişkenlerin, başlatma/başlatma/oynatma sırasında rom/flash biçiminde olması ve başlangıç sırasında kopyalanması gerekir.
Başlatma değerleri ile verilerin nerede bulunduğunu nasıl bilebilirim?
Bir örnek verelim.
ı
unsigned int my_global_variable_one = 1;
unsigned int my_global_variable_two = 2;
Sonra onlar, ne olacağını bölümünde görmek için nesne dosyası üzerinde objdump kullanabilirsiniz main.c iki küresel değişkenler oluşturmak diyelim ama bir şey bulamıyorum init verisinin yerleştirilmesi gereken objdump dışarı.
$ arm-none-eabi-objdump --syms main.o | grep my_global_variable
00000000 g O .data 00000004 my_global_variable_one
00000004 g O .data 00000004 my_global_variable_two
Ardından, tüm sistem için elde edilen elf'e, bu durumda ana bilgisayara bakabilirim.
$ arm-none-eabi-nm -n main.elf | grep my_global_variable
20000000 D my_global_variable_one
20000004 D my_global_variable_two
Bulundukları yeri nereden bulabilirim, böylece verileri kopyalayabilirim? Linker betiğimde nelere ihtiyacım var?
.text veya .rodata gibi bir şeyde olmalı, ancak nasıl öğrenebilirim?
my_global_variable_one için init verilerinin nerede olduğunu nasıl kontrol edebilirim?
Bu verilerin, readelf veya objdump gibi binutils komutlarından herhangi biriyle nerede olduğunu bulabilir miyim?
/sayesinde
Bu STM32 üzerinde(Cortex M3) MCU ve gcc CodeBench versiyonu kullanılmıştır.
Eh veri .text bölümden sonra eklenir fark ama beni yeterince yakın olsun yardımcı oldu :) – Johan