PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Absolut Anfänger



Rosenthal
17.05.2005, 14:23
Hallo, wie sehr sehr viele meiner Vorgänger bin ich absolut ein Anfänger in Sachen Mikrocontroller. Ich habe ein STK500 Testboard mit einem ATMEGA163L.

So nun zu meinem Problem oder Problemen(;:

Ich habe mir WINAVR besorgt, da ich den Controller in C programmieren möchte. Mit dem Programmers Notepad (PN) habe ich ein klitzekleines Programm geschrieben, welches die LEDs an Port b ansteuern soll. Und zwar sollen sie so Leuchten 10101010 das entspricht ja 0xaa.

Das Prog lautet
#include <avr/io.h>
int main(void){
DDRB = 0xff;
while(1){
PORTB = 0xaa;
}
}

Über den PN habe ich das als diode.c abgespeichert. In MFile habe ich folgende Einstellungen:
Main file name --> diode
MCU type --> atmega163
Output format --> ihex
Optimization Level--> s
Debug format --> ELF/DWARF-2(AVR Studio ELF, GDB[experimental])
C standard level --> gnu99
C/C++ Source File --> diode.c
Assembler... --> none
printf() options --> none
scanf() options --> none
Programmer --> STK500
Port ---> COM1

Wie kann ich jetzt eine hex-File erstellen? Ich speichere das makefile in das gleiche Verzeichnis wie diode.c. Wenn ich dann übers PN make all aufrufe bekomme ich die Meldung:

>"make.exe" all
----begin----
avr-gcc (GCC) 3.4.3
Copyright blablabla

make.exe:***No rule to make target 'diode.o' needed by 'diode.elf'. Stop.
> Process Exit Code:2

Ich denke mal ich mache irgendas grundsätzliches falsch. Kann mir einer (oder mehrere) mal sagen was ich falsch mache?
Funktioniert "mein" Programm eigentlich so?


2. Problem
Ich habe auch Ponyprog2000.
Wenn ich damit den EEPROM auslesen möchte bekomme ich die Meldung:
"Device missing or unknowing device (-24)
Eingestellt habe ich unter Setup-->interface setup-->Serial SIProg API Com1
Unter Device ist der mega163 angekreuzt.
Welche Einstellungen benötige ich noch um das STK500 anzusteuern. Ich finde keine Einstellungen für STK500 bei Ponyprog.

Vielen Dank schon mal

bertl100
17.05.2005, 14:42
zu 2.
Probiers mal mit SI Prog I/O

Rosenthal
17.05.2005, 14:47
Danke schonmal

Hatte ich schon Probiert. Funktioniert auch nicht. Was für Einstellungen muss man bei "Select Polarity of the control lines" tätigen?

d.wilken
18.05.2005, 09:17
Hallo


Wenn Du nur die Datei diode.c verwendest, sollte im Makefile unter "C/C++ Source File" kein Eintrag vorhanden sein, da dort nur zusätzliche Dateien aufgeführt werden (Damit sollte das Problem schon gelöst sein)

Noch ein paar Anmerkungen:
Dein Programm sollte funktionieren. Jedoch würde ich sicherheitshalber statt "int main..." lieber "void main..." verwenden

Den Optimierungslevel solltest Du abschalten (0). Da es als Neuling schon mal vorkommt, einfach mal diversen Code zu probieren (auch wenn er wenig Sinn macht) kann der Compiler diesen möglicherweise "wegoptimieren" (Ist mir schon passiert) .

Gruß

Rosenthal
18.05.2005, 10:23
Hallo,
Hab ich gemacht, aber bekomme immer noch die gleiche Meldung
"No rule to make target 'diode.o', needed by 'diode.elf' Stop."

d.wilken
18.05.2005, 14:50
OK,

Offensichtlich ist das Problem "problematischer" als ich dachte.
Hier noch ein paar Ideen:

Im Makefile solltest Du unter "Default make Target" standard oder AVR Extended COFF eintragen

Überprüf mal Deine PATH-Einstellung im Betriebssystem: Es sollten die Einträge für die Pfade "WinAVR/bin" sowie "WinAVR/utils/bin" vorhanden sein

Falls das noch nicht hilft, solltest Du mal dein Makefile schicken (Welche Version von WinAVR verwendest Du ?

Gruß

Rosenthal
19.05.2005, 07:22
@d.wilken

Version des Notepads ist 2.0.5.48, Version des Makefiles ist 1.41 vom 15.7.2004.
Alle Compiler sind in den Verzeichnissen vorhanden. Ich benutze im übrigen Win XP, falls das damit was zu tun hat.

Ich versuche mal mein Makefile als Attachment hinzuzufügen.

d.wilken
19.05.2005, 08:54
Ich kann das Problem leider nicht nachstellen, da meine Version etwas älter ist. Aber ich hätte noch folgende Ideen zum Probieren (falls Du noch nicht aufgegeben hast):

Im Auswahlfeld "C/C++ source file(s)" solltest Du mal den Haken bei "Include diode.c" umswitschen

Deine Hauptdatei solltest Du main.c nennen

Ansonsten habe ich leider keine weiteren Ideen
Gruß

Rosenthal
19.05.2005, 10:10
Danke schon mal.
Jetzt hat sich was geändert. Es kommt folgende Meldung:

> "make.exe" all

-------- begin --------
avr-gcc (GCC) 3.4.3
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Linking: main.c.elf
avr-gcc -mmcu=atmega163 -I. -gstabs -DF_CPU=8000000UL -O0 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns= -std=gnu99 -MD -MP -MF .dep/main.c.elf.d --output main.c.elf -Wl,-Map=main.c.map,--cref -lm
E:/winavr/bin/../lib/gcc/avr/3.4.3/../../../../avr/lib/avr5/crtm163.o(.init9+0x0): undefined reference to `main'
make.exe: *** [main.c.elf] Error 1

> Process Exit Code: 2

d.wilken
19.05.2005, 11:24
Prima !
Dann ist das Problem ja schon so gut wie behoben !

Ich habe mal ein bischen rumprobiert (ist ja oft die effektivste Art Probleme zu lösen).

Ich konnte den Fehler nachstellen. Behoben wurde er durch das Setzen des Häkchens "include main.c" ("Bei Auswahl C/C++ Source file(s)" )

Wenn Dein Projekt nur aus der Datei "main.c" besteht, wird diese durch den Haken bekannt gemacht (Und wie gesagt: kein Eintrag in der Liste der Source-Files).

In Deinem Makefile sollte dann in etwa folgendes stehen:
# Target file name (without extension).
TARGET = main

# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c

PS: Zum Thema "void statt int" : War kein guter Vorschlag meinerseits. Gibt Warnung "return type of 'main' is not `int' " Also doch besser int statt void

Ich hoffe, ich konnte helfen
Gruß

Rosenthal
19.05.2005, 11:48
Vielen vielen Dank.
Sehe nun Licht am Ende des Tunels. Wenn auch ein recht kleines.
Der Compiler meckert nur noch über das true in der while Schleife. Habe es einfach mal durch eine 1 ersetzt. Siehe da...

... ich habe meine erste *.hex File.

d.wilken
19.05.2005, 12:16
Schön !

Um Dinge wie "true" zu verwenden, solltest Du Deine eigene Header-Datei schreiben (Eine Änderung im Makefile ist dafür nicht notwendig) und diese mit z. B. #include "main.h" einbinden. Da kannst Du dann auch Deine Variablen definieren (und da gehört auch Deine Definition für true hin: "#define true 1")

Gruß

veloxid
07.07.2005, 15:43
HI

Ich hab fast den gleichen Fehler:
inking: main.elf
avr-gcc -mmcu=atmega16 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns= -std=gnu99 -MD -MP -MF .dep/main.elf.d --output main.elf -Wl,-Map=main.map,--cref -lm
C:/Programme/WinAVR/bin/../lib/gcc/avr/3.4.3/../../../../avr/lib/avr5/crtm16.o(.init9+0x0): undefined reference to `main'
make.exe: *** [main.elf] Error 1

Ich verstehe net wieso; hab auch schon alles versucht was hier im Thread gesagt wurde, # Target file name (without extension).
TARGET = main

# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c

,...
alles hatnichts genützt kann mir jemand helfen?