Probleme mit WINAVR

Gast #178864
Lesenswert?

Hallo!

Ich habe die ganze Zeit die CodeVisionAVR Software benutzt. Jetzt
möchte ich meinen ATMEGA8535 mit WINAVR programmieren. Das Toll habe
ich heruntergeladen und installiert. Ich komme mit der Software nicht
klar.
Was muss ich einstellen damit ich mit WINAVR ein HEX-File für den
ATMEGA8535 erzeugen kann?
Gast #178868
Lesenswert?

Wie muss ich die Batch Datei im WINAVR einbinden?

Batchdatei von Andreas Hesse:
Ich compiliere immer in der DOS-Box mit einer Batch:

@echo off

:set mcu=90s2313
:set mcu=tiny26

set mcu=mega8

set main=test

set ac=c:\avr\winavr

path %ac%\bin;%path%
avr-gcc.exe -Os -mmcu=at%mcu% -Wall -g -o main.out *.c
if not exist main.out goto end
cmd /c avr-objdump.exe -t -h -S main.out >%main%.lst
cmd /c avr-objcopy.exe -O ihex main.out %main%.hex
avr-size.exe -B main.out
del main.out

:end
Gast #178869
Lesenswert?

Hallo,

die Batchdatei ist nicht von mir... hab diese auch nur abgeschrieben.
Ich verstehe aber Dein Frage nicht so richtig. Die Batchdatei kann von
der DOS-Box aufgerufen werden, oder Du bindest diese in Deinen Editor
mit ein (sofern Dein Editor das zulässt).

Gruss
Andreas
Gast #178873
Lesenswert?

Hallo,

ich mach das wie folgt:

Zu jedem Projekt wird eine Batch-Datei angelegt (die auch im
Projektverzeichnis liegt) (siehe Anhang).

Im Editor rufe ich dann nur noch diese Batch auf.

Der Hex-File wird durch das Commando "cmd /c avr-objcopy.exe -O ihex
main.out %ProgName%.hex" erzeugt.

Gruss
Andreas
Angehängte Dateien:
Gast #178874
Lesenswert?

So das compilieren funktioniert mit der WINAVR Software.
Was ich jetzt nur noch nicht verstehe ist, warum dieser Code in diesem
C Programm? Was muss ich da tun wenn ich den ATMEGA8535 betreiben
will?

---------------------
#if defined(_AVR_AT90S2313_)
#  define OC1 PB3
#  define OCR OCR1
#  define DDROC DDRB
#elif defined(_AVR_AT90S2333_) || defined(_AVR_AT90S4433_)
#  define OC1 PB1
#  define DDROC DDRB
#  define OCR OCR1
#elif defined(_AVR_AT90S4414_) || defined(_AVR_AT90S8515_) || \
      defined(_AVR_AT90S4434_) || defined(_AVR_AT90S8535_) || \
      defined(_AVR_ATmega163_)
#  define OC1 PD5
#  define DDROC DDRD
#  define OCR OCR1A
#elif defined(_AVR_ATmega8_)
#  define OC1 PB1
#  define DDROC DDRB
#  define OCR OCR1A
#  define PWM10 WGM10
#  define PWM11 WGM11
#elif defined(_AVR_ATmega64_) || defined(_AVR_ATmega128_)
#  define OC1 PB5
#  define DDROC DDRB
#  define OCR OCR1A
#  define PWM10 WGM10
#  define PWM11 WGM11
#else
#  error "Don't know what kind of MCU you are compiling for"
#endif

#if defined(COM11)
#  define XCOM11 COM11
#elif defined(COM1A1)
#  define XCOM11 COM1A1
#else
#  error "need either COM1A1 or COM11"
#endif
-----------------------------
Angehängte Dateien:
Gast #178875
Lesenswert?

Hallo,

normalerweise schreibe ich nur in der Batchdatei den betreffenden Wert
in mcutype herein. Das sollte ausreichen.
Mit den #ifdef... Anweisungen kannst Du das gleiche Programm ohne
Änderung auf verschiedene Controller übertragen. Ansonsten kann es
sein, das Du bei einem anderen Controller Register und Pin-Definitionen
anpassen musst.

Gruss
Andreas
Gast #178876
Lesenswert?

Du musst mein demo.c, das jeder avr-libc und damit auch jedem WinAVR
beiliegt, hier nicht unbedingt re-posten. ;-)

Sorry, aber wenn man nicht weiß, wie man ein Auto fährt, muss man das
eben lernen.  Wenn man mit einer Programmiersprache nicht umgehen
kann, muss man das auch lernen.  Der C-Präprozessor und seine
Benutzung gehören einfach zu so grundlegenden Methoden bei der
Programmierung in C, dass Dir Andreas hier zwar eine völlig
zutreffende Antwort gegeben hat (demo.c soll auf möglichst vielen
verschiedenen Controllern lauffähig sein, da es so eine Art ,,Hello
world!''-Programm ist), aber ich habe meine Zweifel, ob Du damit
wirklich nennenswert weiter kommst.

1.) Bitte lerne wenigstens die Grundlagen von C, bevor Du es benutzt.
Das geht übrigens auf einem Universalcomputer deutlich einfacher als
auf einem Controller.  Den GCC gibt's auch für Windows, und er
,,benimmt'' sich dort fast genauso (wird also auch von einer
Kommandozeile aufgerufen bzw. mam kann das über ein Makefile machen).

2.) Bitte beherzige den Rat, den Dir Patrick (OldBug) und Martin
(mthomas) gegeben haben, und arbeite erstmal die verfügbare Doku
durch, bevor Du einfach nur endlos Fragen stellst.  Das kostet sicher
ein paar Tage, aber wenn Du Dir dabei Mühe gibst, es auch zu
verstehen, ist das die Grundvoraussetzung dafür, dass Du später auch
selbstständig Deine eigenen Probleme lösen können wirst.  Fragen wird
Dir sicher hier jeder gern beantworten, aber es wird Dir niemand
freiwillig Deine kompletten Probleme als unbezahlten Job lösen wollen
und/oder die umfänglich und mit viel Aufwand geschriebenen
Dokumentationen und Tutorials nochmal Stück für Stück als Antwort auf
einen Thread zitieren wollen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren