Hey .. habe nen ultra dummes Problem mit dem angehangenen Source ... hier Auszugsweise mal die Hauptschleife im main(void) : while (1) { // delay(1000); for (a = 1; a<=1000; a++) { for (b = 1; b<=100; b++) {a=a;} } PORTD ^= PD1; } Soll ne LED ganz simple zum blinken bringen .. so wie es da steht, geht auch alles ganz wunderbar!!! Nehme ich nun die for-Schleifen raus und setze den Funktionsaufruf wieder in Kraft, passiert nada! while (1) { delay(1000); PORTD ^= PD1; } Wäre cool, wenn jemand nen Blick in den Source wirft und mir sagt, wo der Fehler liegt. Er ist klein, da bin ich mir sicher .. und ich werde mich danach bestimmt schämen ;)) ... Danke Hermann PS: Geht es euch auch so, dass ihr nach nem Prozessorwechsel immer wieder von vorne anfangen müsst??
ich benutz den icc compiler nicht aber trotzdem mal ein paar vorschläge. ist das argument bei delay die mikro oder millisekunden der pause?
Merkwürdig. Ich kenn mich mit dem ICC auch nicht aus, aber wenn du deine Funktion delay() über die main() Funktion schreibst, dann brauchst du normalerweise kein Prototypendefinition. Die Anweisung a=a; kannst du auch weglassen. Fehlermeldungen gibt der Compiler auch keine raus???
Der Code ist zwar etwas seltsam, sollte aber funktionieren. Was sagt denn das Assemblerlisting?
Hallo was ist nada ? ist LED aus oder an, ist es sicher dass sie nicht ganz schnell blinkt - also dass was mit delay nicht stimmt ? kannst Du das mit nem oszi checken ? gerhard
@Tobi: Nichts von beiden .. hat keinen Zeitbezug .. ist nur ne einfache Verzögerung über zwei Schleifen die time variable wird einfach in die äussere Schleife eingesetzt um das leicht variieren zu können! @Praktikant: Jepp .. das a=a hab ich durch nen ; ersetzt ... mit und ohne Prototypes geht es leider nicht .. @All: Es hat auch nicht speziell was mit dem delay zu tun .. es geht einfach darum, dass ich keine Funktionen aufrufen kann. Ich habe versucht das "PORTD ^= PD1;" in ne Funktion auszulagern - ging auch nicht! Mit dem MEGA8 und MEGA16 ging das auf dem ICC ohne Probleme ... erst jetzt, wo ich den 128 drann hab, geht das nicht mehr ... Hermann
Hast Du die Compiler- und Linkeroptionen richtig eingestellt? Ansonsten wie gesagt das Assemblerlisting lesen!
Hmm .. also Linker und Compileroptionen muss ich mal schaun .. habe da noch nicht so die mega Erfahrung drinn. Das gleiche bezieht sich auf das ASM-Listing (s.o.) Find es nur merkwürdig, dass ganz simple Funktionsaufrufe nicht gehen! hermann
So .. also es scheint am Compiler / Linker zu liegen ... nach nem Upgrade und dem Versuch als Device den 128 mit m103 option zu nehmen, ging es .. Danach ergeben sich einige Unterschiede bei der Herstellung: iccavr -o Mega128 -LC:\Programme\uC\ICC\lib\ -ucrtatmega.o -bfunc_lit:0x60.0x20000 -dram_end:0xfff -bdata:0x60.0xfff iccavr -o Mega128 -LC:\Programme\uC\ICC\lib\ -ucrtatmega.o -bfunc_lit:0x8c.0x20000 -dram_end:0x10ff -bdata:0x100.0x10ff Der untere Eintrag geht nicht richtig .. der obere (mit m103 supp.) einwandfrei .. Wobei das m103 Flag nicht programmiert ist! Hermann
Hmm .. muss mich berichtigen .. das Flag war doch programmiert! Ist das so bei Auslieferung? ... Weil kann mich nicht drann erinnern, das getan zu haben! Egal .. jetzt geht wieder alles ganz normal ... Thx Hermann
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.