Forum: Mikrocontroller und Digitale Elektronik Code::Blocks mit avr-libc -> Symbols-Browser / Code-completion


von Andreas K. (Gast)


Lesenswert?

Hallo zusammen,

ich verwende zur Programmierung von AVRs Code::Blocks unter Ubuntu und 
suche nach einer Lösung, die Code-Komplettierung in gescheiter Form zum 
Laufen zu bringen.

Dazu gibt es in CodeBlocks den Symbols-Browser, der je nach 
Einstellungen und includes vollgestopft wird (und aus dem bedient sich 
dann die Code-Komplettierungs-Funktion). Erklärt am Beispiel eines 
ATmega644 ist das Problem, dass Codeblocks bei einem include von 
<avr/io.h> nicht alle defines zum mega644 findet. Es werden also 
beispielsweise die defines für PORTD gefunden, nicht aber PORTA und 
PORTB.

Ich vermute, das liegt an der ifndef-Abfrage in der io.h (s.u.), denn 
wenn ich die <avr/iom644.h> inkludiere, funktioniert es. Codeblocks 
merkt also anscheinend nicht, dass ich den mega644 verwende (wie soll es 
da auch von Allein drauf kommen, wenn das erst über den 
Übergabeparameter beim Kompilieren geregelt wird?) und übernimmt nur ein 
paar allgemeine includes aus der io.h in den Symbols-Browser. Allerdings 
wird in der io.h explizit empfohlen, dass man das nicht so machen soll, 
sondern dass man eben die io.h verwenden soll.

Das sind die Zeiles des Begehrens in der io.h:
1
#elif defined (__AVR_ATmega644__) || defined (__AVR_ATmega644A__)
2
#  include <avr/iom644.h>

Dann liegt ja schon fast nahe, in der main.c vor das include der io.h 
einfach zu schreiben:
1
#define __AVR_ATmega644__
Aber abgesehen davon, dass es Code::Blocks dann immer noch nicht 
begreift, wäre das ja genau so schmutzig wie die iom644.h zu 
inkludieren.

Daher suche ich eine Lösung, die nicht den Empfehlungen widerspricht.

Grüße,
Andreas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.