STM32 in C programmieren wo anfangen?



  • Ok, ja, die main.c ist etwas lang und vermutlich nicht optimal aufgebaut.
    Ist aber auch nicht die einzige .c Datei.
    Das ist noch ein relativ schwaches Kriterium, um die Qualität des Codes zu beurteilen. Ich hab mir das wie gesagt nicht genauer angeschaut, aber ich meine, ich habe schon sehr viel Code gesehen, der auf den ersten Blick wesentlich schlimmer ausgeschaut hat.

    Nur geraten - 0 bedeutet, der Motor steht, -1 und 1 geben eine Richtung an.

    Ich denke, du solltest mindestens mit Monaten rechnen. Und dann kommts halt drauf an... Hardwareprogrammierung ist nicht ohne Tücken. Kann sein, dass irgendwas nicht/falsch dokumentiert ist, irgendwelche sporadischen Probleme auftauchen usw.



  • Ok, dann sehe ich mir mal das Buch von K&R an (ANSI C), und schaue wie weit ich damit komme.



  • @SeppJ sagte in STM32 in C programmieren wo anfangen?:

    Der Standardanfang für solides C, wenn man noch gar nichts kann, ist das Buch von K&R.

    Leider ist dieses Buch (meines ist die deutsche Übersetzung der 1990 Auflage - ANSI C) nicht mehr aktuell und strotzt vor kleinen Fehlern, die für Anfänger fatal sein können. Z.B. wird faktisch nie main() korrekt definiert. Immer wieder wird das implizite int für main genutzt. Das ist K&R C und kein ANSI C.



  • Leute, könnt ihr bitte mal aufhören, ständig widersprüchliche Aussagen zu machen?
    Der eine sagt das ist gut, der adnere sagt nein ist es nicht, der nächste sagt das enthällt Fehler,
    das ist genau der Grund warum ich mit dem Lernen von C bislang nicht weiter gekommen bin, weil immer jeder was anderes gesagt hat...



  • @ME20001 sagte in STM32 in C programmieren wo anfangen?:

    Leute, könnt ihr bitte mal aufhören, ständig widersprüchliche Aussagen zu machen?

    Es haben ja noch gar nicht alle geantwortet ...

    Bekommst du sonst im Leben eindeutige Antworten von verschiedenen Leuten?



  • modules:composer.user_said_in, @manni66, STM32 in C programmieren wo anfangen?

    Bekommst du sonst im Leben eindeutige Antworten von verschiedenen Leuten?

    Nein, aber man sollte dich davon ausgehen dass Profis hier wenigstens in etwa wissen, was
    da geeignet ist. So kommt man ja garnciht dazu mit irgendwas anzufangen, weil gerade wenn man es versucht kommt der nächste und sagt "Neinnein das ist nciht so gut dafür"
    Genauso mit den Compilern. Der eine sagt Keil ist der beste, der nächste sagt nein Keil ist veraltet und kompilziert, Eclipse ist viel besser, dann kommt wieder einer und sagt nein weil Keil hat die bessere Codeoptimierung (Was meiner Erfahrung nach stimmt) als Eclipse, usw usf, da wird man ja verrückt dabei...



  • @ME20001

    Vielleicht gibt es ja keine Lösung, die 100% richtig ist? Für den einen ist Kompromiss A) wichtiger als für den Anderen.



  • @ME20001 sagte in STM32 in C programmieren wo anfangen?:

    Leute, könnt ihr bitte mal aufhören, ständig widersprüchliche Aussagen zu machen?

    Das K&R Buch war einmal das Standardlehrbuch für C, und es war für die damalige Zeit auch ein gutes Lehrbuch. Ich kenne sowohl die K&R C Version als auch die ANSI C Version (die deutsche Übersetzung von 1990 steht bei mir im Regal inklusive Lösungsband von Tondo/Gimpel). Das Problem an der ANSI Auflage ist leider, dass das Buch kein ANSI C beschreibt sondern ein Mittelding zwischen K&R C und ANSI C. Das fängt schon damit an, dass „das erste C-Programm“ so formuliert ist:

    #include <stdio.h>
    
    main()
    
    {
    
        printf("hello, world\n");
    
    }
    

    Das führt bei mir zu folgender Warnung

    gcc-11 -std=c17 -Wpedantic -Wall -Wextra first_program.c -o first_program
    first_program.c:3:1: Warnung: Rückgabetyp ist auf »int« voreingestellt [-Wimplicit-int]
        3 | main()
          | ^~~~
    

    Abgesehen von der Formatierung, die würde ich anders machen, enthält schon dieses erste Programm einen substantiellen Fehler. Die main-Funktion muss entweder als int main() oder als int main(int argc, char *argv[]) definiert werden. Ausnahmen gibt es nur bei Hosted Compilern, und bei denen steht das explizit im Handbuch. D.h. so kann man das mittlerweile nicht mehr vermitteln. Weil auch die aktuellen Compiler noch immer versuchen möglichst mit K&R C kompatibel zu sein, übersetzt es mein Compiler mit einer Warnung.

    Besser wäre es, das erste Programm so zu formulieren

    #include <stdio.h>
    #include <stdlib.h>
    
    int main () {
        printf("hello, world\n");
    
        return EXIT_SUCCESS;
    }
    

    Dann besteht das Problem, dass das K&R Buch sich weitestgehend an ANSI C hält. Die erste ISO Norm von 1990 ist faktisch mit ANSI C identisch. Nur gab es in der Zwischenzeit einige Neuauflagen der ISO C Norm, bei denen sich nicht Unerhebliches in C geändert hat. Das kann natürlich nicht im K&R Buch enthalten sein.



  • @ME20001 Willkommen in der Welt der Softwareentwicklung 🙂
    BTW: Eclipse ist kein Compiler 😉



  • @john-0 sagte in STM32 in C programmieren wo anfangen?:

    Das Problem an der ANSI Auflage ist leider, dass das Buch kein ANSI C beschreibt sondern ein Mittelding zwischen K&R C und ANSI C. Das fängt schon damit an, dass „das erste C-Programm“ so formuliert ist:

    C89/C90 erlaubt implicit int, erst C99 verbietet es. Da ist also nichts falsch bei K&RII.
    Und wenn du statt -std=c17 -ansi genommen hättest, wäre das auch sichtbar geworden.



  • @Wutz Das ist zwar formal richtig, ich finde es aber so oder so als besseren Stil den Rückgabewert explizit anzugeben.



  • @Wutz sagte in STM32 in C programmieren wo anfangen?:

    C89/C90 erlaubt implicit int, erst C99 verbietet es. Da ist also nichts falsch bei K&RII.
    Und wenn du statt -std=c17 -ansi genommen hättest, wäre das auch sichtbar geworden.

    Nicht falsch ist nicht gleich empfohlen und guter Stil. Bitte nicht vergessen aktuell ist C17 und kein ANSI C! D.h. das Compiler Flag für C17 war zwingend notwendig, um zu sehen was an diesem Buch nicht mehr empfehlenswert ist.



  • @ME20001 Am besten wartest du einfach mal bis sich die Experten einig sind.

    Aber letzendes ist das Problem schnell zusammengefasst: Das perfekte Lehrmittel existiert nicht

    Es kommt nun mal auf deine Anforderungen an. Und entsprechend fallen die Antworten aus. Und zusätzlich ist es natürlich auch eine subjektive Fragestellung ^^


  • Mod

    @Leon0402 sagte in STM32 in C programmieren wo anfangen?:

    @ME20001 Am besten wartest du einfach mal bis sich die Experten einig sind.

    Es wird keine Einigung geben, weil es keine "die eine" Antwort gibt:

    @DocShoe sagte in STM32 in C programmieren wo anfangen?:

    @ME20001

    Vielleicht gibt es ja keine Lösung, die 100% richtig ist? Für den einen ist Kompromiss A) wichtiger als für den Anderen.

    Ich schätze halt K&R wegen des Fokus auf einen allgemeinen, anspruchsvollen Programmierkurs, john 0 mag halt lieber Exaktheit bei modernen Sprachentwicklungen. Ich würde ja sagen, dass ersteres dem TE bei seiner Fragestellung eher hilft.



  • Meine Meinung wäre jetzt, dass du dir irgendein x-beliebiges Buch, z.B. das Billigste auf Amazon, kaufst und dieses dann durch arbeitest. Du kannst nämlich nicht mal eben so C lernen, weil es da - wie eigentlich überall - jahrelange Erfahrung braucht, um halbwegs so etwas wie ein "Profi" zu werden. Ich bin der Meinung, dass du umso mehr daraus lernst, wenn du das "schlechteste" Buch kaufst. 🙄

    Beispiel: Das Buch erzählt dir, wie toll globale Variablen sind; alle werden dir hier erzählen, dass globale Variablen total doof sind; du hörst nicht darauf, weil das Buch ja von einem "Intellektuellen" geschrieben wurde, während hier nur komische Typen unterwegs sind, die nichts weiter zu tun haben, als alleine vor dem Computer zu sitzen und Tiefkühlpizza zu essen; irgendwann wirst du dann am eigenen Leib erfahren, dass du das komplette Projekt nach bspw. 7 Tagen Arbeit wegschmeißen kannst, weil es einfacher ist, noch einmal von vorne anzufangen, als den ganzen Murks umzuschreiben.
    Unglaublicher Lerneffekt, aber so läuft es eben am Anfang (und später auch noch!). 😉

    Wenn der Compiler Fehler oder Warnungen (Visual Studio ist da meiner Erfahrung nach sehr penibel, Empfehlung!) ausgibt, solltest du hier natürlich evtl. nachfragen.



  • Die Hersteller von Microcontrollern haben eine Sehr gute Dokumentation ihrer Hardware mit leicht verständlichen Beispielen. Bevor du c- können musst, musst du die Dokumentation nicht auswendig, aber vollumfänglich und detailliert verstanden haben. Dann weist du welche Register du wie lesen und setzten musst um den Controller nach deiner Vorstellung zu betreiben.Wenn du das kannst bist du mit Asambler viel schneller am ziel als mit c



  • @ME20001
    Wenn du das hier gelesen und zu mindest umfänglich verstanden hast
    ... dann beherrschst du auch den Controller, ansonsten bist du von Code und Wissen Anderer abhängig. Das ist nicht weiter tragisch, aber dein Vorhaben diese SO umzuschreiben oder zu Ersetzten erfordert genau dieses Wissen in dem Manual.



  • @Peter-Viehweger sagte in STM32 in C programmieren wo anfangen?:

    Ich bin der Meinung, dass du umso mehr daraus lernst, wenn du das "schlechteste" Buch kaufst. 🙄

    Beispiel: Das Buch erzählt dir, wie toll globale Variablen sind; alle werden dir hier erzählen, dass globale Variablen total doof sind; du hörst nicht darauf, weil das Buch ja von einem "Intellektuellen" geschrieben wurde, während hier nur komische Typen unterwegs sind, die nichts weiter zu tun haben, als alleine vor dem Computer zu sitzen und Tiefkühlpizza zu essen; irgendwann wirst du dann am eigenen Leib erfahren, dass du das komplette Projekt nach bspw. 7 Tagen Arbeit wegschmeißen kannst, weil es einfacher ist, noch einmal von vorne anzufangen, als den ganzen Murks umzuschreiben.
    Unglaublicher Lerneffekt, aber so läuft es eben am Anfang (und später auch noch!). 😉

    Sorry, aber das ist mMn. einfach nur Quatsch und ein katastrophal schlechter Rat. Klar, wenn man etwas selbst falsch gemacht hat und dann gelernt es richtig zu machen, dann weiss man meist besser warum man bestimmte Dinge machen oder eben bleiben lassen sollte. Also besser als jemand dem nur eingetrichtert wurde es auf eine bestimmte Art zu machen bzw. eben nicht zu machen. Nur das Problem ist: man wird haufenweise schlechte Angewohnheiten beibehalten.



  • @EL-europ sagte in STM32 in C programmieren wo anfangen?:

    Dann weist du welche Register du wie lesen und setzten musst um den Controller nach deiner Vorstellung zu betreiben.Wenn du das kannst bist du mit Asambler viel schneller am ziel als mit c

    Sorry aber das ist auch Quatsch. Es gibt kaum etwas was in Assembler leichter zu schreiben ist als in C.



  • @hustbaer
    Ja, wenn du aber die Kentnis der Register und Befehlsätze hast, kannst du den Controller in Asambler programmieren ohne eine Hochsprache lernen zu müssen. Die Hochsprache ist dann eine persönliche Weiterentwicklung. Wenn man auf Bibliotheken Anderer angewiesen ist, Beherrscht man den Controller auch nicht. Wenn man aber c- Beherrscht ist ein re-engeneering des Vorhandenen Codes natürlich einfacher/möglich, aber nur mit detaillierter Kenntnis des Controlers.


Anmelden zum Antworten