EEPROM'a dizi(array) yazmak/okumak

Başlatan SCHOTTKY, 08 Nisan 2006, 19:42:26

SCHOTTKY

Merhaba arkadaşlar,

şuan üzerinde çalışmakta olduğum projede, aşağıdaki örnekte olduğu gibi, EEPROM'a dizi yazmak istiyorum.

unsigned int number, tm, md, ct, it, pp = 0;
int cell[6];

void writeMemory(number, tm, md, ct, it, pp)
{
cell[0] = number; cell[1] = tm; cell[2] = md; cell[3] = ct; cell[4] = it; cell[5] = pp;//Değişkenler hücrelere atanıyor
WRITE_EEPROM(number, cell);
...
}

Bu kodu yazarsam derleyici hata verir mi?
Peki okurken
int hucre[5];
hucre = READ_EEPROM(x);

şeklinde okusam, daha sonra hucre değişkenini dizi olarak kullanabilir miyim?

Derleyici hata vermiyor(teorik olarak doğru), ancak paratikteki doğruluğunu da merak ettim :)

Teşekkürler hepinize.

CaFFeiNe

denemedim ama %99 işe yaramaz gibi gözüküyor Help e baktığında göreceksin write_eeprom() ve read_eeprom() fonksiyonları sadece bir bayt yazabiliyor ve okuyabiliyor
istediğini dizi boyutunda bir döngü oluşturarak yapabilirsin

tevfik_kadi

ayrıca
int hucre[5]; 
hucre = READ_EEPROM(x);


burdaki hucre zaten dizinin başlangıç adresini tutan bir değişken yani sen orda aslında dizinin ilk elemanını yazıyorsun sonrasını yazmıyorsun ama şu şekilde sorun yaşatmaz...

int hucre[5]; 
for(i=0;i<5;i++)
hucre[i] = READ_EEPROM(i*X);

SCHOTTKY

Peki 1 bayttan fazla nasıl yazım yapabilirim EEPROM'a?
Eğer yapamazsam elimde 5 değişken var.Bunların 4 tanesi 2 bayt, 1 tanesi de 4 bayt.Değişkeni bayt sayısına göre ayırıp tek tek kaydetmem gerekiyor.Ama CCSde yazılım tabanlı C derleyicilerindeki length vb. komutlar yok.Sadece strlen var.Ya da var mı?

tevfik_kadi

Bildiğim kadarı ile yok belli bir adres bloğunu bir dizi için ayırabilirsin örneğin

int bas=10;// eeprom da 10. hücre
int son=100;
....

for(bas;bas<son;bas++)
{dizi[i]=read_eeprom(bas);
i++;}


şeklinde deneyebilirsin...
Kolay gelsin...

CaFFeiNe

int16, int32 tip değişkenlerse bahsettiğin

make8()
make16()
make32()

fonksiyonlarını incele

Ziya

Alıntı yapılan: "SCHOTTKY"Peki 1 bayttan fazla nasıl yazım yapabilirim EEPROM'a?
Eğer yapamazsam elimde 5 değişken var.Bunların 4 tanesi 2 bayt, 1 tanesi de 4 bayt.Değişkeni bayt sayısına göre ayırıp tek tek kaydetmem gerekiyor.Ama CCSde yazılım tabanlı C derleyicilerindeki length vb. komutlar yok.Sadece strlen var.Ya da var mı?
IIRC 2 baytlık değişkene erişim aşağıdaki şekilde olmaktadır.

*(&degisken)    // düşük değerlikli bayt
*(&degisken+1)// yüksek değerlikli bayt
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

MURSEL

selam arkadaşlar şifreli kilit yapmayı düşünüyorum eeproma nasıl yazılır veya okunur tam olarak bilmiyorum biarkadaş örnekle anlatabilirmi ilk önce mantıgını anlamak için basit bi örnek...TEŞEKKÜRLER arslan74

arslan74

Merhaba,

Bir 40 elemalı bir int dizisini EEPROMa yazmak ve okumak için örnek kod veriyorum.
Dizi, ard arda dizilmiş eleman topluluğudur. Dizinin ismi ilk elemanın adresini verir.

unsigned int kayit[40] = {0};

void kayit_oku (void){

	unsigned char index = 2;
	unsigned char* ptrRam = (char*)(kayit);
	
	while( index <= 81 ){
		*(ptrRam++) = EEPROM_READ(index++);
	}

}

void kayit_yaz (void){

	unsigned char index = 2;
	unsigned char* ptrRam = (char*)(kayit);
	
	while( index <= 81 ){
        eeprom_write( index++, *(ptrRam++));
	}
}


40 elemalı bir int dizisini EEPROMun 2.ci adresinden başlayıb 81.ci adresine kadar yaziyorum ve okuyurum.

Not: bu kodlar Hi-Tech için yazılmıştır. Ama CCS de çalışması lazım.

Selamlar.