Sida 1 av 1

Arduino EEPROM?

Postat: 5 februari 2019, 10:15:05
av 4kTRB
Arduino Uno ska ha ett eeprom om 2kb. Hur vanligt är det att nyttja detta i ett program och hur mycket används där vid uppstart alltså hur mycket finns egentligen att använda sig utav?

Re: Arduino EEPROM?

Postat: 5 februari 2019, 10:19:36
av Micke_s
vanligtvis så använder inte sketchen något eeprom. Så 2k är ledigt.

Behöver du lagra inställningar/serienr mm så är eeprom:et bra.


Jag brukar dock undvika position 0 av någon anledning, någon gammal chip bug som ligger i mitt minne antagligen..

Re: Arduino EEPROM?

Postat: 5 februari 2019, 23:40:32
av 4kTRB
Och det har inte med C att göra?
Läste att
C garanterar att noll aldrig är en giltig adress för data, så återlämnande av värdet noll
kan användas för att signalera en onormal händelse.

Re: Arduino EEPROM?

Postat: 5 februari 2019, 23:59:09
av AndLi
Hur kan C garantera det, det är ju upp till arkitekturen hur den lagt upp minnet?

Om adress 0 nu används borde det vanligaste vara att den innehåller en hoppinstruktion förbi interruptvektorerna, så det är nog rimligt sannolikt att minnespekare som pekar på 0 är NULLA_de

Re: Arduino EEPROM?

Postat: 6 februari 2019, 00:12:33
av Swech
Eeprom adress pekaren brukar nollställas vid reset
Om man av misstag får en skrivning till EE är det lite högre sannoliket att det hamnar på adress 0
T.ex. om man inte har brownout aktiverad på AVR så brukar de kunna skriva lite sporadiskt
i eepromet

Swech

Re: Arduino EEPROM?

Postat: 6 februari 2019, 03:27:12
av Mr Andersson
4kTRB skrev:Och det har inte med C att göra?
Läste att
C garanterar att noll aldrig är en giltig adress för data, så återlämnande av värdet noll
kan användas för att signalera en onormal händelse.
Det stämmer inte.
C garanterar att null aldrig är en giltig adress till något objekt. Dvs. länkaren kommer aldrig placera någon variabel på null. malloc och vänner kommer aldrig returnera en giltig pekare till null.
Det står ingenstans att 0 och null är samma sak, eller att 0 inte är en giltig adress. Skillnaden är liten, men viktig.
Det enda som sägs är att konstanten 0 blir en null-pekare, och att det inte är tillåtet att dereferera en null-pekare.

Praktiskt så använder alla kompilatortillverkare samma binära representation för 0 & null för att det är enkelt och effektivt, men det är lika giltigt att använda t.ex. 123456 som null-pekare så länge resten av pekarreglerna följs.

Dessutom gäller allt detta bara för direkt adresserbart minne. Åtkomst till EEPROM:et på en AVR sker genom cpu-register, dvs. indirekt adressering.

Re: Arduino EEPROM?

Postat: 6 februari 2019, 12:16:58
av Icecap
Och orsaken till att noll indikerar falsk (pekare/logisk värde) är att nästa alla µC har ett statusregister som innehåller en Zero-flagga.
Den flagga styrs efter vad det finns i ackumulatorn på vilket givet tidpunkt.

Avkänningen av noll går alltså ganska snabbt.