avr-gcc
kullanarak, RAM'i kaydetmek için Program Belleği'nde veri depolamak mümkündür. Bu PROGMEM attribute kullanılarak tamamlandı. AVR-libc ayrıca, tam dizelerle kullanılabilecek bir makro, PSTR() sağlar. Bu satırlardan herhangi birinin derleme başarısız olurken PSTR() on __FUNCTION__
__func__
, __FUNCTION__
or __PRETTY_FUNCTION__
.
ile PSTR()
kullanmak
display.message(__func__, 2);
display.message(__FUNCTION__, 2);
display.message(__PRETTY_FUNCTION__, 2);
çalışıyorum
display.messageP(PSTR(__func__), 2);
display.messageP(PSTR(__FUNCTION__), 2);
display.messageP(PSTR(__PRETTY_FUNCTION__), 2);
aşağıdaki hata ile:
derleme olarak, bu makroları genel bir şey değil# define PSTR(s) (__extension__({static char __c[] PROGMEM = (s); &__c[0];}))
ve iyi çalışır:
PSTR tanımı, WinAVR dan/avr/include/avr, hata iletisinde başvurulan değişken açıklıyor
display.messageP(PSTR(__FILE__), 2);
Bu hatanın nedenine dair herhangi bir fikir ve program belleğine işlev adı eklemek için PSTR() kullanılması mümkün mü?
Bu dizeler, özel işlevlere ihtiyaç duydukça o alana yerleştirilemez. onlara erişmek için. Gerçekte, bu isimler oldukça dar küçük olmalı, bu yüzden zaten onları orada taşımak için gerçek bir avantaj olup olmadığını merak ediyorum. Bunu, sahip olduğunuz gerçek RAM miktarını bilmeden söylüyorum. –
@MichaelDorgan avr-libc, program belleğindeki değişkene erişmek için işlevler sağlar; Bu, sorudaki son kod satırı ile teyit edilir, bu iyi çalışır. Bu dizelerin küçük olduklarına katılıyorum, ancak gömülü sistemlerde (sadece birkaç Kbyte RAM ile) önemli. – mMontu