Forum: Compiler & IDEs sbi /cbi / inp / outp im neuen WinAVR- workaround


von Sebastian (Gast)


Lesenswert?

Hallo ggc-Gemeinde,

für alle, die wie ich jede Menge alten code haben und nun Probleme
bekommen, weil sbi, cbi, inp und outp vom neuen WinAVR nicht mehr
unterstützt werden, hier ein paar Zeilen, mit denen man schnell die
alten sources wieder nutzbar machen kann:

#define sbi(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define cbi(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
#define outp(VAL,ADRESS) ADRESS=VAL
#define inp(VAL) VAL

Gruß,
Sebastian

von Chris (Gast)


Lesenswert?

Wo ist deine Frage? Ansonsten wäre das besser in der Codesammlung
aufgehoben.

Allerdings stellt sich mir die Frage nach dem Sinn des ganzen. Wer
"jede Menge alten Code" hat, kann programmieren und diese Zeilen
daher in <1min selbst schreiben.
In neuen Projekten oder wenn es vom Zeitaufwand her möglich ist (ist es
bei vielen Hobbyprojekten vermutlich) sollte man in jedem Fall nicht
mehr sbi & Co. verwenden, also ist dieser Code für Anfänger ebenfalls
nutzlos.

Wem hilfst du also mit diesem Code (nehmen wir mal an er stünde in der
Codesammlung)?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Bei solchen Makros sollte man etwas mehr Klammern spendieren:

#define sbi(ADDRESS,BIT) ((ADDRESS) |= (1<<(BIT)))
#define cbi(ADDRESS,BIT) ((ADDRESS) &= ~(1<<(BIT)))
#define outp(VAL,ADRESS) ((ADRESS) = (VAL))
#define inp(VAL) (VAL)

von Chris (Gast)


Lesenswert?

> Bei solchen Makros sollte man etwas mehr Klammern spendieren:

Naja, die Frage nach dem Sinn dieses Threads bleibt.

von Sebastian (Gast)


Lesenswert?

Hallo zusammen,

schon gut, schon gut, bevor Ihr über mich herfallt....

Ich hatte nur gerade das oben angesprochene Problem, habe mir die
Zeilen geschrieben und dachte, ich poste sie mal, falls jemand ein
ähnliches Problem hat.

Es gibt ja auch noch die Hobbybastler, die sich Code aus dem Netz
herunterladen und sich wundern, warum er nicht kompiliert werden kann.


Oder die, die die Verwendung von sbi() usw. einfach leserlicher finden,
egal, was c ist und was nicht (zu denen ich gehöre). Code muss
funktionieren und gut zu warten sein. Bitte.

Ich war hin- und hergerissen, ob ichs in der Codesammlung oder hier
posten sollte, habe mich dann aber für dieses Forum entschieden, weils
eben mehr gcc betrifft als wirklicher Code ist. Wenn ich ein solches
oder ähnliches Problem habe, suche ich eben erst mal hier, bevor ich
mich der Codesammlung widme, vielleicht machen das andere anders.

Es war wohl, wenn ich mir die Reaktionen hier anschaue, ein Fehler
überhaupt zu posten.

~Thread closed~
Sebastian

von Dirk (Gast)


Lesenswert?

Hi,

ein Fehler war es ganz bestimmt nicht. Chris scheint schon ein
Vollprofi zusein der nicht mehr an Anfaenger denkt.

Vielen Dank für die Makro's

mfg
Dirk

von Miguel (Gast)


Lesenswert?

Hi,

Mir hats auch weitergeholfen. Hab mich jetzt nähmlich seit einer stunde
mit altem code und einem neuen WinAVR herumgeplagt.

danke!

von Pete da Heat (Gast)


Lesenswert?

Hallo!

Irgendjemand findet immer was zu meckern...Lass Dich von einem
Miesepeter nicht ausm Konzept bringen, gibt bestimmt ein paar denen
damit geholfen ist.

So long!
Pete

von mmm (Gast)


Lesenswert?

...das denke ich auch!

Und Chris schein so viel Zeit zu haben, dass er, falls er über tausende
von Zeilen alten Codes verfügte, die sbi und cbi enthielten, diesen Code
vollständig lesen und an jeder einzelnen Stelle von Hand das seit
neuestem empfohlene (und sicherlich alleinseligmachende) Konzept
einfügen würde.

Gruß mmm

von Christoph _. (chris)


Lesenswert?

> Und Chris schein so viel Zeit zu haben, dass er [...] an jeder
> einzelnen Stelle von Hand das [...] [neue] Konzept einfügen
> würde.
Habe ich das wirklich so geschrieben?
Ich meine nein. :)

--
> Wer "jede Menge alten Code" hat, kann programmieren und
> diese Zeilen daher in <1min selbst schreiben.

von Marian (Gast)


Lesenswert?

Also ich bin auch sehr froh, dass Sebastian das hier gepostet hat. Habe
auch die cbi und sbi Funktionen im Netz gefunden und mich gewundert
warum mein AVR Studio das nicht kennt und somit meinen Code nicht
compilieren kann. Hat ne weile gedauert aber Dank Sebastian funzt der
Code jetzt...juhu freu

Bis denne und weiter so Sebastian...:)

von Gast (Gast)


Lesenswert?

mir hats auch geholfen.

Wenn mn mal zwei Stunden mit compiler-Fehlern verseppelt hat, ist DER 
Thread genau richtig !


tom

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Gast wrote:

> Wenn mn mal zwei Stunden mit compiler-Fehlern verseppelt hat, ...

...dann könnte man ja auch mal mit dem Studium der Dokumentation
anfangen, nicht?  Zum Beispiel der hier:

http://www.nongnu.org/avr-libc/user-manual/group__deprecated__items.html

Ganz davon abgesehen möchte ich bezweifeln, dass die Mehrheit des
entsprechenden Codes von vor dem Jahr 2003 stammt.  Zu diesem Zeitpunkt
wurden die alten Makros nämlich `deprecated', d. h. sie hätten ab da
nicht mehr in neuen Code reingehört (bzw. nur mit der entsprechenden
eigenen Definition).  Das Problem ist also in den allermeisten Fällen
eher hausgemacht.

von min (Gast)


Lesenswert?

ansonsten tut's auch ein :

#include <compat/deprecated.h>

von Jörg G. (joergderxte)


Lesenswert?

Die Rede war von zwei Stunden, nicht von vier Jahren ...

scnr, Jörg

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.