Forum: Compiler & IDEs vom C code zur *.hex file


von S. S. (-xc-)


Lesenswert?

ich weiß es ist eine ziemliche anfängerfrage :P

ich habe mir dieses programm aus einem anderen alten thread geliehen... 
und versuche es in eine hex file zu kompilieren...


Installiert habe ich:
AVR-Studio
WinAVR

ich habe den quelltext ins programmers notepad kopiert und dann auf 
tools make all geklickt
ergebnis:
make.exe: *** No rule to make target `all'. Stop.

nach einiger suche habe ich rausgefunden das ich die file erst als 
test.c speichern muss, und dann das programm MFile aufrufen muss...
> und da hört es dann auf...ich habe keinen blassen schimmer was ich da machen 
muss

---> ich habe zur zeit noch nichts an hardware (programmierschnittstelle 
etc.)
Ist die evtl. für das programm Mfile von nöten? oder läuft das alles pc 
intern bis zum eigentlich aufspielen?

1
#include <stdint.h>
2
#include <stdio.h>
3
#include <avr/io.h>
4
5
DDRD = 0xff;
6
bool bAusgang;
7
bAusgang = PD7;
8
9
/*--------------------------------------------------------------------
10
Hauptprogramm 
11
----------------------------------------------------------------------*/
12
void zeit(void);       //Prototypen-Anmeldung
13
14
void main(void)
15
{
16
  while(1)
17
  {
18
    zeit();                   //Delay von xxx Mikrosekunden
19
    bAusgang=~bAusgang;       //Bit komplementieren
20
  }
21
}
22
/*-----------------------------------------------------------------------
23
Zusatzfunktionen
24
-------------------------------------------------------------------------*/
25
void zeit(void)
26
{
27
  unsigned int x;
28
  for(x=0;x<=62;x++);    //Int-Wert 62 ergibt xxx Mikrosekunden Delay
29
}

von Roland Praml (Gast)


Lesenswert?

Also du hast vermutlich kein Makefile.

Am Einfachsten ist es wohl, das AVRstudio zu starten und am Anfang ein 
neues GCC-Projekt zu erstellen.
Da schreibst einen Projektnamen rein und lässt dir ein initial File 
(z.B. main.c) erstellen. Da kopierst dann den Code und drückst COMPILE

Dass du noch keine Programmierhardware hast, ist nicht schlimm, du 
kannst den Code anschließend gleich im AVRstudio simulieren.

Gruß
Roland

von Roland Praml (Gast)


Lesenswert?

... und dann machst vermutlich gleich Bekanntschaft mit der Optimierung.

Wenn in den Compilereinstellungen die Optimierung ein ist (und das ist 
sie und soll auch so sein) wird dir folgende Codezeile mit sicherheit 
"wegoptimiert":
1
for(x=0;x<=62;x++);    //Int-Wert 62 ergibt xxx Mikrosekunden Delay

Gruß
Roland

von S. S. (-xc-)


Lesenswert?

bis zum optimierer bin ich leider nicth gekommen :P
der debuger hats mir schon verhagelt ^^ ich habe zwar keinen blassen 
schimmer was genau falsch ist aber gut..

ich habe eben selber was zusammen gedichtet umzusehen ob es funktioniert

wenn ich auf kompilieren drücke produziert mir das programm eine main.o 
und eine makefile datei...
was muss ich damit machen?

zu dem von dir genannten punkt: wie verhindere ich denn diese 
optimierung?

von S. S. (-xc-)


Lesenswert?

super, dank dir!

hab jetzt alles am laufen :D

und endlich zahlt es sich aus das ich immer versuche kompakt 
zuprogrammieren :D


verdammt jetzt kann ich nicht mehr aufhören zulesen :P

von S. S. (-xc-)


Lesenswert?

ich schreib das jetzt einfach mal hier noch rein...für diese minifrage 
lohnt kein thread:


was passiert eigentlich wenn ich nicht mithilfe von
1
DDRx
ein und ausgänge definiere?

standardmäßig sind doch alle bits auf 1 gesetzt, oder?
heißt das wenn ich nicht definiere sind alle pins ausgänge?


gruß

von Karl H. (kbuchegg)


Lesenswert?

S. S. schrieb:

> standardmäßig sind doch alle bits auf 1 gesetzt, oder?

Sagt wer?

> heißt das wenn ich nicht definiere sind alle pins ausgänge?

... und welchen Pegel haben diese Ausgänge? Und ist das vernünftig, dass 
die Pins nach dem Einschalten diese Pegel haben?



Es ist natürlich nicht so.
Standardmässig sind die Pins Eingänge und nehmen als solche jeden Pegel 
an, der von einer Aussenbeschaltung vogegeben wird. Und das ist auch gut 
so. Umgekehrt wärs blöder.

von S. S. (-xc-)


Lesenswert?

>> standardmäßig sind doch alle bits auf 1 gesetzt, oder?

>Sagt wer?

hab gerade nochmal gesucht..es war wohl nur auf die Fuse bits bezogen

   Fuse-Bit nicht programmiert   entspricht dem logischen Wert 1
  Fuse-Bit programmiert   entspricht dem logischen Wert 0
quelle: http://s-huehn.de/elektronik/avr-prog/avr-prog.htm


>... und welchen Pegel haben diese Ausgänge?
den würde ich dann ja schon setzen...ich hätte dann nur die 
ausgangs-zuweisung weggelassen
den signalzustand setzt man doch mit
1
PORTx
oder?
letztlich aber auch egal da es ja eh nicht geht ^^


>Und das ist auch gut so. Umgekehrt wärs blöder.

hatte ich mir auch so gedacht...hatte nur das mit den "standardmäßigen 
einsen" im kopf...


aber defakto heißt das, daß ich nur die ausgänge definieren muss.
Die eingänge sind dann die nicht zum ausgang definierten pins, richtig?

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.