Hi allerseits!
Ganz was merkwürdiges passiert hier gerade...
Ich habe 2 Programme, das eine funktioniert, das andere nicht so ganz. Sie sind ca 3kB groß (weshalb ich sie hier nicht reinstellen will) und laufen auf einem Mega32 (der hat 2kB SRAM).
Bedeutsam ist folgender Code:
...der Unterschied ist jedoch nur der Code in der Start-Routine, den es im funktionierenden Programm nicht gibt.Code:#define ArraySize 256 // uint16_t Werte[ArraySize]; uint16_t WertAdressen[ArraySize]; //Array mit den Adressen zu den Werten in Werte[] ... ISR (TIMER0_COMP_vect){ aktIndex++; // Index von aktuellem Wert erhöhen Werte[aktIndex] = TCNT1; // Wert n einlesen und speichern WertAdressen[aktIndex] = Kanal; // Adresse von Wert speichern if(TCNT1 >= MaxWert){ // Wert mit MaxWert vergleichen MaxWert = TCNT1; // wenn größer, Adresse und Wert als Max speichern MaxAdresse = Kanal; ... } } ... void Start(){ for( uint16_t i = 0; i <= ArraySize; i++){ Werte[i] = 0; WertAdressen[i] = 0; } aktIndex = 0; MaxWert = 0; MaxAdresse = 0; MaxIndex = 0; DiffIndex = 0; SweepNr = 1; }
In beiden Programmen wird u a der Analogwert eines Potis eingelesen und per SPI übermittelt. Im nicht funtionierenden Programm bleibt der Analogwert trotz Potiänderung unverändert. Dessen höhe variiert komischerweise auch noch mit der Anzahl der Elemente im Array und mit einer anderen Variablen (?).
Es scheint mit der "for-Schleife" zusammen zu hängen. Was mache ich hier falsch?
Ich habe auch schon unterschiedliche Variationen versucht (i anders deklariert...), nutzte leider nichts.
Aber das erstaunliche ist, dass das Array in keinem anderen Programmteil verwendet wird!
Ich hoffe das ist halbwegs klar und Ihr könnt mir meinen Fehler sagen,
Danke schon mal,
Gruß







Zitieren

Lesezeichen