Ich habe ein ähnliches Problem mit dem printf-Befehl, das bereits in einem anderen, früheren Thread angesprochen wurde. Bei meinem vorherigen Projekt auf einem ArduinoMega 1280 Board lief alles einwandfrei, aber jetzt bin ich auf eines mit dem AVRMEGA 2560 umgestiegen und der einzig verbliebene printf-Befehl bringt die SW zum Absturz. Nach Tante Google liegt wohl eine falsche Rücksprung/Einsprungadresse vor. Im Makefile habe ich den Prozessor auf den 2560 eingestellt, dennoch bringt das Log im Atmel-Studio 6.0 die Meldung: Device: atmega1280. Ist das die Ursache? Bzw. wo kann das/wie eingestellt werden? Zu meinem Vorgehen: Ich habe die alten Projektfiles des 1280 in einen neue Directory umkopiert, die Namen entsprechend geändert und die alte SW gekürzt (nicht benötigte Routinen und includes rausgeschmissen) Als Compiler wird WIN-AVR von 2010-01-10 verwendet. Ich stehe ziemlich auf dem Schlauch bzw. habe aktuell noch ein Brett vor dem Kopf... Hat einer einen Tipp oder einen Link. wäre supertoll. Makefile habe ich mal angehängt.
MoinMoin, in deinem angehangenen Makefile steht: MCU = atmega1280 Das solltest du vielleicht ändern... Grüße Uwe
Ommmmgh... was bin ich blöde, doppelt blöde. Danke, Uwe. Das Makefile, daß ich gklaubte zu benutzen, steckte in der Projekt-Direktory. Dieses makefile hat auch den richtigen Prozessor... Hingegen ist das verwendete Makefile, und damit auch das, was ich hochgeladen hatten, das "alte" mit dem 1280-Porzessor, und dieses File steht in der Directory ../debug... Was bin ich blöde. Diese Woche ist/war ohnehin nicht "meine"... Mit dem 256er Makefile ist alles okay, es printf't ganz toll. Viele Grüße vom blöden Yogy...
Hanns-Jürgen "Yogy" Mostert schrieb: > Mit dem 256er Makefile ist alles okay, es printf't ganz toll. Kurz gesagt: es geht mit dem anderen vor allem deshalb nicht, weil AVRs mit mehr als 128 KiB Flash beim CALL drei Bytes auf den Stack schieben für die Rücksprungadresse statt nur zwei Bytes bei den kleineren. Normalerweise fällt das nicht sehr auf, aber printf() ist eine sogenannte variadische Funktion, bei der man die Argumente hinter dem Formatstring nicht mehr in Registern übergeben kann, sondern diese auf dem Stack übergibt. An dieser Stelle ist es aber wichtig, wie viel Platz die Rücksprungadresse einnimmt.
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.