Arduino: Slut på arbetsminne?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
lillmange
Inlägg: 129
Blev medlem: 30 januari 2007, 14:51:37
Ort: Upplands Väsby
Kontakt:

Arduino: Slut på arbetsminne?

Inlägg av lillmange »

Hej,

Jag har massor med problem med mitt arduino projekt (fläktkontroller) men det som är mest aktuellt just nu är att den verkar hänga sig när den uppmätta temperaturen når det värde som ska starta pwmstyrning av fläktarna.
Detta märks på 2 sätt, displayen som ska visa värden uppdateras inte så ofta som den ska utan det tar ca 30 ggr så lång tid och fläktarna ändrar inte hastighet baserat på temp som dom ska utan går bara på full fart (vilket dom ska i ca 100ms innan pwm styrningen tar över)

Kan detta bero på brist av arbetsminne och Kan man kolla om det är minnesbrist som är problemet?

Tack!

/Magnus
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Arduino: Slut på arbetsminne?

Inlägg av sodjan »

http://arduino.cc/en/Tutorial/Memory
http://arduino.cc/playground/Code/AvailableMemory
http://www.arduino.cc/cgi-bin/yabb2/YaB ... ;start=all

De kan du ju lika lätt hitta själv, så klart.

Men, det normala när man får "slut på minne" i en microcontroller är inte
att det börjar gå långsamt, utan att det kraschar helt och hållet. Minnes
tilldelningen är (normalt) statiskt f.o.m att man bygger koden i IDE'n och
det borde säga ifrån redan där ifall man har brist på minne (flash eller RAM).

Att köra med dynamisk minnestildening (vilket i och för sig C och C++ har
stöd för) är väldigt ineffektivt på en microcontroller.

Min gissning är att din kod gör så gott den kan, men att den helt enkelt
inte hinner med när fler delar går igång. Du får väl bara fundera på vad
den gör. Det är alltså sannolikt något helt annat problem än minnesbrist.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Re: Arduino: Slut på arbetsminne?

Inlägg av PHermansson »

Vore intressant att se koden.
H.O
Inlägg: 5918
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Arduino: Slut på arbetsminne?

Inlägg av H.O »

Låter som att det ligger någon mjukvaru pause/delay rutin i den del av koden som börjar köras när gränsvärdet uppnås. Men som sagt, utan att se koden kan man bara gissa.
Ett annat alternativ kan ju vara att du får en brownout pga av att motorerna börjar dra ström och att uC startar om.
lillmange
Inlägg: 129
Blev medlem: 30 januari 2007, 14:51:37
Ort: Upplands Väsby
Kontakt:

Re: Arduino: Slut på arbetsminne?

Inlägg av lillmange »

Min kod får ni inte se... :) (kan inte komma åt den just nu)

Jag kan inte programmera utan bara fuskar mig fram medans jag försöker lära mig :oops:

Men det är säkert någon loop eller delay som ställer till det, ska kolla en gång till i kväll.

Tack!

/Magnus
Användarvisningsbild
Krille Krokodil
Inlägg: 4062
Blev medlem: 9 december 2005, 22:33:11
Ort: Helsingborg

Re: Arduino: Slut på arbetsminne?

Inlägg av Krille Krokodil »

En debugger hade nog varit till bra hjälp för dig, men tyvärr tror jag inte det finns någon som är enkel att sätta upp.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Arduino: Slut på arbetsminne?

Inlägg av jesse »

Jag gissar på att det är ett matematiskt problem - efter ett tag så slår ett värde i "taket" och fastnar där eller slår om till negativt... med tanke på symtomen så verkar det väldigt troligt. Även om alla variabler håller sig inom sina intervall så kan detta hända i någon beräkning - att ett mellanresultat slår över.

Har du kontrollerat att alla tal håller sig inom gränserna?

EDIT: förklaring:

exempelvis en 16-bitars variabel :
int16_t var;
kan anta värden mellan +32767 och -32768. Men i en beräkning kan mellanresultatet bli större:

var = var*15/32;

här kan inte var vara större än 2184 innan det kraschar.

Det kan givetvis vara andra fel i koden också, men det här är något som många inte alltid tänker på.

Minnet tar nog inte slut om du inte:
a) du har jättestora arrayer med data som fyller minnet.
b) har en rekursiv funktion - dvs. en funktion som anropar sig själv.
c) har väldigt många funktioner som anropas av andra funktioner som anropas av .... osv... Det blir mycket data som ska stoppas på stacken för varje anrop .

Står det inte hur mycket statiskt RAM det "går åt" när du kompilerar koden. Som jämförelse så visar jag "output" från AVR Studio "build":
------ Build started:
...
AVR Memory Usage
----------------
Device: atmega644
Program: 19094 bytes (29.1% Full)
(.text + .data + .bootloader)
Data: 531 bytes (13.0% Full)
(.data + .bss + .noinit)
EEPROM: 133 bytes (6.5% Full)
(.eeprom)
Build succeeded.
13% av minnet är avsett för statiska variabler (bland annat de globala variablerna). Men variabler som skapas i funktioner finns inte med här. Så siffran kan vara missvisande. Men det är ju bara att kolla hur många variabler du använder.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Arduino: Slut på arbetsminne?

Inlägg av sodjan »

> ...att den verkar hänga sig när den uppmätta temperaturen når det värde som ska starta pwmstyrning av fläktarna.

Låter mer som att koden tar oväntade vägar än ett variabel problem.
Men det kan ju bara den som har tillgång till koden veta... :-)
Användarvisningsbild
Helgesson
Inlägg: 298
Blev medlem: 19 november 2008, 22:51:11
Ort: Linköping

Re: Arduino: Slut på arbetsminne?

Inlägg av Helgesson »

Låter som att du använder dig av en mjukvaru pwm som inte är interuptstyrd utan att den låser programmet helt när den används.
Prova att använda de pinnar och funktioner som är dedicerade till den interna hårdvaru pwm modulen.

Vad händer när temperaturen når den nivå där fläktarna ska stängas av?
lillmange
Inlägg: 129
Blev medlem: 30 januari 2007, 14:51:37
Ort: Upplands Väsby
Kontakt:

Re: Arduino: Slut på arbetsminne?

Inlägg av lillmange »

Hej.

Nej det är hårdvaru pwm som jag använder.

Tyvärr har jag inte haft tid att grejja mer med detta på ett tag så jag har inte testat något mer.

Tack för tipsen

/Magnus
Användarvisningsbild
Helgesson
Inlägg: 298
Blev medlem: 19 november 2008, 22:51:11
Ort: Linköping

Re: Arduino: Slut på arbetsminne?

Inlägg av Helgesson »

Posta koden så blir det lättare :)
Skriv svar