-         

Ergebnis 1 bis 8 von 8

Thema: Erstes Programm in C für den RP6

  1. #1

    Erstes Programm in C für den RP6

    Anzeige

    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; 
    }

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Was hast du in dein makefile hineingeschrieben
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    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?

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    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.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    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...

  6. #6
    Zitat Zitat von SlyD
    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..

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    26
    Beiträge
    522
    Auf http://www.mikrocontroller.net/artic...kurs_Makefiles gibt es einige Infos zu Makefiles.

    MfG Mark

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2009
    Ort
    Erde
    Alter
    23
    Beiträge
    15
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •