Hallo zusammen, ich habe eine Frage bezüglich eines Beispielprogramms. Es handelt sich um ein Beispiel für das AT90USBKEY. Das Beispielprogramm wurde von Atmel geschrieben. Ich versuche jetzt einiges zu verstehen aber das ist gar nicht so leicht. Das fängt leider schon in der main.c an. Bei mir sieht die main.c meistens so irgendwie aus: int main(void) { Initialisierung von Variablen, uart, lcd, … while (1) { ev. aufruf von Funktionen… } } Bei dem Atmelbeispiel sieht das allerdings so aus: int main(void) { wdtdrv_disable(); Clear_prescaler(); scheduler(); return 0; } //! \name Procedure to speed up the startup code //! This one increment the CPU clock before RAM initialisation //! @{ #ifdef _GNUC_ // Locate low level init function before RAM init (init3 section) // and remove std prologue/epilogue char __low_level_init(void) _attribute_ ((section (".init3"),naked)); #endif char __low_level_init() { Clear_prescaler(); return 1; } Jetzt habe ich da ein paar Fragen. Wann wird denn die Funktion „__low_level_init(void)“ aufgerufen? Wird main nur einmal aufgerufen? Wo ist denn da die „Endlosschleife“? Was mich eigentlich am meisten interesiert ist, was macht die Funktion „__low_level_init(void)“ eigentlich? Was ist damit gemeint, dass diese Prozedur den startup code beschleunigt? Was wird da gemacht bevor der RAM initialisiert wird und was passiert beim initialisieren des RAM’s? Dann gibt er da den „Scheduler“. Was macht denn ein Scheduler? Beim überfliegen des Codes fällt mir auf, dass im Scheduler eigentlich nur der Ablauf des Programms gemanagt wird. Aber ein Code im Controller läuft doch eh sequenziell ab, also läuft doch alles nacheinander ab. Oder wird so etwas verwendet um z.B. etwa in einem „Durchlauf“ zweimal, statt nur einmal in einem Durchlauf aufzurufen? Bin über jede Antwort sehr dankbar. Gruß Marcel
Zum Sheduler findet man sehr viel im Internet denke ich: http://de.wikipedia.org/wiki/Prozess-Scheduler dieser plant die zeitliche ausführung der Tasks hintereinander. Somit vermute ich auch eine Endlosschleife in der Funktion scheduler(). main() wird immer nur ein einziges mal aufgerufen, so viel ist sicher. Marcel K. schrieb: > Bei dem Atmelbeispiel Kannst du das ein wenig genauer spezifizieren, damit man evtl. selbst man in den Code schauen kann? Am besten mit Link. Was low_level_init() macht kann ich dir nun auch nicht auf die schnelle sagen. In eigentlich jeder Entwicklungsumgebung kannst du über alle Dateien suchen, such doch einfach mal nach dieser Funktion, dann wirst du bestimmt finden wo sie aufgerufen wird.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.