- LiTime Speicher und Akkus         
Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 36

Thema: Anfänger in C sucht Tutorial-Empfehlung

  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651

    Anfänger in C sucht Tutorial-Empfehlung

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    nun muss/will ich endlich C lernen.

    Meine bisherigen Erfahrungen sind (vor Ewigkeiten) Fortran (damals u.A. auf Cray´s - später auch MSFortran77) und Assembler (8080/Z80) - sehr umfangreich, kaum was in Basic (aber schon mal ne DGL höherer Ordnung) und homöopathische Spuren von JAVA.

    Ich will in die Robotik - entsprechend diesem Forum - einsteigen. Da ist C sicher angebracht (-er für mich als Basic). Nachdem ich jetzt doch mehrere Wochen mit Assembler an einem tiny13 geübt habe, will ich C lernen und Suche einen guten Einstieg.

    Bisher bin ich gestolpert (bin da aber nie tief eingedrungen) über das AVR-GCC-Tutorial, über Helmut Schellong´s C-Tutorial, über den C-Kurs der ...fh-augsburg.de/informatik/vorlesungen..., im roboternetz über die Kategorie:Quellcode C, über die sehr knappe Darstellung - 9. C für ASURO - im asuro-Handbuch und noch einige kleinere Abhandlungen (und über viele, sehr interessante, aber meist eher spezielle Threads hier - SEHR nützlich - die sind eher für später mal).

    Ich habe also die Qual der Wahl - und bitte euch um Rat. Dabei ist mir klar, dass es persönlich unterschiedliche Empfehlungen geben wird. Aber ich erhoffe mir eben ein bisschen "Richtungsempfehlungen" - sonst werde ich mit dem ASURO-Handbuch anfangen und danach - mal weitersehen. Wobei ich nicht sicher bin, dass ich dann das Buch von Ritchie und Kerninghan durcharbeite (wie es das ASURO-Handbuch empfiehlt). Vielleicht - weil ich selber schon so alt bin

    So, und nun schon mal danke für Eure Ratschläge
    Ciao sagt der JoeamBerg

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    37
    Beiträge
    4.255
    Das Standard-Tutorial für AVRGCC dürfte das von mikrocontroller.net sein. Und zu C allgemein findet man bei wikibooks.org noch einiges. Mit diesen beiden Quellen bin ich selbst sehr gut in C rein gekommen, wobei ich Vorerfahrungen mit AVRs unter Pascal und Programmierung allgemein mit Delphi hatte.

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Zum richtig C lernen ist ein Buch wie von Kernighan&Ritchi "Programmieren in C" das beste. Die Kontrollerplattform ist einen nicht sehr optimale Lernumgebung. Die Übungen sollte man daher auf einem C-Compiler für den PC machen und nicht mit dem AVR-GCC.

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651
    Hallo uwegw und Hubert.G. Vielen Dank. Ich werds beachten (und mir DOCH den Ritchie-Kernighan antun ). Hab sogar dem armen Kernighan vorhin ein "n" zuviel verpasst . Ja, und am PC üben. Es ist schauderhaft - aber daran hätte ich nun scheuklappenmässig nicht gedacht .
    Ciao sagt der JoeamBerg

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    14.11.2005
    Beiträge
    57
    Ich hab C auch mit dem Kernighan gelernt. Ab und zu ein paar Programme für die Konsole geschrieben, dann hat man's schnell raus.

    Das Kernighan und Ritchie Buch ist meines Erachtens nach das beste Buch über C, auch wenn es anfangs etwas gewöhnungsbedürftig ist.

    Wichtig ist eher, daß man das Programieren an sich versteht, dann ist man fast überall zuhause.

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651
    Gut, die beste von allen meinen Frauen hat mir heute das Buch von Kernighan/Ritchie bestellt.
    Beim Rumstöbern habe ich ein Freeware gefunden: Visual C++ 2005 Express v8.0. Zwar von Microsoft, aber ... free ist free - und, da ich wirklich nicht so perfekt in englisch bin, wäre ich natürlich über vorwiegend deutsche Erklärungen froh.

    a) Ist das Visual C++ 2005 sinnvoll für Lernzwecke? (weil da zwei plus hinterm C stehen )
    b) Weiss jemand, ob da drin eine C-Version (ver-)steckt (ist) ?
    c) Welche Alternativen sind empfehlenswert? (evtl. auch Bezahlversion).
    d) wäre DJGPP eine sinnvolle Alternative (das scheint ja rein englisch zu sein)
    Ciao sagt der JoeamBerg

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    VisualC++ ist glaube ich nicht das ideale.
    Hier gibts etwas freies, aber auch nur Neu-Deutsch
    www.bloodshed.net/devcpp.html

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hallo Joe,

    Schau Dir mal Code::Blocks an.

    Es ist erste Sahne, eine wirklich sehr gut gelungene Umgebung.

    Allerdings empfehlt es sich die "nightly builds" Version zu ziehen.
    Ein weiterer Vorteil liegt darin, daß man auch die AVR damit ohne Probleme programmieren kann !

    Wenn Englisch kein KO Kriterium für Dich ist, ist es eine Überlegung Wert.

    Gruß Sebastian

    P.S.

    K&R war schonmal eine gute Wahl...
    Software is like s e x: its better when its free.
    Linus Torvald

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651
    Hei Sebastian, schönen Abend,

    danke für Deinen Hinweis. Ach - englisch geht schon, ich habe schon öfters in den USA Vorträge gehalten (und nie auf schwäbisch-bayrisch oder sonst einem deutschen Idiom) , habe auch anderswo auf internationalen Konferenzen englisch vorgetragen, und kann mich auch sonst im englischen Sprach-umfeld bewegen, persönlich und wenns sein muss auch literarisch - blos Sachbücher auf englisch - da quäle ich mich eben.

    Ich werde Deinen Hinweis ansehen. Danke.
    Ciao sagt der JoeamBerg

  10. #10
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651
    Hallo Ihr freundlichen Ratgeber,

    nun habe ich angefangen mit C . (Anmerkung, nicht zum Lesen gedacht: ich bin SEHR zweckorientiert gewesen, habe mir die Anleitung zu C im Asuro durchgelesen, die Tutorials in RN und mikrocontroller.net und den einen oder anderen Codeschnippsel in der AVR-Doku und habe vorerst DOCH mit AVR-Studio/WinAVR angefangen - weil mir meine eigene Zeitplanung zu meinem eigenen Roboterprojekt im Nacken sitzt). Folgende Vorarbeiten:

    1) Ein kleines Flashboard für den tiny2313 gebaut, mit je einer seitlichen Steckleiste am Controller
    2) ... mit einem max232 (man will ja kommunizieren)

    Der Test der selbstgebauten und beschafften Ausrüstung mit Assemblerroutinen z.B. zur Servoansteuerung geht ok. Da habe ich aber nix mit RS232 gemacht, klar. PonyProg 2.07a Beta und RN-ISP-Programmierkabel (ISP Dongle). Geht alles wirklich prima.

    Ein kleines C-Programm geschrieben. Es sollte ja wirklich klein sein - "Hallo Welt" und eine LED auf PB2 anzünden.
    Code:
    /*
    ===========================================================
    Aufgabe:
    
    Sende "Hallo Welt" über die RS232	UND
    LED auf PB2 anzünden
    
    Autor: JWT
    ===========================================================
    */
    
    #include <stdlib.h> 
    #include <avr/io.h>
    /*   #include <avr/iotn2313.h>     <<< das is ja wohl nix   */
    
    #define MCU = attiny2313
    
    //	### NEIN ### Mit Quarz 16 Mhz-CPU
    //	Interner Oszillator, 8 MHz
    #define F_CPU = 8000000 
    
    
    
    //	### Portinitialisierung und waitms aus RNContr Demo C
    
    //	*### Ports setzen ###
    //	Ports auf HIGH/LOW setzen
    
    static inline void setportbon(const uint8_t n)
    {PORTB |= (1<<n);}	//set PORTB.n high
    static inline void setportboff(const uint8_t n)
    {PORTB &= ~(1<<n);}	//set PORTB.n low
    
    /*### Programm pausieren lassen ###*/
    /*Pausenwert ist nur experimentell !*/
    
    void waitms(uint16_t ms)
    {
    	for(; ms>0; ms--)
    	{
    		uint16_t __c = 4000;
    		__asm__ volatile (
    			"1: sbiw %0,1" "\n\t"
    			"brne 1b"
    			: "=w" (__c)
    			: "0" (__c)
    		);
    	}
    }
    
    
    
    // ------------------------------------------------------------------
    //   Dieser Codeschnipsel ähnlich 2313-doc, S 121
    
    void USART_Init( unsigned int baud )
    
    {
    /* Set baud rate */
    UBRRH = (unsigned char)(baud>>8);
    UBRRL = (unsigned char)baud;
    /* Enable receiver and transmitter */
    UCSRB = (1<<RXEN)|(1<<TXEN);
    /* Set frame format: 8data, 2stop bit */
    UCSRC = (1<<USBS)|(3<<UCSZ0);
    }
    
    // ------------------------------------------------------------------
    void sendchar(unsigned char c)
    {
    	while(!(UCSRA & (1<<UDRE))) //Warten, bis Senden möglich ist
    	{
    	}
    	
    	UDR = c; //schreibt das Zeichen aus 'c' auf die Schnittstelle
    }
    
    // ------------------------------------------------------------------
    void sendUSART(char *s) //*s funktiniert wie eine Art Array - auch bei
    			// einem String werden die Zeichen (char) 
    			// einzeln ausgelesen - und auf die
    			// Sendeschnittstelle übertragen
    {
    	while(*s)
    	{
    	sendchar(*s);
    	s++;
    	}
    }
    
    // ------------------------------------------------------------------
    /*### Hauptschleife ###*/
    int main(void)
    {
    
    //	for(uint8_t i=0; i<10; i++)
    	{
    	setportboff(2);
    	waitms(150);
    	setportbon(2);
    	}
    
    
    
    	USART_Init(9600);		//USART initialisieren
    
    	/*###Text senden###*/
    
    	sendUSART("\r\n\n\n"); //Sendet Kenung und Text.
    				// "\r" setze Cursor auf Zeilenanfang,
    				// "\n" beginnt dann die nächste Zeile
    	sendUSART("**** ATtiny2313 *****\r\n");
    	sendUSART(" \r\n");
    	sendUSART("Hallo, Welt.\r\n");
    	sendUSART(" \r\n");
    }
    Nach einigen Mühen war der Code fertig. Die Mühen bestanden in Anpassungen an Fehlermeldungen des Compilers (AVRStudio aStudio4b528.exe mit SP 1 und WinAVR-20070525-install.exe).

    Hmmm, ja, das wars dann. Der Code freut den Compiler beim Compilieren, der Maschinencode freut Ponyprog beim Flashen (Klartext - alles ohne Fehlermeldungen, nur ok-Meldungen) - aber die Reaktion der LED ist null - ebenso wie das Hyperterminal. Meine Hauptängste waren, dass die RS232 nicht läuft - aber dass nicht mal die LED mit C anzuzünden ist beschämt mich doch.

    Ein Test der RS232-Verbindung zum PC mit der RN-Control 1.4 bringt die erwarteten Meldungen aufs Hyperterminal. Ich will nicht gleich den Mega32 umprogrammieren - sondern beim tiny2313 weitermachen, den habe ich ja auch mit Assembler schon etwas "im Griff" und er hat einen festen Posten im Projekt.

    Kann bitte jemand sagen was an meinem ersten C-Programm falsch ist?
    Ciao sagt der JoeamBerg

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test