Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

İlginç bir sorun.

Başlatan XX_CİHAN_XX, 09 Temmuz 2010, 19:45:08

XX_CİHAN_XX

unsigned const char buffer_A[8][1] = {{0b01110000},
		 		      {0b10001000},
				      {0b10001000},
				      {0b11111000},
				      {0b10001000},
				      {0b10001000},
				      {0b10001000},
				      {0b00000000}};


Böyle bir const tipli dizi program belleği kullanması gerekirken
hem program hemde ram belleği kullanıyor.
Acaba programım bu şekilde çok fazla const data içerdiği için derleyici belli bir limitten sonra dizilerin bir kısmını ram belleğe mi taşıyor anlayamadım  ???
Programımda ki bu şekilde const olarak tanımlanmış dizileri iptal ettikçe derleme sonucunda hem program hemde data belleğimin kullanım alanı azalıyor. Ekledikçe de artıyor. Normal şartlarda sadece program bellekte değişim görmemiz gerekmez mi ???
Kodu ATmega16 için yazıyorum. WinAVR de...
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.

radres

WinAVR'da const sabiti ile tanımladığın değişkenler program belleğinde saklanacak anlamına gelmiyor diye biliyorum.

XX_CİHAN_XX

WinAVR yi bilmiyorum ama C de kesinlikle bu anlama geliyor.
Eğer gerçekten dediğin gibiyse ki öyle gözüküyor buna gerçekten çok şaşırırım.
Peki ozaman şöyle sorayım WinAVR de C deki gibi program belleğe const dizi nasıl yerleştirebilirim? ???
Garip, gerçekten garip...
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.

radres

WinAVR'da program belleğine kaydedilmek üzere değişken tanımlamak için
prog_char
prog_int16_t
prog_uint8_t
prog_uint16_t

gibi başına "prog_" ön eki gelen tanımlamalar kullanılıyor. Bu tanımlamalara bir bak istersen.

radres

Zaten const terimi tanımlanan değişkenin sabit olduğunu belirtiyor. İlla program belleğine yazılacak diye bir şart yok C'de. Ama dediğin gibi derleyicilerin çoğunda const ile tanımlanan değişkenler program belleğine yerleştiriliyor. Ama WinAVR hariç.

fatihinanc

az önce hi-tech de denedim. 8 byte data memory kullanıyor...
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

radres

Dediğim gibi çoğu PIC derleyiciler için bu böyle ama WinAVR'da değil.

F493

Selam,

const rom ... gibi bir kullanım yokmu?. Derleyicinin user manual'ine bakın vardır belki!. O zaman kesin program memory'ye yazılır.

Esen kalın.

radres

Alıntı yapılan: F493 - 09 Temmuz 2010, 20:50:12
Selam,

const rom ... gibi bir kullanım yokmu?. Derleyicinin user manual'ine bakın vardır belki!. O zaman kesin program memory'ye yazılır.

Esen kalın.

WinAVR'da yok diye biliyorum. prog_int16_t gibi tanımlaman gerekiyor.

XX_CİHAN_XX

peki avrstudio da nasıl bir yazım yapmalıyız.
prog_int16_t ss[2] = {1,2};
örneğin gibi bir deneme yaptım hata verdi
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.

radres

Alıntı yapılan: XX_CİHAN_XX - 09 Temmuz 2010, 20:53:00
peki avrstudio da nasıl bir yazım yapmalıyız.
prog_int16_t ss[2] = {1,2};
örneğin gibi bir deneme yaptım hata verdi

Programa pgmspace.h dosyasını eklemen gerekiyor.

#include <avr/pgmspace.h>

XX_CİHAN_XX

Evet birşey daha öğrenmiş olduk, teşekkürler.
AVR - lib C
pdf inde yazdığına göre unsigned char için tanımlama şöyle olacakmış
prog_uchar
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.

radres

Bende bilmiyorum sayılır WinAVR'ı. Ama bu olay aklımda kalmış.

papylon

Bende henüz AVR'nin çok çok acemisiyim. Bu ve bunun gibi durumları kavramaya çalışıyorum henüz.
Sabit diziyi program hafızaya aşağıdaki gibi de kaydetmen mümkün, yani hangisini daha çok benimsediysen o haliyle kullanabilirsin.
const unsigned char buffer_A[8][1] = PROGMEM {
{0b01110000},
{0b10001000},
{0b10001000},
{0b11111000},
{0b10001000},
{0b10001000},
{0b10001000},
{0b00000000}
};

XX_CİHAN_XX

@papylon
const unsigned char
unsigned const char
unsigned char const
bunların hepsi aynı şeyler ve winavr derleyicisinde ram belleği işgal ediyorlar :)
@radres arkadaşımızın dediği gibi (avr lib-c manuel de de belirtmiş) başına prog_ ifadesini
koyduğumuz da ise program belleğe yerleştiriliyor...
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.