Forum: Mikrocontroller und Digitale Elektronik Source Problem ICC


von Hermann Gebert (Gast)


Angehängte Dateien:

Lesenswert?

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??

von Tobi (Gast)


Lesenswert?

ich benutz den icc compiler nicht aber trotzdem mal ein paar vorschläge.
ist das argument bei delay die mikro oder millisekunden der pause?

von Praktikant (Gast)


Lesenswert?

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???

von Marko B. (Gast)


Lesenswert?

Der Code ist zwar etwas seltsam, sollte aber funktionieren. Was sagt
denn das Assemblerlisting?

von Gerhard Gunzelmann (Gast)


Lesenswert?

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

von Hermann Gebert (Gast)


Lesenswert?

@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

von Marko B. (Gast)


Lesenswert?

Hast Du die Compiler- und Linkeroptionen richtig eingestellt? Ansonsten
wie gesagt das Assemblerlisting lesen!

von Hermann Gebert (Gast)


Angehängte Dateien:

Lesenswert?

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

von Hermann Gebert (Gast)


Lesenswert?

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

von Hermann Gebert (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.