Forum: Compiler & IDEs Eclipse mit AVR-Plugin


von Peter B. (basejump)


Lesenswert?

Also ich sitze gerade an meinem netten, neuen Eclipse mit dem AVR-Plugin 
und es funktioniert alles nicht genau so wie in AVR-Studio.

Wenn ich schreibe PORTD = 0b00000000;
sagt er dass ein fehlerhaftes decimales Format vorliegt.
PORTD = 0x00; (funktioniert)

Ich dacht ich könnte nun so etwas hier in meine Headerdatei schreiben:
1
#define BIN0000 0
2
#define BIN0001 1
3
#define BIN0010 2
4
#define BIN0011 3
5
#define BIN0100 4
6
#define BIN0101 5
7
#define BIN0110 6
8
#define BIN0111 7
9
#define BIN1000 8
10
#define BIN1001 9
11
#define BIN1010 A
12
#define BIN1011 B
13
#define BIN1100 C
14
#define BIN1101 D
15
#define BIN1110 E
16
#define BIN1111 F

Dann könnte ich 0xBIN0000BIN1111;  schreiben und er macht daraus 0x0F;

Irgendwie funktioniert das aber nicht.

Ich würde es besser finden wenn ich die Pins binäre darstellen könnte.
Gibt es dafür eine gute Lösung?

von Simon K. (simon) Benutzerseite


Lesenswert?

Peter Bandhauer wrote:
> Wenn ich schreibe PORTD = 0b00000000;
> sagt er dass ein fehlerhaftes decimales Format vorliegt.
> PORTD = 0x00; (funktioniert)

Sagt wer?

von Simon K. (simon) Benutzerseite


Lesenswert?

Ah ich seh' schon. Ja, man müsste dem CDT-Plugin bei der Just-in-Time 
Syntaxüberprüfung noch mitteilen, dass es dieses Prefix gibt.
Wundert mich, dass das noch nicht aufgefallen ist. Ich vermute mal 
Thomas Holland (Der Ersteller von AVR-Eclipse) könnte da was dran 
drehen. Wissen tu ich es aber nicht.

Die Meisten benutzen wahrscheinlich ohnehin für sowas die Hexadezimale 
Variante (beginnend mit 0x), weil die binäre Variante nicht im 
C-Standard enthalten ist und das Verwenden Dieser nicht standardkonform 
ist.

von Simon K. (simon) Benutzerseite


Lesenswert?

Ich hab's mal als Feature Request bei AVR-Eclipse eingereicht:
https://sourceforge.net/tracker/index.php?func=detail&aid=2085485&group_id=189165&atid=928234

Ich glaube aber, dass man das bei den Entwicklern vom CDT Plugin 
einreichen müsste um daran was zu ändern.

von Peter B. (basejump)


Angehängte Dateien:

Lesenswert?

Sagt Eclipse 3.4.0 mit AVR_Eclipse_Plugin 2.2.0

Kann ich das irgendwie mit der #define Anweisung so hinbekommen dass er 
mir
0b00001111
zu 0x0F konvertiert?

0xBIN0000BIN1111 zu 0x0F wär auch okay, nur bekomme ich das nicht hin.

von Simon K. (simon) Benutzerseite


Lesenswert?

Peter Bandhauer wrote:
> Sagt Eclipse 3.4.0 mit AVR_Eclipse_Plugin 2.2.0
>
> Kann ich das irgendwie mit der #define Anweisung so hinbekommen dass er
> mir
> 0b00001111
> zu 0x0F konvertiert?
>
> 0xBIN0000BIN1111 zu 0x0F wär auch okay, nur bekomme ich das nicht hin.

Nein, das geht so wahrlich nicht. Schau aber mal hier:
Beitrag "Binär  -- wie in C schreiben?"

von Peter B. (basejump)


Lesenswert?

Danke Simon K. !

#define B8(y)  ( 0##y       &   1 \
    | 0##y >>  2 &   2 \
    | 0##y >>  4 &   4 \
    | 0##y >>  6 &   8 \
    | 0##y >>  8 &  16 \
    | 0##y >> 10 &  32 \
    | 0##y >> 12 &  64 \
    | 0##y >> 14 & 128 )

Das war die Lösung :)

Weshalb funktionier es mit meinen #define nicht?

von Thomas H. (innot)


Lesenswert?

Simon K. wrote:
> Ich hab's mal als Feature Request bei AVR-Eclipse eingereicht:
> 
https://sourceforge.net/tracker/index.php?func=detail&aid=2085485&group_id=189165&atid=928234
>
> Ich glaube aber, dass man das bei den Entwicklern vom CDT Plugin
> einreichen müsste um daran was zu ändern.

Ich habe es mal in der eclipse.tools.cdt newsgroup plaziert. Mal schauen 
ob es da irgendeine Antwort drauf gibt.

http://www.eclipse.org/newsportal/article.php?id=17092&group=eclipse.tools.cdt#17092

von Simon K. (simon) Benutzerseite


Lesenswert?

Thomas Holland wrote:
> Simon K. wrote:
>> Ich hab's mal als Feature Request bei AVR-Eclipse eingereicht:
>>
> 
https://sourceforge.net/tracker/index.php?func=detail&aid=2085485&group_id=189165&atid=928234
>>
>> Ich glaube aber, dass man das bei den Entwicklern vom CDT Plugin
>> einreichen müsste um daran was zu ändern.
>
> Ich habe es mal in der eclipse.tools.cdt newsgroup plaziert. Mal schauen
> ob es da irgendeine Antwort drauf gibt.
>
> 
http://www.eclipse.org/newsportal/article.php?id=17092&group=eclipse.tools.cdt#17092

Super! :-)

von Peter B. (basejump)


Lesenswert?

Es gab eine Antwort von Chris Recoskie
> File a bug... the GNU parser in CDT should be enhanced to handle this.

Heißt dies dass man etwas machen kann?

Ich würde gern mal wissen ob das nur mir so geht oder ob andere auch 
diesen Fehler haben.

Vielleicht geht das ja nur bei mir nicht.

von Thomas H. (innot)


Lesenswert?

Nein, das Problem haben alle, da CDT "0b" Binärzahlen noch nicht kennt.

Ich werde in den nächsten Tagen mal einen Bug Report für CDT schreiben. 
Im Moment wühle ich mich noch durch den CDT Sourcecode um zu dem 
Bug-Report auch gleich einen Patch zu liefern (habe aber bisher noch 
nicht die Stelle gefunden wo der Parser den C Sourcecode analysiert. Die 
Innereien von CDT sind ziemlich verworren und fast vollständig 
Kommentarfrei).

AFAIK kennt GCC "0b" binärzahlen offiziell erst seit Version 4.3, und 
die ist erst im März erschienen (war im avr-gcc wohl schon etwas länger 
drin). Zu der Zeit war CDT aber schon kurz vor dem Ganymede Release und 
es ist m.E. durchaus verständlich, dass CDT dieses eher unscheinbare und 
nicht C Standard konforme Feature von GCC noch nicht kennt.

Auch mit einem Bug Report würde ich keine allzu schnelle Bearbeitung 
erwarten. Bei der großen Anzahl von offenen Bug Reports für CDT ist das 
sicherlich eher ein low priority item.

Ich sehe es auch eher als kosmetisches Problem. Programme mit "0b" 
lassen sich problemlos kompilieren und die Warnung wird nur im Editor 
angezeigt und taucht nicht in der "Problems" Liste auf.

brgds,

Thomas

von Thomas H. (innot)


Lesenswert?

so, mein Patch für CDT ist auf Anhieb akzeptiert worden und ab CDT 5.0.2 
wird Eclipse/CDT auch Binär-Konstanten richtig erkennen.

https://bugs.eclipse.org/bugs/show_bug.cgi?id=249698

Bis zum Release von 5.0.2 kann es aber noch dauern, da 5.0.1 gerade erst 
herausgekommen ist und der nächste Release erst in ca. 3 Monaten ansteht 
(vierteljährlicher Ganymede Release Schedule).

Ein klein wenig müsst ihr euch also noch mit dem bit-frickeln gedulden 
:-)
Sofern noch nicht geschehen könnt ihr ja die Zeit nutzen schon mal auf 
Eclipse 3.4 (Ganymede) upzudaten, denn CDT 5.0.2 gibt es nur mit 
selbigem.

Thomas

von Simon K. (simon) Benutzerseite


Lesenswert?

Danke für den Hinweis und gute Arbeit mit dem Patch! :-)

von Peter B. (basejump)


Lesenswert?

@ Thomas Holland
Vielen Dank für die Mühe!

Irgendwie finde ich keine "CDT 5.0.2" :( nicht mal wann es 
vorraussichtlich veröffentlicht wird.

Hab jetzt Eclipse 3.4.1 (Ganymede) mit CDTool 5.0.1 :)

> ... nächste Release erst in ca. 3 Monaten ansteht ...
Dann wird das CDT 5.0.2 das Weihnachtsgeschenk vom Thomas.

von Thomas H. (innot)


Lesenswert?

Da CDT ein Ganymede Projekt ist, wird es, wie für alle anderen Ganymede 
Projekte auch, ein synchrones Update geben. Ich hatte mal was von 
ungefähr vierteljährlichen Updates gelesen, aber so wie es aussieht wird 
es nicht mit dem Weihnachtsgeschenk - 
http://wiki.eclipse.org/Ganymede#Coordinated_Service_Releases

5.0.2 kommt also erst Ende Februar 2009 als Teil des zweiten Ganymede 
Service Release (SR2).

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.