Gock
20.01.2009, 17:59
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:
#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;
}
...der Unterschied ist jedoch nur der Code in der Start-Routine, den es im funktionierenden Programm nicht gibt.
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ß
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:
#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;
}
...der Unterschied ist jedoch nur der Code in der Start-Routine, den es im funktionierenden Programm nicht gibt.
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ß