Romda tablo olusturma

Başlatan z, 03 Kasım 2009, 01:58:06

z

Romda tablo olusturmak istiyorum.

Tablo verileri  sırayla 0, 1, 2, 3, H, L olsun.

Buradaki H ve L, tablonun romdaki başlangıç adresi.

Tabloyu özel bir adrese yerleştirmeyi düşünmüyorum. Derleyici tabloyu nereye yerleştirirse kendisi!!! H ve L değerini  oluştursun istiyorum.

Bunu C de nasıl yaparım?

Örneğin tablo 0x4567 adresine yerleştiyse

Tablo verilerim 0,1,2,3,45,67 olmalı.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

piedos

struct myDataFormat{

char a;
char b;
char c;
char d;
char H;
char L;
};

//
long sonRomAdresi = 0xA0000;//roma yazmak için başlangıç adresi olsun
//
struct myDataFormat veri1;

veri1.H = (sonRomAdresi)&(0xFF00)>>8;
veri1.L = (sonRomAdresi)&(0x00FF);
write_flash(sonRomAdresi,veri1,sizeof(veri1));

sonRomAdresi +=sizeof(veri1);

//sonRomAdresi verisini programda roma veri yazdıkça arttırmanız gerekiyor
Einstein: "Only two things are infinite, the universe and human stupidity, and I'm not sure about the former."

z

Bunun için bahsetiğiniz gibi kod yazamam. Bunu derleyicinin kendisinn halletmesini istiyorum.

Assembly de bu,  pseudo kodlarla son derece  basit bir işlem. C de de aynı kolaylığın olması lazım.

Sorumu daha açıklayıcı başka bir örnekle pekiştireyim.

Program kodlarının kayıtlı oldugu romda 10 tane veri tablosu olsun.

11'inci tabloya bu 10 tablonun başlangıç adresleri yerleştirilecek.
Bu işlem derleme aşamasında kendiliğinden oluşmalı.

Bu 11 tablo da romda olacak.

C bilenlerden yardım rica ediyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

Dizinin sonuna adresi derleyici yerleştirsin deişsiniz ama , ben öylle bir derleyici operatörü ve opsiyonu duymadım. belki vardır. Program içerisinde birşeyin adresine ihtiyacım olduğunda aşağıdaki şekilde elde ediyorum bu bilgiyi. Ama illa ki adresi de romdan okumak istiyorsunuz anladığım kadarıyla.

const unsigned char  testdizisi[]={0,1,2,3,4,5,6,7,8,9,10};
unsigned int  adress=0;

adress=(int)(&testdizisi);

Klein

derleyicide şöyle bir deneme yaptım yedi.
const unsigned char denemedizisi[]={0,1,2,3,4,5,6,7};
const unsigned char adresdizisi[]={(char)(&denemedizisi),2,3};
unsigned int adres=0;

adres=adresdizisi[0];
// farklı bir şekilde 
adres=denemedizisi[8];

adres değişkeninde dizinin başlangıç adresini okudum. yani doğru çalıştı. adres dizisi deneme dizisinin tam arkasında olduğu için doğal olarak önceki dizinin peşine eklenmiş olacak. ilk dizinin boyutu ne olursa olsun , adres bilgisi her zaman onun bittiği yerden başlayacak. sanırım işinizi görür. Kolay gelsin

Not: Bunu HI-TECH derleyicisinde denemedim. Renesas'ın NC30 derleyicisinde denedim.

XX_CİHAN_XX

Bir ara banada böyle birşey lazım olmuştu ve baya bir uğraş sonucu yapmıştım buyur hocam hi tech te denenmiştir

#pragma psect strings=charTable
#asm
	psect charTable,ovrld,abs,delta=2
	org (0x1234) 
#endasm
volatile unsigned const char charTable[3]={1,2,3};
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.