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:
Code:
> "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
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:
Code:
/*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;
}
Lesezeichen