Tach, ich beherrsche Bascom recht gut aber möchte auch endlich mal in C reinkommen. Die meisten höheren Funktionen in Bascom nutze ich kaum sondern arbeite manuell mit den Registern, für PWM, Uart, SPI, I2C usw.. Von der Seite also erstmal kein Problem, ich bin da kein Neuling was AVR angeht. Teilweise bin ich da näher dran am µC als der Kollege, den man als absoluten C-Profi was µC angeht bezeichnen kann. Ansonsten hab ich keine Programmierkenntnisse. Ich hab es mal mit Java auf Android versucht, mit einem Buch das angeblich gut sein soll. Nachdem ich nach 2-3 Kapiteln immer noch nicht kapiert hab was das soll, hab ich aufgegeben. Teilweise kann ich C schon lesen (Inspirationen aus Beispielcode holen) aber vieles ist da für mich noch im Dunkeln. Welche Herangehensweise würdet Ihr da empfehlen? - C wirklich von der Pike auf wäre mir zu heftig. Ich habe mal vor Jahren "die C-Bibel" angefangen (weiß den Titel nicht mehr aber ist wohl das Standardwerk) und recht flott wieder in die Ecke befördert. So genau kann und will ich es nicht wissen. - Tutorials für µC richten sich oft an Anfänger, der ich auf µC-Ebene nunmal nicht bin. Erst recht, wenn man wie so oft empfohlen C auf dem PC schon beherrscht. Das ist genau falsch rum für mich. Hat jemand einen heissen Tipp, wie ich mich mit diesen Vorkenntnissen am einfachsten in C auf µC einarbeiten kann? Gruß, C-Lerner (zukünftig, hoffentlich)
C-Lerner schrieb: > - C wirklich von der Pike auf wäre mir zu heftig. Ich habe mal vor > Jahren "die C-Bibel" angefangen (weiß den Titel nicht mehr aber ist wohl > das Standardwerk) und recht flott wieder in die Ecke befördert. So genau > kann und will ich es nicht wissen. Ohje. Nichts für ungut aber C ist eine Sprache bei der man genau wissen muss, was man da tut. Somit ist ein Buch eigentlich ein Muss. Klar kann man C auch mit Learnig-By-Doing lernen, dann muss man sich allerdings auf einiges gefasst machen und sehr frustresistent sein. Versteh mich nicht falsch C ist eine (nach meiner Meinung) tolle und mächtige Sprache, die eigentlich einfach ist. Es ist irgendwie seltsam immer wieder zu sehen, wie Anfänger mit den einfachsten Sachen in C haben, die aber aus der Sicht eines Fortgeschrittenen völlig lächerlich sind (z.B. Zeiger). Vielleicht muss man sich erst mal in C rein denken und dann klappt es? Es lohnt sich auf jeden Fall aber den traditionellen Weg mit dem Buch sollte man schon gehen.
C-Lerner schrieb: > Ansonsten hab ich keine Programmierkenntnisse. Ich hab es mal mit Java > auf Android versucht, mit einem Buch das angeblich gut sein soll. > Nachdem ich nach 2-3 Kapiteln immer noch nicht kapiert hab was das soll, > hab ich aufgegeben. Das plus... > Welche Herangehensweise würdet Ihr da empfehlen? > - C wirklich von der Pike auf wäre mir zu heftig. Ich habe mal vor > Jahren "die C-Bibel" angefangen (weiß den Titel nicht mehr aber ist wohl > das Standardwerk) und recht flott wieder in die Ecke befördert. So genau > kann und will ich es nicht wissen. ... das deutet drauf hin dass du's nicht richtig willst. Ergo musst du es lassen, ansonsten hast du keinen Erfolg. Bitte versteh's nicht falsch. Aber du musst schon das "volle Programm" können - aber nicht von Anfang an. Für dich scheint es so zu sein, als ob du glaubst dass du gleich voll durchsteigen musst. Das ist falsch. Man tastet sich ran. > - Tutorials für µC richten sich oft an Anfänger, der ich auf µC-Ebene > nunmal nicht bin. Erst recht, wenn man wie so oft empfohlen C auf dem PC > schon beherrscht. Das ist genau falsch rum für mich. Kommt auf das Tutorial an - ich persönlich habe nicht irgendwelche Tutorials genommen, sondern die Beispiele die bei den DevKits dabei waren. Gelernt hab ich auf nem 8051er in Assembler, kannte den Käfer also sehr genau. Später hab ich mir dann den Ruck mit C gegeben und Bücher gekauft, die den entsprechenden Compiler behandelt haben. Hier war es dann so, dass ich mir eigene Aufgaben gesetzt hab. Angefangen wie bei Assembler auch mit beispielsweise Timer-Interrupt und LED blinken lassen, dann UART-Kommunikation, etc. "Automatisch" hinzu kommen dann irgendwann die Pointer (beispielsweise bei Textausgaben auf LCD) und ähnliches. Sprich eben nicht trocken nach Tutorial oder C-Bibel, sondern nach konkretem Anwendungsfall. Die Beispiele der Devkits habe ich mir bzgl der Struktur angesehen und einfach "erweitert", was auch einen gewissen Lerneffekt bietet. Ist man dann allem begegnet (Pointer, struct, union, enum, etc.) und hat es auch verstanden(!), dann fallen automatisch komplexere Programme hinten raus, z.B. über verkette Listen gesteuerte Menüs, etc. > Hat jemand einen heissen Tipp, wie ich mich mit diesen Vorkenntnissen am > einfachsten in C auf µC einarbeiten kann? Setz dir am Anfang kleine Aufgaben, beispielsweise kleine Bascom-Programme in C nachbauen. Du wirst automatisch bei der einen oder anderen Sache stolpern und gezwungen sein, dich schlau zu machen, sei es über ein Buch, eine Website oder sonstwie. Lernen wirst du, weil du ja die Aufgabe lösen willst. Ralf
Hallo, C ist ja eigentlich eine recht magere Sprache, die aber mit einem Rasiermesser ohne Griff zu vergleichen ist. Die Vielseitigkeit kommt erst über die libraries. Ein Buch (zum Nachschlagen) ist sicher erforderlich. Aber vieles, was für andere Platformen erforderlich ist, wird eigentlich auf Microprozessoren nie gebraucht. Ich habe noch nie printf, scanf und Konsorten auf einem uc benutzt. Zu verstehen wie Pointer funktionieren etc ist aber ein absolutes muss, da man sonst weder mit arrays noch mit text strings etc klar kommt. Englischkenntnisse sollten auch vorhanden sein. Ich würde mir ein Projekt aussuchen, dass über meine Fähigkeiten hinausgeht, Beispiele suchen, fleissig googlen, probieren, nachlesen, und mich dann freuen, dass ich es geschafft habe! Gruss Reiner
Am besten besorgst du dir einen fertigen C-Code für ein einfaches Projekt (z.B. LED-Steuerung) und versuchst, den nach deinem Geschnack umzuschreiben und dabei zu verstehen. Ein einfaches C-Buch dazu als Ergänzung ist sicher nicht verkehrt (Bücherei). Vielleicht einfach mit dem Atmel AVR-Studio4 anfangen (kannst du kostenlos downloaden). Was für einen Progger benutzt du?
Ach ja, und nicht von C-Profis ins Bockshorn jagen lassen, jeder fängt mal an und die Programmiersprache C kocht auch nur mit Wasser. Ob man als Hobby-Programmierer C in der tiefsten Tiefe seiner Möglichkeiten benutzen können muss, wage ich zu bezweifeln. Wie man die einzelnen Register im Datenblatt ausfindig macht für die gewünschten Anwendungen (z.B. PWM-Ausgabe, ...) weißt du?
Am einfachsten ist es wohl, für die Grundlagen, die man direkt übertragen kann, die Syntax zu lernen. Schleifen, Bedingungen, Variablen, Arrays und Funktionen gibt es in BASCOM (sicher) auch. Also würde ich erstmal nur damit arbeiten, damit deren C-Syntax sicher sitzt. Damit kann man schon größere Programme schreiben und später, wenn man es sicher beherrscht, darauf aufbauen.
HerrBert schrieb: > Ach ja, und nicht von C-Profis ins Bockshorn jagen lassen, jeder > fängt mal an und die Programmiersprache C kocht auch nur mit Wasser. Oh ja, das hatte ich vergessen: Vieles, was sog. C-Profis als smart ansehen (absolute Unverständlichkeit des Codes) wird in anderen Programmiersprachen zu recht als absolut schlechter Prigrammierstil angesehen. Das grösste Problem mit solchem Code ist aber, dass man trotzdem verstehen muss, was diese "smart assholes" mit ihren Konstrukten erreichen wollen. Gruss Reiner
C-Lerner schrieb: > ich beherrsche Bascom recht gut aber möchte auch endlich mal in C > reinkommen. Warum C? > Die meisten höheren Funktionen in Bascom nutze ich kaum sondern arbeite > manuell mit den Registern Dann wäre eigentlich Assembler der logische Ausweg aus der BASCOM-Misere. Sonst bist du irgendwann auch bloß wieder in der Situation, daß es mit C nicht mehr weiter geht, wo mit Asm noch was ginge... > Ansonsten hab ich keine Programmierkenntnisse. Das ist immer schlecht. Die logische Struktur von Programmen zu erarbeiten, ist unabhängig von der Sprache. Wer angeblich nur eine Sprache kann, kann in Wirklichkeit meist gar keine. Er hat nämlich den gedanklichen Schritt zur Abstraktion von Problemen nicht bewältigt, sondern denkt in ausschließlich den Kategorien "seiner" Programmiersprache. Und das oftmals auch noch in dem eingeschränkten Bereich dessen, was er wirklich davon beherrscht... > Ich hab es mal mit Java > auf Android versucht, mit einem Buch das angeblich gut sein soll. > Nachdem ich nach 2-3 Kapiteln immer noch nicht kapiert hab was das soll, > hab ich aufgegeben. Nun ja, Java ist eine objektorientierte Sprache. Sich das Verständnis der OO-Paradigmen zu erarbeiten (das kann man nicht wirklich lernen, man muß es sich erarbeiten) ist etwas anderes als rein prozedurale Programmierung zu verstehen. Wenn man aber Assembler kann und sieht, wie es auf dieser Ebene umgesetzt wird, hilft das erheblich dabei, die Paradigmen zu verstehen und den ansonsten inhaltsleeren abstrakten Begriffen einen materiellen Sinn zu verleihen. > Teilweise kann ich C schon lesen Das ist immer gut. Blöd nur, das C vielfach als "write only"-Sprache verwendet wird. Das liegt aber nur indirekt an C selber, weil es quasi unlesbare Konstrukte erlaubt. Am Ende Schuld sind die C-Programmierer, denn nirgendwo im C-Standard steht, daß man unleserlich schreiben muss. > - C wirklich von der Pike auf wäre mir zu heftig. Dann hast du bereits verloren. Deine C-Kenntnisse werden dann (bestenfalls) auch nur den Stand deiner BASCOM-Kenntnisse erreichen: Kenntnis von ein paar grundlegende Deklarationen und Kontrollstrukturen und das war's.
Wenn du dich mit der Hardware der AVRs (I/O-Register usw.) schon einigermaßen auskennst, brauchst du vor allem ein ganz normales C-Buch. Der Klassiker ist das Buch Kernighan und Ritchie. Es ist nicht sehr aufgeblasen, so dass du es in relativ kurzer Zeit Zeit durchgearbeitet bekommst. Der einzige Nachteil besteht darin, dass das Buch nicht den aktuellen Standard (C11), sondern C89 beschreibt, was aber auch kein großes Problem darstellt, da die neueren Features nicht allzu zahlreich sind und auch nicht zwingend benötigt werden. Hier im Forum wurde auch schon dieses neuere Buch empfohlen: http://knking.com/books/c2/index.html Ich kenne es nicht, es ist auch bei Weitem nicht so schlank wie der K&R, aber von der Beschreibung, dem Inhaltsverzeicnis und dem, was die Leute im Netz darüber schreiben, macht es einen guten Eindruck. Die AVR-GCC-Spezifika (bspw. das Schreiben von Interrupthandlern, das Einbinden von Assembler in C-programme usw.) lernst du in den einschlägigen Tutorials hier aus mikrocontroller.net oder in der AVR-Libc-Dokumentation: http://www.nongnu.org/avr-libc/user-manual/index.html Noch ein Tipp: Es gibt (nicht nur hier) zwei Parteien, die sich beim Theme C immer wieder in die Haare geraten. Die einen finden C Klasse, die anderen verteufeln es. Das Beste ist, du machst dir selbst ein Bild davon. Zurückkehren zu Bascom kannst du anschließend immer noch.
Der eigentliche Witz am Programmieren ist nicht die Programmiersprache. Es ist die Denkweise und die Art ein Problem in (Quell-)Text fassen zu können. Ein Peter Dannegger oder ein Karl-Heinz Buchegger wird ein Problem garantiert effizienter in Code umsetzen können als jeder Anfänger. Egal, welches Buch der gelesen hat. Die beiden werden das aber auch mit Bascom besser können oder mit Assembler oder mit sonstwas. Denn sie werden das Problem anders analysieren und umsetzen. Und warum? Ganz einfach: weil sie schon zigtausend Fehler gemacht und daraus gelernt haben. Denn lernen kann man nur, wenn man etwas übt. Wieder und wieder. Hier mal eine kurze Abhandlung über diese Denkweise und Irrwege: Beitrag "Zahlenschloss - Fehler" Ein Tipp von mir: vergiss die Funktion wait() oder delay() spätestens einen Monat, nachdem du sie das erste Mal verwendet hast.
Reiner schrieb: > Oh ja, das hatte ich vergessen: > Vieles, was sog. C-Profis als smart ansehen (absolute Unverständlichkeit > des Codes) wird in anderen Programmiersprachen zu recht als absolut > schlechter Prigrammierstil angesehen. > Das grösste Problem mit solchem Code ist aber, dass man trotzdem > verstehen muss, was diese "smart assholes" mit ihren Konstrukten > erreichen wollen. Naja solche Aussagen kommen meistens von Leuten die von Codeoptimierung nicht viel Ahnung haben. ASM, C und C++ bieten halt einfach sehr viel Möglichkeiten den Progammablauf deutlich schneller zu machen, was oft zu lasten der Lesbarkeit geht. Vorallem C++ Templates sind ein grandioses Konstrukt aber furchtbar zum Lesen, wenn sie wirklich intensiv genutzt werden. Also nicht immer gleich ärgern, wenn ein Code schwierig zu lesen ist. Wirkliche Profis wissen schon was sie tun. Blöd nur, dass es selten auch ausreichend dokumentiert ist ;)
TB schrieb: > > Naja solche Aussagen kommen meistens von Leuten die von Codeoptimierung > nicht viel Ahnung haben. ASM, C und C++ bieten halt einfach sehr viel > Möglichkeiten den Progammablauf deutlich schneller zu machen, was oft zu > lasten der Lesbarkeit geht. Vorallem C++ Templates sind ein grandioses > Konstrukt aber furchtbar zum Lesen, wenn sie wirklich intensiv genutzt > werden. > > Also nicht immer gleich ärgern, wenn ein Code schwierig zu lesen ist. Nee, nicht ärgern, nur amüsieren. Nach 40 Berufsjahren nach dem Studium in der IT im Bereich Programmierung, Systementwicklung und Produktverantwortung kann man das nicht wissen. Vor allem wenn man solch antiquierte Sprachen wie PL1, COBOL, FORTRAN, TOTAL, IDL, SQL, C, C++ und viele ASM-Dialekte von Mainframes gelernt und verwendet hat. Die Nerds, die nicht lesbar programmiert haben, habe ich, falls sie beratungsresistent waren, gefeuert. Lesbarkeit, Rechtschreibung und Dokumentation geht vor. Gruss Reiner
Kannst du Englisch. Wärst du bereit ein englisches Buch zu lesen? Denn auf Englisch wirst du viel mehr dazu finden. Tutorials, wie du schon sagtest, sind meist für Anfänger und/oder nicht sonderlich gut geschrieben. Anhand eines Beispielcodes lassen sich leicht Implementierungen erlernen und schnell kopieren, aber grundlegende Prinzipien eher weniger. Auch das Grundlegende Verständnis bleibt dabei hin und wieder auf der Strecke. Ich würde dir zu einem Buch raten. Da du schon programmieren kannst würde ich dir auch nicht zu einem Anfängerbuch raten. Ich selbst konnte sehr gut programmieren, habe den C Syntax etwas an der Uni gelernt, und habe richtig C mit einem andwendungsbasierten Buch für PIC24 http://www.amazon.com/Programming-16-Bit-PIC-Microcontrollers-Second/dp/1856178706/ref=sr_1_1?s=books&ie=UTF8&qid=1405872302&sr=1-1&keywords=learning+to+fly+the+pic24 (zusammen mit der dazugehörigen Entwicklungsplatform in Soft- und Hardware) gelernt. Ich fand den Weg sehr effizient, einfach und erfolgreich. Daher wäre meine Empfehlung: Schau mal nach Büchern für AVR (oder vielleicht andere uC falls du umsteigen willst, was die Sache noch interessanter und lebendiger macht und es vermutlich auch bessere Literatur gibt als für den 'alten' AVR) die Grundlegende C Kenntnisse vorraussetzen, dennoch kurz und knapp darauf eingehen, aber deren primäres Ziel weniger die Programmiersprache ist (denn programmieren kannst du schon, der Syntax ist in C halt anders) sondern die Implementierung spezieller Funktionen (an der dann auch gerne C spezielle Eigenschaften erläutert und benutzt werden). Ich würde auf der englischen Amazon Seite mal die Bücher anschauen und die Reviews lesen. Wenn ein paar sagen, dass nur Basics dran kommen, dann würde ich das Buch meiden. Sagen ein paar, dass es für Beginners ungeeignet ist, dann würde ich mich dafür mehr interessieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.