PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Erstes Programm in C für den RP6



Eigo
14.08.2009, 18:18
Hallo,
ich habe Heute mein aller erstes Programm in C geschrieben und habe mich relativ nah an einem schon bestehenden Beispielprogramm gehalten um erstmal etwas in die Sprache rein zu finden.

Hab meinen Text schön zusammen geschrieben, als ich fertig war, wollte ich dann den Befehl "Make All" ausführen um eben die .hex Datei zu erstellen (mir kam es alles schon iwie bisschen spanisch vor).

Auf jedenfall ging das dann schonmal nicht. Folgendes steht im Output:


> "make.exe" program
make.exe: *** No rule to make target `program'. Stop.

> Process Exit Code: 2
> Time Taken: 00:01


Tut mir leid wenn ich jetzt vielleicht voll die Anfänger Fehler mache :/

Danke schonmal im Vorraus 8-[

Hier ist mein folständiger Quellcode, es soll nur ein wenig Text ausgegeben werden und anschließend alle LEDs des RP6 ein geschaltet und nacheinander mit 1s Verzögerung wieder ausgeschaltet werden:



/*Das ist mein erstes in C geschriebenes Programm. Es soll lediglich einmal alle
LEDs aufblinken und anschließend wieder löschen. Desweiteren gibt es einen Text
über die serielle Schnittstelle des µC aus!


Hier binden wir die RP6 Funktionsbibliothek ein. Diese stellt sehr viele nützliche Funktionen
und vordefinierte Dinge bereit, die das Ansteuern der Hardware immens erleichtern.
Das müssen wir über eine sog. Headerdatei (Endung „*.h“) einbinden, da
der Compiler sonst nicht weiss, wo er die ganzen Funktionen finden kann. Header
braucht man für alle Dinge, die in externen C-Dateien liegen. Wenn Sie sich mal den
Inhalt von der RP6RobotBaseLib.h und dann noch der RP6RobotBaseLib.c ansehen,
werden Sie das Prinzip wahrscheinlich besser verstehen. Mehr zu „#include“ folgt im
Kapitel über den Präprozessor.*/


#include "RP6RobotBaseLib.h"



// 1000ms = 1s Pause

//Hier beginnt die Main Funktion hier startet ein jedes Programm. Aus der Main Funktion
//können dann immer noch Interrupts aufgerufen werden oder auch andere "Unterprogramme"

int main(void)

//void bedeutet nur, diese Funktion hat keinen Parameter und keinen Rückgabewert!
//Der abzuarbeitende Programmtext einer Funktion (z.B. Main) steht immer in {...}



//Also startet hier jetzt der Quelltext der Funktion "Main"

{
initRobotBase();

//Dieser Befehl muss IMMER als erstes aufgerufen werden, da sonst evtl. manche
//Komponenten des Roboters nicht richtig funktionieren


//Jetzt wird als erstes ein Text über die serielle Schnittstelle ausgegeben, das
//geht relativ einfach mit nur einem Befehl.

writeString_P("Hallo!\n");
writeString_P("Das ist mein erstes Programm.\n");
writeString_P("Programiersprache = C\n");

//Erklärung von Sonderzeichen:
// '\n' = Zeilenumbruch/Neue Zeile


//Diesen Befehl hatten wir ja eben bereits, also eine weitere Textausgabe

writeString_P("Hello World! My name is Robby!\n");
writeString_P("Let's go! :)\n");


//Jetzt geht es an die LEDs auf dem Roboter, wir wollen sie alle 1 mal einschalten
//und anschließend alle NACHEINANDER aus!


//LEDs:

setLEDs(0b111111);

//Mit diesem Befehl können wir alle LEDs einschalten.

mSleep(1000);

statusLEDs.LED1 = false;

// LED1 im LED Register deaktivieren

updateStatusLEDs();

// Änderungen übernehmen!

mSleep(1000);

statusLEDs.LED2 = false;

// LED2 im LED Register deaktivieren

updateStatusLEDs();

// Änderungen übernehmen!

mSleep(1000);

statusLEDs.LED3 = false;

// LED1 im LED Register deaktivieren

updateStatusLEDs();

// Änderungen übernehmen!

void mSleep(uint16_t 1000)

statusLEDs.LED4 = false;

// LED1 im LED Register deaktivieren

updateStatusLEDs();

// Änderungen übernehmen!

mSleep(1000);

statusLEDs.LED5 = false;

// LED1 im LED Register deaktivieren

updateStatusLEDs();

// Änderungen übernehmen!

mSleep(1000);

statusLEDs.LED6 = false;

// LED1 im LED Register deaktivieren

updateStatusLEDs();

// Änderungen übernehmen!



}

//Hier ist das Hauptprogramm zu Ende

return 0;
}

Hubert.G
14.08.2009, 19:28
Was hast du in dein makefile hineingeschrieben

Eigo
14.08.2009, 19:55
Gut somit dürfte der Fehler klar sein.
Ich hab gar kein Makefile.. Habe lediglich im PN mein C Programm niedergeschrieben. Danke für die schnelle Antwort!

edit: Wie erstelle ich ein Makefile, bzw. wofür ist ein Makefile?
Vielleicht gibt es ein tutorial oder ähnliches?

Hubert.G
14.08.2009, 20:18
In makefile steht wie der ganze compiliervorgang ablaufen soll, welcher Controller, welche Files usw. Ich programmiere aber schon seit längeren mit dem AVR-Studio, da braucht man keines und kann, zumindest einfachere, Codes gleich simulieren.
Aber google man nach makefile, da findest du sicher etliches.

SlyD
14.08.2009, 20:20
t'schuldige wenn ich Dich extra drauf hinweise, aber das steht alles in der RP6 Anleitung ;)

PS:
Es gibt hier sogar ein Unterforum für den RP6 - da gibts auch einige Threads zu Makefiles...

Eigo
14.08.2009, 20:24
t'schuldige wenn ich Dich extra drauf hinweise, aber das steht alles in der RP6 Anleitung ;)

PS:
Es gibt hier sogar ein Unterforum für den RP6 - da gibts auch einige Threads zu Makefiles...

Hi, ja es steht was über Makefiles.. Aber wirklich schlau wird man aus den paar Seiten nicht. Es wird da eben auch gesagt es wäre zu Umfangreich das zu erläutern (Ich hab nämlich wirklich 99% der Anleitung durchgelesen) =)...

Nagut dann werd ich mich mal selber versuchen schlau zu machen =/

Danke für eure Antworten..

p_mork
14.08.2009, 21:58
Auf http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Exkurs_Makefiles gibt es einige Infos zu Makefiles.

MfG Mark

matze120
12.09.2009, 15:34
Hallo
ich habe ein ähnliches problem...
wenn ich in winavr auf make all klicke dann kommt immer

> "make.exe" all

-------- begin --------
avr-gcc (WinAVR 20081124rc3) 4.3.2
Copyright (C) 2008 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.

make.exe: *** No rule to make target `TESTPRG.elf', needed by `elf'. Stop.

> Process Exit Code: 2
> Time Taken: 00:00

kann mir da mal bitte jemand bei helfen??

Danke im voraus

Matze