RAM de örneğin 0x20000100 adresinden başlayarak 100 byte lık bir dizi tanımlamak istiyorum.
link (https://mcuoneclipse.com/2012/11/01/defining-variables-at-absolute-addresses-with-gcc/)
linkte bir örnek buldum denedim ama başarılı olamadım.
bu yazdığın adrese bir pointer atayıp yapabilirsin sanırım
dizi şeklinde tanımlamak daha çok işimi görüyor.
Alıntı yapılan: magnetron - 20 Ekim 2018, 22:22:18bu yazdığın adrese bir pointer atayıp yapabilirsin sanırım
Bu şekilde kullanım yanlış. Derleyici oraya başka bir değişken yerleştirebilir.
Linker dan orayı ayırmak gerekir. Bu da hangi derleyici kullanıldığına göre değişir. Kullanılan derleyiciyi belirtirse biz ona göre bakalım.
TrueStudio kullanıyorum
Atollic GCC kullanıyor.
http://blog.atollic.com/using-gnu-gcc-on-arm-cortex-devices-placing-code-and-data-on-special-memory-addresses-using-the-gnu-ld-linker
Keil'de scatter.txt dosyasi var.
Bunun icinde 2. bir ram bolgesi tanimlayacaksin. (Adresini ve uzunlugunu sen belirliyorsun)
C dili bu bolgeye karismayacagindan hic bir sekilde cakisma vs olusmaz.
Fakat buna neden gerek duyuyorsun ki? C de nereye denk gelirse gelsin 100 bytelik dizi olustur.
Bu diziyi kim kullancaksa ona dizi baslangic adresini yolla gitsin. Gerisini pointer ile erisim komutlari halleder zaten.
typedef struct
{
uint8 Data[100];
} ByteStream;
volatile ByteStream* Allocated = (volatile ByteStream*)(0x20000100);
Hayirli olsun :)
Cevaplarınız için teşekkür ederim.ilk linkteki örnekteki gibi istediğim alanda bir dizi tanımladım.