Kostenlose kenne ich sonst keine.
CodeVision für AVR, Keil für AVR
Hallo an alle,
welchen compiler, außer WinAvr, kannst du mir empfehlen...
Danke
Gruß michael
Kostenlose kenne ich sonst keine.
CodeVision für AVR, Keil für AVR
Wo liegt denn das Problem beim AVR-GCC (also WinAVR)?
der funktioniert doch eigentlich recht zuverlässig, und wenn man ihn ins AVR-Studio einbaut hat man sogar sowas wie eine IDE.
So viele Treppen und so wenig Zeit!
Hallo,
danke für eure Antworten...
@Hubert.G
Hast du schon mit einem von diesen Compiler Erfahrungen gesammelt und welchen könntest du weiter empfehlen?
@Felix G
ICh habe so einige Schwierigkeiten beim Compilieren, vielleicht liegt es auch an mir, aber wenn die Optimierung der Compilierung z.B.: auf Os, aber eigentlich funktioniert es nur mit O0, eingestellt ist funktioniert der Code nicht mehr richtig.
aktuelles Probelm:
Mittels einem Interrupt ein zyklisches Blinken "Heart Beat".
main.c:
isr.c:Code:#include <avr/io.h> #include "common.h" #include "isr.h" int main(void) { init_ISR(); DDRD = 0x10; PORTD = 0x10; // HeartLed DDRC = 0x1C; PORTC = 0x10; while(1) { if (Counter_X_20ms > 0x03) { if ( (PIND & 0x10) != 1 ) { PORTD |= 0x10; } } if (Counter_X_20ms < 0x02){ if ( (PIND & 0x10) != 1 ) { PORTD &= 0xEF; } } } return 0; }
Counter_X_20ms ist in der common.h als uint8_t definiert....Code:#include <avr/interrupt.h> #include <inttypes.h> #include <stdio.h> #include "common.h" void init_ISR(void) { sei(); TIMSK |= ( 0x01 << TOIE0 ) ; TCCR0 |= ( 0x01 << CS02 | 0x00 << CS01 | 0x01 << CS00 ) ; TCNT0 = 0x64; Counter_X_20ms = 0x00; } ISR(TIMER0_OVF_vect) { if ( Counter_X_20ms == 0x32 ) { // 1 sek Counter_X_20ms = 0x00; } else { Counter_X_20ms++; } TCNT0 = 0x64; TIFR |= ( 0x01 << TOV0 ) ; }
Dieser Code funktioniert eiwandfrei mit der CompilerStufe O0, aber mit allen anderen nicht mehr?
Vielleicht habe ich auch nur eine falsche Einstellung?
Danke
mfg Michael
dann versuch mal volatile uint8_t zu nehmen und schon klappt es mit der OptimierungCounter_X_20ms ist in der common.h als uint8_t definiert....
und
kannst Du auch weglassen.Code:TIFR |= ( 0x01 << TOV0 ) ;
1. ist es falsch
2. das macht die Hardware für Dich
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
Mein Junior hat während des Studiums mit CodeVision gearbeitet und war sehr zufrieden, ein junger Arbeitskollegen in der Abendschule mit Keil und war auch sehr zufrieden. Sie kosten halt etwas.
Es werden dir nur diese Kompiler auch nichts helfen. Wenn bei mir der Kompiler etwas wegoptimiert, dann habe ich sicher irgendwo einen Fehler gemacht, eine Variable in einer ISR nicht als volatile gekennzeichnet oder so etwas. Probiere das mal mit Counter_X_20ms.
Hubert
Danke Danke Danke,
genau das war es...
Ich habe echt "alles" ( hab ich gedacht) ausprobiert...
Na dann werde ich mir gleich meinen alten Code raus krammen, bei diesem hatte ich schon mal so ein ähnliches Problem, und werde es dort ausprobieren.
Danke Michael
Lesezeichen