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.
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) .
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.
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ß
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.
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
Lesezeichen