www.mikrocontroller.net

Forum: Projekte & Code Tiny13 Betriebssystem


Autor: josef (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Habe ein kleines Betriebssystem für den Tiny 13 geschrieben, das
einen Timerinterrupt mit Blinkled, PWM und AD-Wandlung abdeckt.
Vielleicht erspart es jemanden etwas Arbeit bei der Inbetriebnahme
des Tinys.

SG Josef

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

kleiner Verbesserungsvorschlag zum Togglen der LED. Die neuen µC bieten
die Moeglichkeit durch setzen des PINx den Port zutogglen.


Mfg
Dirk

Autor: josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was meinst du genau Dirk ?


SG Josef

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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... :)

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, jetzt bin ich grad noch über etwas verebesserungswürdiges
gestolpert:

Du könntest noch dazu schreiben, für welchen Compiler das geschrieben
wurde.

Autor: josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: josef (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Nun wird auch der Analogcomparator unterstützt.


SG Josef

Autor: JAM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Feine Idee das Betriebssystem,
aber hat jemand schon sowas für assembler geschrieben???
Wie wäre es noch eine serielle Datenübertragung einzbauen???

MFG

Autor: joe59 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht darum, daß ein

  PORTx ^= (1 << Px3);

Nicht in eine Read-Modify-Write-Orgie, sondern in

  sbi PINx, (1 << Px3)

übersetzt wird. Und das ist nunmal aufgabe der Compilerhersteller...

Autor: Hubert K (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@OldBug:
ich glaub du hast das ^ übersehen. das steht für XOR

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube eher, daß Du nicht verstanden hast, worum es ging ;)

Siehe Datenblätter neuere AVRs, sbi auf PINx. Wobei das 'x' für den
Index steht, zb A oder B.

Autor: Mark Struberg (struberg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"aber hat jemand schon sowas für assembler geschrieben???"

naja, nicht genau das, aber...
http://www.mikrocontroller.net/forum/read-1-240578.html

Autor: hotzplotz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Josef, du hast mir unendlich viel Arbeit erpart ! Das System läuft
wunderbar !

SG Hotzplotz

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.