Ram organizasyonu

Başlatan bunalmis, 05 Şubat 2011, 13:21:02

z

Keilde startup kodumda kullanmak uzere 256 byte ram alanini alikoymak istiyorum. Startup asamasinda bu alana yazilmis bazi degerler startupi terkedip C ye ait main ve diger C fonksiyonlari tarafindan kullanilacak. Ayrica startup kodlarimdaki bazi asm fonksiyonlar,  statup icin ayrilmis ram alanindaki degerleri de kullanarak C tarafindan cagrilacak.

Ornegin Ram 0x20000000 adresinden basliyorsa normalde C, rami 0x20000000 adresinden itibaren kullanmaya basliyor.

C nin rami 0x20000100 den itibaren kullanmasini istiyorum.  Bu amacla gerek linkerde gerek Target ayarlarinda Ram adresini 0x20000000 degil de 0x20000100 olarak tanimladim.
Ancak bu tanimlama sonunda startupda kullanacagim 256 bytelik alanin 0x20000000 de degilde 0x200004XX gibi ileri adreslere otelendigini gordum.

Startup kodumda         AREA    MyAsmVar, NOINIT, READWRITE, ALIGN=3 gibi bir alan tanimlayip ardindan 256 byte lik bir alani isgal ediyorum.

Ancak MyAsmVar olarak isimlendirdigim alanin 0x20000000 dan baslamasini saglayamadim. Boyle bir zorlama nereden yapilir?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

#1
Keilde bu kisimla ilgili aciklamalar yapilmamis yada bende cikmiyor.

http://www.keil.com/support/man/docs/armlink/armlink_Chdhcdcj.htm
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

ORG benzeri bir tanimlayici olmadigi icin ot yoluyorum.

Area directive ile ramda istedigimiz gibi alan ayarliyoruz. Fakat bunlarin baslangic adresine nasil mudahale edecegim hala anlamadim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

emrahmrcn

Hi-tech de

Myfunction() @0x00001 diye bir tanımlama yapabiliyorduk keil de olmuyormu acaba
Benim yaradılışımda bir ayrıcalık varsa o da TÜRK olmamdır. M.K ATATÜRK

electronblue

Project -> Options for Target "proje ismi"

Target sekmesinde :


z

Sukurler olsun cozdum.

Scatter fileda asagidaki tanimlamayi yapinca cozuldu

LR_IROM1 0x00000000   0x00040000 ;  load region size_region

  ER_IROM1 0x00000000 0x00040000 ; load address = execution address
  { 
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }

  RW_IRAM1 0x20000000 UNINIT 0x00000100  ; RW data
  { 
   *.o (MyAsmVar)
   .ANY (+RW +ZI)
  }

  RW_IRAM2 0x20000100 UNINIT 0x00017F00  ; RW data
  {
   *.o (Heap)
   *.o (STACK)
   .ANY (+RW +ZI)
  }
}

Dikkat ederseniz sectionlara adres ve boyut atamasi yapilabiliyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

@electronblue

En tepedeki mesajimda ordan yapilan degisikligin ise yaramadigini yazmistim. Ornegin orada start adresi 100byte ileri alirsan (ram boyunu da mecburen 100 byte kisaltman gerekir)
bu durumda derleyici rami 100 byte eksik gorur.

Fakat target ayarindaki tanimlarin gecerli olabilmesi icin linker menude en tepedeki use memory layout from target dialog u secili hale getirmelisin.

@Gerbay

Startup kodlarinda reset vektorunden itibaren tum iplerin benim elimde olmasi gerekiyor. C startuptan sonra ne yaparsa yapsin.
Yaziya dokmesi uzun ve useniyorum. Karsilikli sohbet etmeyi tercih ederdim.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Alıntı yapılan: gerbay - 05 Şubat 2011, 16:13:46
@electronblue nun gösterdiği yerleri değiştiriseniz zaten scatter file ordaki ayarlara göre üretiliyor.

Olmadi hocam,

O ayarin neden ise yaramadigini bironceki mesajimda acikladim. O ayar, fiziksel olarak ramin bulundugu alani tanimliyor. Benim derdim sectionlarin nerede tanimlanacagi sorunuydu.

Dikkat edersen verdigim scatter dosyada sectionlari fiziksel anlamda tanimladim. Bu tanimi yapmazsam C kendi kafasina gore sectionlari yerlestiriyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Hem startup kodundan hemde C kodlarindan ayni degiskenlere erisip ramda ayni adreslerin kullanildigini test ettim. Dolayisi ile simdilik sorun yok gorunuyor.

Zaten sorun da olmamasi lazim. Dedigin gibi scatter dosyayi zaten bu tip amaclar icin yapmislar. Benzer zorluklari TI in derleyicisinde de yasamistim. Onda da bu tip isler icin CMD dosyasi var ve bu dosya da, icerigini bilmeyenler icin tam bir bas belasi.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com