Tiny13 Betriebssystem

Gast #186334
Lesenswert?
• ▲
▼
Hi,

kleines Bsp.:

#define Tog_Bit(Byte,Led)          Byte ^= (1<<Led)
Tog_Bit (PORTB,4);                                 //Systemled

durch die neue Funktion kann man das verbesseren.

#define Tog_Bit(Byte,Led)    Byte |= (1<<Led)

Tog_Bit (PINB,4); toggelt Portb.4

Mfg
Dirk
#186335
Lesenswert?
• ▲
▼
Guter Trick, um Code fehleranfällig und nichtportabel zu machen.

Ich hab jedenfalls keine Lust, mir nen Wolf zu suchen, warum solcher
Code plötzlich auf einem Mega8 oder 8051 oder ARM oder sonstwas nicht
läuft.

Ich schreib Sachen immer so hin, wie sie logisch richtig sind.
Bauteilabhängige Optimierungen sind allein Sache des Compilers.


Peter
Gast #186336
Lesenswert?
• ▲
▼
Hi,

leider weiss ich nicht wie AVR GCC mit diesen neuen Funktionen um geht.


>Guter Trick, um Code fehleranfällig und nichtportabel zu machen.

Das Problem sollte sich mit guten Praeprozessoranweisungen realiseren
lassen. Das gleiche Problem hat man sonst auch mit Registernamen. Diese
sind auch nicht ueberall gleich.

Mfg

Dirk
Gast #186337
Lesenswert?
• ▲
▼
Das ist richtig, dafür gibt es aber mindestens eine Abstraktionsschicht,
die man auch relativ simpel implementieren kann.
Ich bin ebenfalls der Ansicht, daß man so etwas dem Compiler überlassen
sollte, oder in diesem speziellen falle wirklich Assembler/inline
Assembler verwenden sollte. Und das dann auch wirklich erst in der
Abstraktionsschicht.

...mein Senf... :)
Gast #186339
Lesenswert?
• ▲
▼
Geschrieben natülich für Codevision. Das Toggelmakro muß ich nochmals
erklären: Bei jedem Aufruf des Makros wird der momentane Zustand des
Bits geändert. Is es high wird es low und umgekehrt.
Das funktioniert auch mit char-Variabeln. Das heist, du kannst 8 Bits
in nur einer char Variable unterbringen.

SG Josef
Gast #186342
Lesenswert?
• ▲
▼
Hallo allerseits

das mit dem PINx und toggeln kann ich nicht nachvollziehen und
erscheint mir auch ziemlich überflüssig.

Man kann doch auch schreiben:

PORTx ^= (1 << BIT_NR);

oder in der übrigen Welt gebräuchlicher

PORTx ^= BIT_MASK;

Das sollte mit jedem C-Compiler und jedem Controller funktionieren.

Grüsse

Joe

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.