PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wecker mit Melodiefuntkion



thomas24
10.12.2007, 15:03
Hiho,
im Zuge eines Vorlesungsproject, habe ich von meinem Prof die Aufgabe erhalten ein Wecker mit Melodiefuntkion zu programmieren. Das ganze soll auf einem AtMega88 laufen.
Mein Gruppenpartner un dich haben beschlossen, dass wir die Zeitausgabe und Weckerfunktion in C zu schreiben und uns per DCF77 das Zeitsignal reinholen. Das auswerten des DCF77 wollen wir aber in Assembler schreiben, da wir dieses bereits an der Schule gemacht haben und uns damit etwas auskennen.

Der Plan sieht wie folgt aus. Alle 24h soll das Assemblerprogram ausgeführt werden, das Signal auswerten und in einem Register ablegen. Danach soll die in C geschrieben Stellfunktion das Register auslesen und die Uhrzeit synchronisieren. Die Ausgabe auf dem Display soll auch in C geschrieben sein. In Assembler findet also wirklich nur die Auswertung des Signals statt und dort auch nur die Stunden und Minuten.

Habt ihr vielleicht ein paar Tips? Speziell wie ich das Assembler Unterprogramm in das eigentlich C-Programm integriere.

fumir
12.12.2007, 16:58
alle 24h synchronisieren ist reichlich ungenau.
ich würds einmal je stunde machen (kostet ja nix).
so ein normaler quarz (und damit deine hardwareuhr) ist nicht all zu genau.

die schnittstelle zwischen c und assembler ist vom verwendeten compilersystem abhängig.
in der doku deines systems solltest du entsprechende hinweise finden.

warum nicht alles in assembler?
bei so ner kleinen aufgabe ist das auch nicht aufwendiger als in C und ihr spart euch die sorgen mit dem interface zwischen den beiden sprachen.
oder eben alles in C !
mischen sollte man das nur, wenn man nen wirklich triftigen grund hat.
z.b. ein großes programm in C (wäre in assembler zu unkomfortabel zu programmieren) mit einigen kleinen hardwarenahen oder sehr zeitkritischen teilen.
In eurem fall sehe ich da keine echte notwendigkeit für c wenn ihr doch mit assembler vertraut seit.

es gibt einige prinzipielle verfahren um die sprachen zu mischen:
A) einzelne assembler befehle als teil einer c-funktion direkt in den c-code einbauen (siehe inline)
B) ganze assembler routinen direct in den c-code schreiben, die dann wie ne c funktion aufgerufen werden können (siehe inline)
C) den assemblerteil als eigene übersetzungseinheit in eine objektdatei compilieren und diese dann mit dem linker mit den c-teilen verbinden.

u.a. im RN-Wissen Artikelbereich findet man auch etwas dazu. da könnte man ja auch erst mal lesen, bevor man andere mit fragen von der langeweile abhält (von der nicht alle so viel haben wie ich :-)