Forum: Mikrocontroller und Digitale Elektronik AVR-CC


von Niki Hammler (Gast)


Lesenswert?

Hallo,

1.) Mein AVR geht wieder, es war doch der XTAL kaputt...jetzt hab ich 
halt zwei CPUs zu Hause
2.) Was produziert avr-gcc für ein Ausgabeformat?? Ich erhalte eine 
*.rom Datei die viel zu gross ist (>350Bytes).
Wie kann ich so ein Programm mit isp_avr überspielen? hexbin2.exe nimmt 
nur die ersten 255 Bytes und ich weiss nicht ob das wirklich so richtig 
ist
3.) Kennt jemand ein Tutorial für den Start? Ich hab ja nur ein LED 
und einen Schalter dran (PB0 und PB1) möchte aber trotzdem ein wenig 
experimentieren.
4.) Sollte mein LED, das an Port PB0 angeschlossen ist, jede Sekunde 
leuchten wenn ich folgendes Programm schreibe? (ok, vielleicht keine 
Sekunde aber so dass ich es sehen kann)

#include <io.h>

void delay(void)
{
  int i = 0;
  for(i=0;i<60000;i++) { }
}

int main(void)
{
  char status = 0;
  outp(0xFF, DDRB);
  for(;;)
  {
    switch(status)
    {
      case 0: outp(0x80, PORTB); status = 1; break;
      case 1: outp(0x00, PORTB); status = 0; break;
    }
    delay();
    delay();
  }
}

Niki

von Jonas Diemer (Gast)


Lesenswert?

Hi!

1) wie, xtal kaputt. meinste den quarz?

2) also bei mir ist die rom datei bei gcctest1 genau 394 bytes (nicht 
kbytes!) groß und im ihex format. kann also problemlos von ponyprog 
gelesen werden

3) schau dir die gcctest programme an.

4) nun ja, wenn du die optimierung einschaltest, wird der compiler deine 
schleife wegoptimieren, weil dort nix gemacht wird... kannst ein nop 
oder sonstwas einfügen.

jonas

von Andreas (Gast)


Lesenswert?


von Christian Fuchs (Gast)


Lesenswert?

Hallo,

zu 4:
Ich würde jetzt mal sagen, dass das mit dem <60'000 nicht geht, da int 
meines Wissens nach so breit ist, wie der Bus des Prozessors, da diese 
Variablen am schnellsten verarbeitet werden können. Wären beim AVR also 
8 Bit. Und in 8 Bit passen diese 60000 halt nicht rein...

Mit uint16_t (?weiß nicht genau) sollte das gehen.(0-65535)

Bitte um Rückmeldung, wenn das beim AVR mit der breite von int's anders 
gehandhabt wird...


ciao

      Christian

von Jonas Diemer (Gast)


Lesenswert?

aus include/inttypes.h:

typedef signed char int8_t;
typedef unsigned char uint8_t;

typedef int int16_t;
typedef unsigned int uint16_t;

typedef long int32_t;
typedef unsigned long uint32_t;

typedef long long int64_t;
typedef unsigned long long uint64_t;

typedef int16_t intptr_t;
typedef uint16_t uintptr_t;


int ist also (bei avr-gcc) 16 bit breit, aber geht von -32768 bis 
+32767. Das müsste also ein unsigned int sein.

von Christian Fuchs (Gast)


Lesenswert?

Hallo,

interessant, da hat mich das C-Tutorial, wo ich das herhab, angelogen 
;-)

Aber auf moderneren PC's stimmt das tatsächlich, denke ich, also bei NT: 
int=32bit


ciao

      Christian

von Jonas Diemer (Gast)


Lesenswert?

Ja, das stimmt. hängt aber i.d.R. nicht vom betriebsystem, sondern von 
der prozessorarchitektur ab... bei einem 32bit prozessor (pentium 
klasse) sind ints 32bit lang, beim alpha glaub ich 64bit.

in normalem c sollte man deshalb short int (16 bit) und long int (32/64 
bit) benutzen (bzw deren unsinigned pendants).

bei avr-gcc bieten sich die typen nach dem format int<bit-anzahl>_t bzw. 
uint<bit-zahl>_t an.

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.