Forum: Compiler & IDEs Attiny2313 mit AVR Studio 4.13 SP1 Problem


von Horst B. (Gast)


Lesenswert?

Hallo,

ich bin absoluter Neuling in Sachen MicroController. Hab schon sehr viel 
gelesen. Erfolgreich erledigt habe ich folgendes:
AVR Testboard von silvotronic aufgebaut.
Einen Attiny2313 mit einem aus dem Internet geladenen Hex file 
(Blink1,hex) mit ponyprog programmier (LPT1)
Alles Wunderbar!! PortB0 blinkt. Das Testprogramm ist in arm 
programmiert!

Jetzt wollte ich gerne das ganze in C realisieren. AVRStudio 4.13 und 
dieses AVR2007 aus dem Internet geladen. Dank vieler Beiträge hier bin 
ich jetzt soweit das er meinen Quellcode compilieren möchte. Un da hakt 
es.

siehe folgende Zeilen:
**************************Mein QuellCode:

//mein erstes Blink Programm
//blink2.c
#include<io.h>
#include<portpins.h>
void main (void)
{
  unsigned int i;
  while(1)
    {
      PORT0=0x00;
      for (i=0;i<30000;i++);
      PORT0=0x01;
      for (i=0;i<30000;i++);
    }
}

******************Die Fehlermeldung:

Build started 17.11.2007 at 10:51:24
(Grün)avr-gcc.exe -I"C:\winAVR-200700525\avr\include\avr" 
-mmcu=attiny2313 -Wall u.s.w.....
(gelb)../blink.c:6: warning: return type of 'main' is not 'int'
(Rot)../blink.c: In function 'main':
(rot)../blink.c:10: error: invalid lvalue in assignment
(rot)../blink.c:12: error: invalid lvalue in assignment
     make: *** [blink.o] Error 1
Build failed with 2 errors and 1 warnings...

*******************************************************************

Ja und nun bin ich erstmal am Ende. Weiß einfach nicht mehr weiter. 
Vielleicht kann mir einer mal etwas Starthilfe erteilen.

MfG

Baddy

von Benedikt K. (benedikt)


Lesenswert?

Schau mal was in Zeile 10 und 12 steht. Ich vermute mal das sind die 
Ports. Diese Bezeichnungen vergleichst du mit denen aus dem Datenblatt.

von Horst B. (Gast)


Lesenswert?

jo dat funzt. Danke. Die Warnung war das ich void main (void) genommen 
habe. wenn ich int main(void) schreibe dann ist auch die warnung weg.
Werd das gleich mal in den µC schreiben. mal sehen ob es blinkt.
Vielen lieben dank.

Gruß Baddy.

von Horst B. (Gast)


Lesenswert?

Hm?? Es scheint etwas mit der Zeitschleife nicht zu stimmen. Die Diode 
leuchtet nur ganz schwach. Wenn ich die 30000 vergrößere dann leutet sie 
gar nicht.

von Johannes M. (johnny-m)


Lesenswert?

Mit welchem Takt läuft der µC überhaupt? 30000 Takte sind je nach 
CPU-Takt immer noch ne verdammt kurze Zeit, und dann blinkt die LED so 
schnell, dass es nicht mehr fürs Auge erkennbar ist.

Abgesehen davon: Leere for-Schleifen sind Freiwild für den Optimizer des 
Compilers. In diesem Fall werden sie zwar offensichtlich nicht 
wegoptimiert, aber möglicherweise hast Du das Programm auch mit -O0 
compiliert...

Nimm entweder nen Timer oder die Funktionen aus der util/delay.h (die 
laufen aber nur mit eingeschaltetem Optimizer korrekt und sind in ihrer 
Maximalverzögerung begrenzt, Doku lesen!)

von Werner B. (Gast)


Lesenswert?

Warscheilich wird deine Warteschleife wegoptimiert.

Ändere mal "unsigned int i;" in "volatile unsigned int i;".

Zu "volatile" siehe das Tutorial.

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.