EEMEM tanımı nedir?

Başlatan salihonur, 10 Eylül 2013, 23:26:55

salihonur

Arkadaşlar,

CS5490 ADC veri okumasına ait Atmel işlemcili örnek kodlar buldum. PIC için CCS ortamında kodları uyarlamaya çalışıyorum. EEMEM tanımlamasının fonksiyonu nedir yarımdı olabilir misiniz?

Nette eprom adresi ile ilgili işlem olarak geçiyor ama tam çözemedim.

Aşağıdaki örnek tanımlama tahminime göre: Const Unsigned int32 degisken = 0;

uint32_t EEMEM degisken = 0;

Doğru mudur?

Kabil ATICI

#1
eeprom alanı ile ilgili kullanılmış deyim,


// eeprom storage
uint16_t reboot_counter_ee EEMEM = 0;
uint8_t config_ee[15] EEMEM = "testing ...";
kullanımı şunun gibi bir şey... c pek iyi değilim.

bir örnek uygulama
http://tinkerlog.com/2007/06/16/using-progmem-and-eemem-with-avrs/

ek:http://www.teslabs.com/openplayer/docs/docs/prognotes/EEPROM%20Tutorial.pdf
ambar7

salihonur

#2
İlk verdiğiniz linke de daha önce bakmıştım. Pek açıklayıcı değildi. Ama verdiğiniz 2. link gayet güzel anlatmış.

Eprom adresini tutan bir pointer değişken yaratıyor, sonra doğrudan değer atıyor. Faydası ise epromda sabit adresler belirtmek zorunda kalmadan doğrudan veriyi çekebiliyor.

Teşekkür ederim.


Alıntı yapılan: ambar7 - 10 Eylül 2013, 23:32:36
eeprom alanı ile ilgili kullanılmış deyim,


// eeprom storage
uint16_t reboot_counter_ee EEMEM = 0;
uint8_t config_ee[15] EEMEM = "testing ...";
kullanımı şunun gibi bir şey... c pek iyi değilim.

bir örnek uygulama
http://tinkerlog.com/2007/06/16/using-progmem-and-eemem-with-avrs/


ek:http://www.teslabs.com/openplayer/docs/docs/prognotes/EEPROM%20Tutorial.pdf

bocek

#3
AVR'de EEMEM'in faydası, tanımladığınız değişkenin derleme esnasında doğrudan EEPROM'a yazılmasına olanak vermesidir. Normalde bunu eeprom erişim fonksiyonları ile yaparsınız. EEMEM kullanarak, bir daha değiştirmeyeceğiniz tanımlamaları bir kere eeprom'a yazar, böylece program içerisinde bu değişkenleri yazmak için mcu'ya çaba ve bellek harcatmazsınız.

Programda EEMEM ile tanımlanmış değişken(ler) var ise,  derleme sonrasında .hex dışında aynı isimde .eep uzantılı bir dosya daha oluşur. Bunu da aynı hex yazar gibi ayrıca işlemciye yazmak gerekir.
Bu değişkenleri okuyup/yazmak için eeprom okuma/yazma fonksiyonları kullanılır.
1 ya da 0. işte 'bit'ün mesele..

salihonur

Alıntı yapılan: bocek - 11 Eylül 2013, 10:09:05
AVR'de EEMEM'in faydası, tanımladığınız değişkenin derleme esnasında doğrudan EEPROM'a yazılmasına olanak vermesidir. Normalde bunu eeprom erişim fonksiyonları ile yaparsınız. EEMEM kullanarak, bir daha değiştirmeyeceğiniz tanımlamaları bir kere eeprom'a yazar, böylece program içerisinde bu değişkenleri yazmak için mcu'ya çaba ve bellek harcatmazsınız.

Programda EEMEM ile tanımlanmış değişken(ler) var ise,  derleme sonrasında .hex dışında aynı isimde .eep uzantılı bir dosya daha oluşur. Bunu da aynı hex yazar gibi ayrıca işlemciye yazmak gerekir.
Bu değişkenleri okuyup/yazmak için eeprom okuma/yazma fonksiyonları kullanılır.

Yani bir daha değişiklik yapmak istersem fonksiyon bloklarından yapmam gerekiyor. Pointer gibi çalışmıyor.

bocek

Alıntı yapılan: salihonur - 11 Eylül 2013, 17:26:36
Yani bir daha değişiklik yapmak istersem fonksiyon bloklarından yapmam gerekiyor. Pointer gibi çalışmıyor.
PIC'te nasıldır bilmiyorum ama AVR'de durum öyle. dediğim gibi EEMEM ile tanımlamanın tek faydası; bir kere EEPROM'a yazılacak bir daha değişmeyecek tanımlamaları, programın içinden değil de derleme sonucu oluşan .eep uzantılı dosyayı, programlayıcı kart vasıtası ile mcu'ya yazarak bu iş için mcu'nun yükünü azaltmak.
Bu değerleri okumak/yazmak için yine normal eeprom okuma/yazma fonksiyonlarını kullanacaksınız. Direkt olarak kullanamazsınız.
1 ya da 0. işte 'bit'ün mesele..

salihonur

Alıntı yapılan: bocek - 12 Eylül 2013, 02:36:06
PIC'te nasıldır bilmiyorum ama AVR'de durum öyle. dediğim gibi EEMEM ile tanımlamanın tek faydası; bir kere EEPROM'a yazılacak bir daha değişmeyecek tanımlamaları, programın içinden değil de derleme sonucu oluşan .eep uzantılı dosyayı, programlayıcı kart vasıtası ile mcu'ya yazarak bu iş için mcu'nun yükünü azaltmak.
Bu değerleri okumak/yazmak için yine normal eeprom okuma/yazma fonksiyonlarını kullanacaksınız. Direkt olarak kullanamazsınız.

Bilgi için çok teşekkür ederim.