Forum: Mikrocontroller und Digitale Elektronik Mikrokontroller Crash Kurs mit ANSI-C, mit ATMega Register Nutzung


von Christof E. (Gast)


Lesenswert?

[Da der Thread ohne das PDF keinen Sinn mehr hat und der TE massiv 
außerhalb des Forums angefeindet worden ist, wurde der Inhalt hier in 
Abstimmung der Moderatoren entfernt.]

: Bearbeitet durch Moderator
von schon runtergeladen (Gast)


Lesenswert?

Christof E. schrieb:
> Die Admins vom Mikrocontroller.net legten mir nahe eine eigenen Thread
> zu eröffnen

Absolut richtig. Danke (ist sehr umfangreich).

: Wiederhergestellt durch Admin
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

1) Es haißt #include <avr/io.h> und nicht avr\io.h (auch nicht unter 
Windows).

2) #include <avr/sfr_defs.h> sollte nicht notwendig sein, denn es wird 
bereits von avr/io.h includiert.

3) double ist erst seit v10 ein 64-Bit Typ, und selbst da nur mit 
-mdouble=64.  In dem von dir verwendeten WinAVR ist double = float, also 
nicht C/C++ konform.

4) Soweit is sehe verwendest du auch Features, die nicht ANSI-C sind wie 
Interrupts, Inline Assembly und util/delay.h, avr/eeprom.h etc.

5) Auf PDF-Ebene wäre ein Inhaltsverzeichnis genz nett, so wie jetzt ist 
man da recht verloren wenn man was sucht. Dass die Seiten nicht 
numeriert sind macht's nicht einfacher.

6) Es wird stdint.h eingeführt, später aber hausbackene Typen wie 
UINT16, UINT8, Bool (besser: bool aus stdbool.h), etc. verwendet.

7) Keine Angst vor Typographie!  Anstatt 256 = 2^8 würde ich wenn 
möglich, mathematischen Formelsatz mit Superscript für Exponenten 
verwenden; insbesondere wenn daneben C-Code mit ^ = XOR steht.

8) Periode ist nicht Frequenz, sondern 1 / Frequenz.

9) *räusper* LaTeX Code aus irgendwelchen Wikis rauskopieren kann man 
nachen — falls das verwendete Satzprogramm LaTeX unterstützt.  Aber 
(sic)
1
Z_\mathrmmathrm{bit} = } = } = \fracfrac\mathrmmathrm{F_{CPU}}{F_{CPU}}{F_{CPU}}{F_{CPU}}{F_{CPU}}\mathrmmathrm{BAUDRATE}{BAUDRATE}{BAUDRATE}{BAUDRATE}{

10) Es gibt keine konsistenten Code-Formatierungen. Selbst kleine 
Codefragmente sind nicht durchgehend formatiert und daher schwerer zu 
erfassen als notwendig.

11) Float-Berechnungen in einer ISR wie (float) OCR1A sind ein absolutes 
NO GO!!!

12) Teilweise wir #include <...> verwendet wo #include "..." hingehört. 
An einer Stelle steht sogat #include "i2clcd.h,, (Gänsefüßchen unten!!")

"Ab hier wird's Chaotisch [...]"

fürwahr, hätt ich schon früher erwartet den Satz ;-)

Ich hör jetzt mal auf da querzulesen; weiteremifehlen kann ich diesen 
"pile of images and copy-pasted code snippets" nicht.

von Einer K. (Gast)


Lesenswert?

Hi...

Ich finde den Artikel/PDF schon ganz ok.
Es steckt etwas Humor drin und ist natürlich auch informativ.

Fein.


--------

Was mir allerdings gar nicht schmeckt, ist die "ungarische Notation", 
das was bei dir Variablen Prefix heißt.

Erstens:
Ich kann den Code nicht lesen!
C ist schon schwer genug, ohne diese zusätzliche Hürde.

Zweitens:
Das ist redundante Information und damit eine unnötige Fehlerquelle

von Rolf M. (rmagnus)


Lesenswert?

Arduino Fanboy D. schrieb:
> Hi...
>
> Ich finde den Artikel/PDF schon ganz ok.
> Es steckt etwas Humor drin und ist natürlich auch informativ.
>
> Fein.

Ja, das ist ja im Prinzip auch gut. Aber leider sind viele Fehler drin, 
sowohl Tippfehler, als auch inhaltliche - teils sogar Verständnisfehler. 
Mir ist schon klar, dass da einiges an Arbeit drin steckt, aber so wie 
es jetzt ist, würde ich es leider nicht weiterempfehlen.

von Christof E. (Gast)


Lesenswert?

Hallo nanana...
Stimmt.! vieles, dort und da, was so nicht sein sollte. Oder sogar 
verwirrt.
Ich schrieb auch. "Dort und da "Fehlerhaft ,aber brauchbar."
Es ist ein Powerpoint Vortrag und eine Erklär-Arbeitsgrundlage, und 
werden normalerweis im Kurs alles erklärt, wie es gemeint ist.
Habe aber keinen Lektor. Wenn ich Fehler finde, beseitige ich dies auch 
sobald wie mögl.
Es ist eine Anleitung, mit Registern statt mit Bibliotheken, deren 
Arbeitsweise man nicht kennt, umgehen zu lernen. Mit Verwendung von 
ANSI-C und nicht C++. Was unnötig sperrig ist für das kleine 
Controllerchen.
Das tut es. Und darum geht es..

Grund: Ich stelle fest, das Studenten immer weniger von der Arbeitsweise 
verstehen, weil diese mit SKETCH Bibliotheken arbeiten, ohne zu 
verstehen was diese tun, Python mit seinen Datentyp Schmuddeleien tut 
sein übriges.
Es ist eher eine Ver-Bildung.
Es geht darum Die Qualität, gerade die Binäre, von "C" zu vermitteln.
Im Gegensatz zu SKETCH. Was eher verschleiert, was der Controller tut.
....Und Methoden  kennezulernen, wie Bit Parsing, Stepmotor Sequenzen 
interrrupt gesteuert etc..  oder einfach ein paar Debugging Tricks.
Auch Textbasierte UART Kommunikation für Befehle von außen.
Was sich bewährt hat..   Ping, 12<13>  --> Pong, 456<13>

Includes Schreibweise wie  "avr\io.h" sind evtl historische relikte und 
werden problemlos compiliert.  das macht es nicht falscher.
ebenso der ISR (interrupt vector)
Natürlich ist ISR( interruptroutine ) etc kein ANSI-C.
Aber AVR Controller Spezifisch. und sehr wohl implementiert in WINGW.
wie auch <iom328p.h>   unit32_t usw..  <iom328p.h> - Verknüpfung

Kritik in Ehren, aber diese Methoden sind für den AVR so vorgesehen. !

Tatsächlich macht der Autoformat von PowerPoint einen ungefragt ärger.
Die Gänsefüßchen oben und unten z.B. Das überliest man dann auch..

Die Inkonsistenzen wie Format Einrückungen etc. sind ein Folge davon 
Code-Beispiele (mehr sind es nicht) in diese Postkartenformate des 
PowerPoint zu pressen.  Wer will, kann sich diese vollständig 
downloaden.

WINAVR deshalb, weil der "Programmers Notepad" Nackt, aber dafür 
übersichtlich ist und sehr gut funktioniert. Man braucht keine Wochen, 
um damit arbeiten zu lernen, wie z.B. Eclipse oder AVR Studio. Wo man 
ganz schön allein ist, wenn einem niemand hilft am Anfang.
Und es ist für Anfänger.

Ich habe an keiner einzigen Stelle ein TEX Format "copy paste" 
gemacht.!?
Wie kommen sie darauf? Copypasted habe ich aus meinen Quellfiles im 
Notepad.
das seltsame ..."\fracfrac\mathrmmath" habe ich nirgends gefunden!!.
Kann evtl ein "export aus Powerpoint" Fehler sein. Ich habe im Akrobat 
unter WIN10 dieses nicht gesehen.
Aber gut. Wenn ich Zeit habe, versuche ich  noch ein paar Fehler zu 
finden, korrigieren. Die Sache jedoch selbst, ist so richtig.
Vor allem geht es darum, es selbst zu machen, eine Servo, Schrittmotor 
mit eigenen Routinen zum laufen zu bringen, und so qualifiziert zu 
kontrollieren, was der Controller tut, zu verstehen wie die Signale wo 
udn warum so sind. Also Spass zu haben.

von Christof E. (Gast)


Lesenswert?

...ich darf widersprechen.
Die Voranstellung von typbezeichnenenden Buchstaben, (sie nennen es 
ungarische Notation) zum Variablenname ist keine Redundanz, und keine 
Fehlerquelle.
Im Gegenteil. Siehe:

uint8_t u8NN = 0;
 if( u8NN < -2 )
....kann so nicht stimmen weil "u8NN"--> unsigned 8 Bit namens NN heißt, 
und nicht negativ werden kann. Und das erkennt man im Code nur daran, 
dass man den  Zähler sprechend u8NN nannte.
*gpcaStr  = 0;     ---> sprich "Global Pointer auf char array String"
Also kürzer und klarer wird es nicht.

Genau das ist der Sinn von typisierten Variablennamen.

Das alles ist nicht frei erfunden und daher gesagt.
Es gibt eine Handlungsrichtline:MISRA C:2012
Info hier:
https://barrgroup.com/embedded-systems/books/embedded-c-coding-standard
(frei verfügbar)

und hier:
https://www.misra.org.uk/Publications/tabid/57/Default.aspx

Diese Information ist von  Frank Büchner.

von Cyblord -. (cyblord)


Lesenswert?

Christof E. schrieb:
> ...ich darf widersprechen.
> Die Voranstellung von typbezeichnenenden Buchstaben, (sie nennen es
> ungarische Notation) zum Variablenname ist keine Redundanz, und keine
> Fehlerquelle.

Mit modernen IDEs wird der Typ sehr schnell sichtbar. Typ im Namen geht 
gar nicht.

> Das alles ist nicht frei erfunden und daher gesagt.
> Es gibt eine Handlungsrichtline:MISRA C:2012
> Info hier:
> https://barrgroup.com/embedded-systems/books/embedded-c-coding-standard
> (frei verfügbar)
>
> und hier:
> https://www.misra.org.uk/Publications/tabid/57/Default.aspx

MISRA ist ne andere Welt. Ich würde vermeiden mir hier einzelne 
Empfehlungen rauszupicken. Entweder du machst MISRA oder nicht. Für die 
allgemeine Entwicklung ist MISRA überholt und unmaßgeblich.

von Oliver S. (oliverso)


Lesenswert?

Christof E. schrieb:
> Das alles ist nicht frei erfunden und daher gesagt.
> Es gibt eine Handlungsrichtline:MISRA C:2012

Mishra wird zwar professionell (unter Zwang) genutzt, läuft aber unter 
der Rubrik „professioneller Blödsinn“.

Bei dem Thema Codestil gibt es kein falsch und kein richtig. Es gibt nur 
persönliche Geschmäcker, und über die soll man nicht streiten.

Ich sehe es wie meine Vorschreiber: ungarische Notation ist vollständig 
überflüssig.

Oliver

von Jack V. (jackv)


Lesenswert?

Christof E. schrieb:
> Includes Schreibweise wie  "avr\io.h" sind evtl historische relikte und
> werden problemlos compiliert.  das macht es nicht falscher.
1
% avr-gcc blub.c
2
blub.c:1:10: fatal error: avr\io.h: No such file or directory
3
    1 | #include <avr\io.h>
4
      |          ^~~~~~~~~~
5
compilation terminated.

Mit dem richtigen Slash geht’s.

Du kannst nun die Probleme kleinreden und deine Sachen verteidigen, oder 
du verbesserst dein Script einfach. Vom Letzteren hätten alle was, btw.

: Bearbeitet durch User
von Rolf M. (rmagnus)


Lesenswert?

Christof E. schrieb:
> Im Gegenteil. Siehe:
>
> uint8_t u8NN = 0;
>  if( u8NN < -2 )
> ....kann so nicht stimmen weil "u8NN"--> unsigned 8 Bit namens NN heißt,
> und nicht negativ werden kann.

Dazu warnt mich schon mein Editor. Bei etwas älteren Modellen kommt die 
Warnung dann erst vom Compiler.

> *gpcaStr  = 0;     ---> sprich "Global Pointer auf char array String"
> Also kürzer und klarer wird es nicht.

Für mich steht die Bedeutung der Variable im Vordergrund für ihren 
Namen, nicht der Typ.

> Das alles ist nicht frei erfunden und daher gesagt.
> Es gibt eine Handlungsrichtline:MISRA C:2012
> Info hier:
> https://barrgroup.com/embedded-systems/books/embedded-c-coding-standard
> (frei verfügbar)

Dort steht aber nichts von einem u8, sondern lediglich was von globalen 
Variablen, Zeigern, Variablen, die einen booleschen Wert enthalten (aber 
nicht zwingend vom Typ bool sein müssen) und Handles (unabhängig von 
deren Datentyp). Genau so war die ungarische Notation eigentlich 
gedacht.

Oliver S. schrieb:
> Christof E. schrieb:
>> Das alles ist nicht frei erfunden und daher gesagt.
>> Es gibt eine Handlungsrichtline:MISRA C:2012
>
> Mishra wird zwar professionell (unter Zwang) genutzt, läuft aber unter
> der Rubrik „professioneller Blödsinn“.

MISRA ist vor allem für das Management da, damit sie auch das Gefühl 
haben können, was für die Codequalität getan zu haben.
Meine Meinung: Jemand, der nicht programmieren kann, kann es auch mit 
MISRA nicht, und jemand, der es kann, braucht MISRA nicht.

> Bei dem Thema Codestil gibt es kein falsch und kein richtig. Es gibt nur
> persönliche Geschmäcker, und über die soll man nicht streiten.
>
> Ich sehe es wie meine Vorschreiber: ungarische Notation ist vollständig
> überflüssig.

von Christof E. (Gast)


Lesenswert?

Also Leute.
Dieser Kurs ist für Anfänger, bzw etwas Erfahrene im Controllerleben und 
ANSI-C und die, die sich zum ersten mal im Leben trauen, Drähte an Strom 
und Servos und dem gekauften Controller anzulegen.
und die etwa schlaueres, und vor allem selbst machen wollen,
als Sketch Programme zu kopieren.
Die Anderen brauchen offensichtlich keinen Kurs.

...und das mit WINAvr mit (Anfänger) Ansi-C.
Auch hat die WINAVR nur den "Programmers Notepad". und damit keine 
Typenanzeige.
.....und zwar ganz vorsätzlich. !!
so wird man gezwungen, nachzudenken, was man tut,

Das es modernere IDEs gibt, wissen wir.
Aber diese sind leider auch für Anfänger, bzw leicht Fortgeschrittene, 
unglücklich.

Wenn diese erst 2..3 Tage mit einer störrischen IDE, schon ab AVRStudio 
arbeiten lernen sollen, dann wird das nix. ! Hab sprobiert.

Meine Erfahrung ist, das mir sogar Physik Studenten im 6. Semester ab 
einem Niveau über der ADC Registerbedienung zu 50% aussteigen.
Früher 20 Teilnehmer/Jahr, heute ~5..6... zu viel Stress, zu wenig Zeit, 
noch weniger "Vorkönnen" aus dem Abi.
Keine Kompelxen  Zahlen, eine Sinus Wertetabelle normiert zu erzeugen 
ist auch nicht drin mit den heutigen Schulkentnissen.
So sieht es auch
..hat eben alles seine Grund.
Ich empfehle selber mal eine, auf 800 Seiten gewachsene, Powerpoint zu 
machen.
Natürlich absolut tadelos.
Wer Rechtschreibfehler findet, kann mir das sagen oder diese behalten.
kriegen wir uns also wieder ein?

von Einer K. (Gast)


Lesenswert?

Christof E. schrieb:
> ist keine Redundanz
Ist es wohl!

Cyblord -. schrieb:
> (sie nennen es ungarische Notation)
Ja!
Ob es genau diesen Vorgaben entspricht ist nicht wichtig.
Das Prinzip ist auf jeden Fall gleich.

Falls du danach suchst, findest du viele Versuche das einzuführen.
Unter anderem bei Google und Microsoft.
Auf die Barrikaden sind sie gegangen die Programmierer und das mit Fug 
und Recht (aus meiner Sicht)

Oliver S. schrieb:
> über die soll man nicht streiten.
Ja, und darum werde ich jetzt auch in dieser Sache das Maul halten.

von Christof E. (Gast)


Lesenswert?

Also Leute.
Dieser Kurs ist für Anfänger, bzw. etwas Erfahrene im Controllerleben 
und ANSI-C und die, die sich zum ersten mal im Leben trauen, Drähte an 
Strom und Servos und dem gekauften Controller anzulegen.
und die etwa schlaueres, und vor allem selbst machen wollen,
als Sketch Programme zu kopieren.

Die Anderen brauchen offensichtlich keinen Kurs.

...Das ganze mit WINAvr mit (Anfänger) Ansi-C.
Auch hat die WINAVR nur den "Programmers Notepad". und damit keine 
Typenanzeige.
.....und zwar ganz vorsätzlich. !!
so wird man gezwungen, nachzudenken, was man tut,

Das es modernere IDEs gibt, wissen wir!
Aber diese sind leider auch für Anfänger, bzw. leicht Fortgeschrittene, 
unglücklich.  oder (für Anfänger) völlig unbrauchbar, wie Eclipse. 
Sketch

Wenn diese erst 2..3 Tage mit einer störrischen IDE, schon ab AVRStudio 
arbeiten lernen sollen, dann wird das nix. ! Hab sprobiert.
Dann springen die ersten 2/3 ab.

Meine Erfahrung ist, das mir sogar Physik Studenten im 6. Semester ab 
einem Niveau über der ADC Registerbedienung zu 50% aussteigen.
Früher 20 Teilnehmer/Jahr, heute ~5..6... zu viel Stress, zu wenig Zeit, 
noch weniger "Vorkönnen" aus dem Abi.
Keine Ahnung von kompelxen Zahlen, eine Sinus Wertetabelle normiert zu 
erzeugen ist auch nicht drin mit den heutigen Schulkentnissen. (Abi)
So sieht es aus!
..hat eben alles seinen Grund.

Ich empfehle selber mal eine, auf 800 Seiten gewachsene, Powerpoint zu 
machen. Dauert halt alle paar Tage ein paar Stunden, ein paar Monate.
Natürlich absolut tadelos.
Wer Rechtschreibfehler findet, kann mir das sagen oder diese behalten.
Sollte formal , wie einer sagt ,definitiv etwas falsch sein, ist dies 
keine Absicht, sondern meine Schlampigkeit. Würde aber gern wissen wo, 
und nicht einfach behaupten. Tja. menschlich halt...
Kriegen wir uns also wieder ein?

von Einer K. (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Cyblord -. schrieb:
>> (sie nennen es ungarische Notation)

Och, da ist mir ein Fehlzitat unterlaufen.
Der Eigentümer ist Christof E. (christof) und nicht Cyblord

Beitrag #6412592 wurde von einem Moderator gelöscht.
von Jack V. (jackv)


Lesenswert?

Christof E. schrieb:
> Also Leute.
> Dieser Kurs ist für Anfänger, bzw. etwas Erfahrene im Controllerleben
> und ANSI-C und die, die sich zum ersten mal im Leben trauen, Drähte an
> Strom und Servos und dem gekauften Controller anzulegen.

… genau bei denen wär’s halt wichtig, die kleinen Stolperstellen 
wegzumachen. Damals, als man noch Bücher gekauft hat, hatte ich mal 
eines mit so subtilen Fehlern – was dazu führte, dass die Beispiele 
nicht richtig funktionierten, bzw. ich mit den Texten teils nix anfangen 
konnte, weil sie mir einfach nicht logisch erfassbar schienen.

Das hat mich ziemlich frustriert – ich war ja Anfänger, und hab ich das 
erste Mal im Leben an so ein Tastenbrett getraut, um Programmieren zu 
lernen – das war ein Buch, also musste es schließlich an mir liegen, 
wenn ich es nicht hinbekomme, oder? Ich hab das beinahe wieder an den 
Nagel gehängt.
Tu deinen Lesern das bitte nicht an – korrigiere, wo’s einfach möglich 
ist, zeitnah.

Das ist doch nur ’n PDF und nix Gedrucktes, das man nicht mehr ändern 
kann.

: Bearbeitet durch User
von Christof E. (Gast)


Lesenswert?

Ja. Ich versuche zu verstehen:
Danke für den Hinweis.
Aber,... das ist doch recht einfach, was ich da meine.
Da ich es so mache, mache ich es auch einfach so. Schon seit 30 Jahren. 
schon seit ich diese Methodik bei Petzolds Win3.1 gelesen habe.
Mit Erfolg.

Es geht mir darum sich zu trauen, die Register selbst zu  benutzen.
Timer selbst zu Stellen, den OCRx selbst zu definieren anhand der 
Verwendeten Takte und der gewünschten Frequenz.
Ich wollte bewusst keine IDE, die mir die Intelligenz abnimmt, auf die 
Datentypen zu achten.
Das führt zu Schmuddel Code, wie ich bei Sketch und Python Programmen 
gesehen habe.
gruselig.
die Formatierung ist manchmal etwas zu gross. Das war wegen der 
Beamertauglichkeiit. Ist halt kein redigiertes Buch.


Jack V. schrieb:
> Christof E. schrieb:
>> Also Leute.
>> Dieser Kurs ist für Anfänger, bzw. etwas Erfahrene im Controllerleben
>> und ANSI-C und die, die sich zum ersten mal im Leben trauen, Drähte an
>> Strom und Servos und dem gekauften Controller anzulegen.
>
> … genau bei denen wär’s halt wichtig, die kleinen Stolperstellen
> wegzumachen. Damals, als man noch Bücher gekauft hat, hatte ich mal
> eines mit so subtilen Fehlern – was dazu führte, dass die Beispiele
> nicht richtig funktionierten, bzw. ich mit den Texten teils nix anfangen
> konnte, weil sie mir einfach nicht logisch erfassbar schienen.
>
> Das hat mich ziemlich frustriert – ich war ja Anfänger, und hab ich das
> erste Mal im Leben an so ein Tastenbrett getraut, um Programmieren zu
> lernen – das war ein Buch, also musste es schließlich an mir liegen,
> wenn ich es nicht hinbekomme, oder? Ich hab das beinahe wieder an den
> Nagel gehängt.
> Tu deinen Lesern das bitte nicht an – korrigiere, wo’s einfach möglich
> ist, zeitnah.
>
> Das ist doch nur ’n PDF und nix Gedrucktes, das man nicht mehr ändern
> kann.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

laut meiner Meinung nach fehlt hier ganz klar eine Gliederung nach 
Themen. Das sieht alles wild gemischt aus gespickt mit paar 
Elektronikschaltungen. Ich sehe ehrlich gesagt keinen roten Faden. Ich 
bezweifel auch das man damit Vorträge halten kann, du müßtest ja ständig 
hin und herspringen. Schau dir einmal ein Programmier- und 
Elektronikbuch an wie die aufgebaut und gegliedert sind. Was mich auch 
stört sind die zu vielen und zu großen Bilder und Schrift. Man ist 
permanent am blättern wenn man 3 Wörter gelesen hat. Das lenkt nur ab. 
Ich gehe davon aus das es kein Bilderbuch sein soll.

Normaler Text und Programmcode könnte sich farblich unterscheiden. Und 
zwar im Gesamten .pdf und nicht nach Lust und Laune mal hier mal da. Das 
lesen fällt sehr schwer.

Was sich jedoch widerspricht ist, du meckerst in deiner ersten 
Verteidung gegen Arduino, verwendest aber in deinem Vortrag Arduino.

So hart das jetzt klingt. Es ist wirklich nur eine wilde Sammlung von 
deinen Notizen. Bevor du antwortest, du wolltest Kommentare lesen ...

Beitrag #6412628 wurde von einem Moderator gelöscht.
von Egon D. (Gast)


Lesenswert?

Jack V. schrieb:

> Christof E. schrieb:
>> Also Leute.
>> Dieser Kurs ist für Anfänger, bzw. etwas Erfahrene
>> im Controllerleben und ANSI-C und die, die sich zum
>> ersten mal im Leben trauen, Drähte an Strom und
>> Servos und dem gekauften Controller anzulegen.
>
> … genau bei denen wär’s halt wichtig, die kleinen
> Stolperstellen wegzumachen.

Richtig.

Das Problem ist: Man muss alle nebensächlichen Details,
die keinen Erklärwert haben, weglassen, weil sonst der
unkundige Leser in der Masse der Einzelheiten ersäuft --
man muss aber DIE Details, die zum Verständnis wichtig
sind, sachlich richtig, logisch klar und sprachlich
verständlich darstellen.

Das ist eine saumäßige Arbeit -- ich weiss das aus
eigener Erfahrung.

von Christof E. (Gast)


Lesenswert?

Gegentest auf Kritik  #include <avr\io.h>  mit Backslash
ES GEHT !
mein WINAVR, von dem ich immer rede, tut es auch, ebenso wie ich sagte!
Es hat somit  avr/io.h im richtigen Pfad.
und ich habe ein zugehöriges makefile
und nicht nur "avr-gcc blub.c"

Deshalb ist es nicht aufgefallen. So einfach ist das.
wenn an zwei Stellen in 800 Seiten das "\" Stand, ist das erträglich, 
nicht?

nämlich mit:
Compiling C: main.c
avr-gcc -c -mmcu=atmega328p -I. -gdwarf-2 -DF_CPU=16000000UL -Os 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=./main.lst  -std=gnu99 -MMD -MP -MF 
.dep/main.o.d main.c -o main.o
-------------------------------------------------------------

define AUTOR    "=/\= Christof Ermer =/\= "
#define IHAVENOBRAIN  "I have no brain"
#define USEYOURS  "Use your own"
#include <avr/sfr_defs.h>
#include <avr\io.h>          //siehe Backslashs
#include <util\delay.h>  //siehe Backslashs
// ***************
int main(void)
// ***************
{
DDRC = 1;
while( 1 )
.
.
-----------------------------------------------
Ergebniss:

Size after:
AVR Memory Usage
----------------
Device: atmega328p
Program:     176 bytes (0.5% Full)
(.text + .data + .bootloader)
Data:          0 bytes (0.0% Full)
(.data + .bss + .noinit)


Jack V. schrieb:
> Christof E. schrieb:
>> Includes Schreibweise wie  "avr\io.h" sind evtl historische relikte und
>> werden problemlos compiliert.  das macht es nicht falscher.
>
>
1
% avr-gcc blub.c
2
> blub.c:1:10: fatal error: avr\io.h: No such file or directory
3
>     1 | #include <avr\io.h>
4
>       |          ^~~~~~~~~~
5
> compilation terminated.
6
>
>
> Mit dem richtigen Slash geht’s.
>
> Du kannst nun die Probleme kleinreden und deine Sachen verteidigen, oder
> du verbesserst dein Script einfach. Vom Letzteren hätten alle was, btw.

von Jack V. (jackv)


Lesenswert?

Christof E. schrieb:
> Gegentest auf Kritik  #include <avr\io.h>  mit Backslash
> ES GEHT !

Unter Windows, ja. Unter Linux hat ein Backslash ’ne andere Bedeutung. 
Wäre schon schön, wenn da der allgemein anerkannte Standard genutzt 
würde, damit’s portabel bleibt. Oder du schreibst ganz am Anfang dran, 
dass es nur für Windowsnutzer ist – dann ist’s für viele eh gleich 
gestorben. Hätte für dich den Vorteil, dass du viel weniger 
Fehlermeldungen reinbekommst. Wenn das das Ziel ist: nur zu.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

damit auch Verbesserungskommentare kommen.
Seite 411.
Mechanische Taster sollten nicht in einer ISR entprellt werden.
Du fängst hier an einem Anfänger die Entprellung mit ISR zu zeigen. 
Danach verweist du auf Polling in der Mainloop. Das Wort Polling fällt 
aber nicht. Das verfällt zur Randbemerkung ohne Lösung. Das müßte 
umgekehrt aufgebaut sein. Tasterentprellung mit Polling zeigen/erklären 
und bei externen einmaligen/seltenen Triggerereignissen auf die ISR 
eingehen. Nur dazu musste den Timer vorher erklären um ein zyklisches 
Polling erreichbar zu machen. Ob das dann allerdings noch Anfängerniveau 
hat müssen andere beurteilen. Damit bin ich wieder bei Arduino.

Wenn das ein vernünftiges Buch werden soll musste viel umsortieren usw. 
Das es schwer ist wissen wir alle. Kritik zu lesen ist auch schwierig, 
weiß ich auch, nur ohne die wirds nicht besser, weil man in seiner 
Gedankenwelt bleibt und die Probleme anderer damit nicht sieht.

von Christof E. (Gast)


Lesenswert?

Also Jack. Was ist mit Dir los?
Geht es auch mal ohne naseweiser Überheblichkeit?
Kriegen sie sich mal ein.

Da Sie den Kurs nicht brauchen, weil sie es ja besser können, verlassen 
sie einfach diesen Thread. So einfach ist das,

Wie oft mus sich sagen, das ich WINAvr benutze.
Und dass ich einfach ein Praxis Kursarbeitsskript zur Verfügung 
stell(t)e.
Eine Stoffsammlung, ein Merkzettel, und keine redigierte Doktorarbeit.

Wer Linux macht, kann dies auch tun, und es wird gehen.
Weil es ums das Verständnis geht
Den "\" habe ich zu "/"  gedreht. ( Was WINAVR (merke WINDOWS) 
tolerierte )
...und das kann jeder andere auch.
So "viele" Anfänger ,  für die es "Eh gleich gestorben ist, weil ich 
Windows verwende, sind es wohl auch nicht. Und ob das mein Ziel sei.
!Nein ist es nicht.

Jack V. schrieb:
> Christof E. schrieb:
>> Gegentest auf Kritik  #include <avr\io.h>  mit Backslash
>> ES GEHT !
>
> Unter Windows, ja. Unter Linux hat ein Backslash ’ne andere Bedeutung.
> Wäre schon schön, wenn da der allgemein anerkannte Standard genutzt
> würde, damit’s portabel bleibt. Oder du schreibst ganz am Anfang dran,
> dass es nur für Windowsnutzer ist – dann ist’s für viele eh gleich
> gestorben. Hätte für dich den Vorteil, dass du viel weniger
> Fehlermeldungen reinbekommst. Wenn das das Ziel ist: nur zu.

von Jack V. (jackv)


Lesenswert?

Christof E. schrieb:
> Also Jack. Was ist mit Dir los?
> Geht es auch mal ohne naseweiser Überheblichkeit?
> Kriegen sie sich mal ein.

Wenn schon förmlich, dann bitte richtig, mit „Sie“ und so, und 
konsequent, also ohne „dir” dazwischen, ja? Ansonsten wollte ich nicht 
überheblich wirken, sondern nur darauf hinweisen, dass der Backslash an 
der Stelle problematisch ist, auch, wenn es bei dir keinen Unterschied 
macht – zumindest, wenn du nicht die Hälfte oder mehr der 
μC-Lernwilligen ausschließen willst.

Edit, OT: TOFU wär’ zu vermeiden. Die Neunziger sind wirklich vorbei.

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

Christof E. schrieb:
> Also Leute.
> Dieser Kurs ist für Anfänger, bzw. etwas Erfahrene im Controllerleben
> und ANSI-C und die, die sich zum ersten mal im Leben trauen, Drähte an
> Strom und Servos und dem gekauften Controller anzulegen.
> und die etwa schlaueres, und vor allem selbst machen wollen,
> als Sketch Programme zu kopieren.

Und genau dafür ist dein Dokument eben nicht wirklich geeignet. Fang 
beim Urschleim an, aber mach's kompakt und stringent. Von vielen 
Bildern, die irgend eine Leiterplatte oder ähnliche Zeugs zeigen, wird 
niemand klüger.

Ich geb dir mal nen Rat, da ich weiß, daß das Schreiben von 
Dokumentationen keine wirklich einfache Sache ist.
Also:
Schreibe deinen Text so, als ob du ihn für einen alten Advokaten 
schriebest. Dieser Advokat versteht von deinem Fachgebiet erstmal 
überhaupt nichts, aber er hat einen rasiermesserscharfen Verstand und er 
kann logisch denken und er vergiß nichts, was du ihm zuvor erklärt hast.

Er kann auch kombinieren, aber dabei zieht er Dinge aus seiner 
Lebenswelt hinzu, die mit deiner Welt nichts gemeinsam haben, also mache 
deine Erklärungen so, daß alle Stücke zum Begreifen deiner Argumentation 
von dir bereits zuvor dargelegt worden sind, so daß man zum Verstehen 
nicht auf eigene Faust kombinieren muß.

Fang beim Anfang an und nicht in der Mitte.

Mache dir ein Konzept und eine Gliederung und lege ganz am Anfang fest, 
was du zu erklären beabsichtigst.

Benutze keine Abkürzungen oder Spezialausdrücke, die du nicht zuvor 
sauber erklärt hast.

Gehe logisch vor und mache keine Gedankensprünge.

Schweife auch nicht ab.

Ergehe dich nicht in Nebensächlickkeiten.

So, das sollte für den Anfang reichen. Nun begutachte mal selber deine 
Dokumentation nach eben diesen Kriterien.

W.S.

von Einer K. (Gast)


Lesenswert?

Christof E. schrieb:
> Da Sie den Kurs nicht brauchen, weil sie es ja besser können, verlassen
> sie einfach diesen Thread. So einfach ist das,

Also, ich finde, dass du dich nicht so sehr aufregen solltest...
Denn das führt fast unweigerlich zu einem Tunnelblick.
Auch gerne dazu, dass man Kritik in der Sache, zu persönlich nimmt.

z.B. kannst du keinem verbieten was er/sie/es sagt.
Das ist einfach irrational, alleine weil dein Ärmchen viel zu kurz sind, 
um das durchzusetzen.

Formal ist das hier eine strenge Hierarchie
Betreiber-->Moderatoren-->User-->Gäste
Praktisch herrscht hier zum größten Teil Anarchie. Allerdings mit 
zuwenig Verantwortungsbewusstsein/Vernunft, um richtig gesund zu sein.


----------

Desweiteren:
Viele sind hier in der harten Praxis aktiv und erkennen jede kleine 
Macke in Texten/Programmen. Können aber Kritik häufig nicht gut rüber 
bringen.

Mein Rat:
Nimm dir die Kritik, die berechtigte, nicht zu sehr zu Herzen, aber nimm 
sie in den Verstand auf. Bei der nächsten Überarbeitung kann man/du sie 
ja korrigieren.

Grundsätzlich finde ich es richtig, gut und Lobenswert, Anfängern, egal 
welcher Couleur, das Thema näher zu bringen.

Auch wenn ich sicherlich vieles anders gemacht hätte, möchte ich stark 
bezweifeln, ob meins besser geworden wäre.

von Christof E. (Gast)


Lesenswert?

Vielen Dank. wenigstens mal was vernünftiges an Kritik.
Offenbar wurde nicht klar, wie ich das gemeint habe,
Nicht der Interrupt entprellt. !!
Er setzt nur ein Ereignis Flag, so das der eigentliche 
Key-Debounce-Polling ( wo auch immer, im Main, im Timer? ) angestossen 
wird. So die Idee.

PRINZIP:
#define KEY_INT_EVENT 0x01
ISR( INT0.....
{
gu8KeyFlags |= KEY_INT_EVENT;
// dann Stop INT0_Interrupt  usw...
}

// irgendwo z.B. Mainloop
if(gu8KeyFlags & KEY_INT_EVENT)
{
gu8KeyFlags &= ~KEY_INT_EVENT; // clear flag
....Polling , was immmer passiert
}
Ich wollte damit vor allem die "Möglichkeit" der Ablaufsteuerung mit 
Flags zeigen. Dass damit Code Aktiv geschaltet werden kann..
so war das gemeint

ich werde es überarbeiten.
Aber dann neuer Link auf meiner Homepage.

Inhaltsverzeichnis... schwierig.
Tatsächlich springe ich die Themen je nach Kursablauf an.
Oft gibt das Niveau einen kerzengeraden Weg nicht vor.
Tastentprellung braucht eine ganzen Vormittag mit Übung.
Ernüchternd, nicht?
Deshalb habe ich das als Fleisaufgabe mit nach Hause gegeben.
seit etwa 10 Jahren ist der Wurm drin, seit dem Bachelor, Master..
Früher wollten die Studis was wirklich selber machen, nicht nur Punkte 
abgreifen.  Weis auch nicht wie das wird.
Sowas STM32 habe ich als Lehrstoff an der Physik schon gesteckt. Geht 
wohl nur in FOS/THs im Informatik Studium.
Allein in einem Kurs ein STM32 oder EFM32 Entwicklung im Eclipse, mit 
Debugger zum laufen zu bringen,..katastrophe...das braucht soviel Zeit 
mit Frusts, das die durchschnittliche Zwischensemster ganztags Kursdauer 
von nur 10 Tagen kaum reicht.
Wir werden sehen....
Ihre Kritik ist sehr hilfreich.......

Veit D. schrieb:
> Hallo,
>
> damit auch Verbesserungskommentare kommen.
> Seite 411.
> Mechanische Taster sollten nicht in einer ISR entprellt werden.
> Du fängst hier an einem Anfänger die Entprellung mit ISR zu zeigen.
> Danach verweist du auf Polling in der Mainloop. Das Wort Polling fällt
> aber nicht. Das verfällt zur Randbemerkung ohne Lösung. Das müßte
> umgekehrt aufgebaut sein. Tasterentprellung mit Polling zeigen/erklären
> und bei externen einmaligen/seltenen Triggerereignissen auf die ISR
> eingehen. Nur dazu musste den Timer vorher erklären um ein zyklisches
> Polling erreichbar zu machen. Ob das dann allerdings noch Anfängerniveau
> hat müssen andere beurteilen. Damit bin ich wieder bei Arduino.
>
> Wenn das ein vernünftiges Buch werden soll musste viel umsortieren usw.
> Das es schwer ist wissen wir alle. Kritik zu lesen ist auch schwierig,
> weiß ich auch, nur ohne die wirds nicht besser, weil man in seiner
> Gedankenwelt bleibt und die Probleme anderer damit nicht sieht.

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

Oliver S. schrieb:
> Mishra wird zwar professionell (unter Zwang) genutzt, läuft aber unter
> der Rubrik „professioneller Blödsinn“.
>
> Ich sehe es wie meine Vorschreiber: ungarische Notation ist vollständig
> überflüssig.

STIMMT! nochmals doppelt und fett unterstrichen!


MISRA war/ist eine Totgeburt, wer hierzu referenziert hat keinen eigenen 
praktischen Hintergrund dazu und nichts selber real dazu erlebt.

Ungarische Notation war mal vor 20 Jahren eine "kleine Idee" und heute 
komplett tot/unbenutzt/null added value!

von A. S. (Gast)


Lesenswert?

Apollo M. schrieb:
> MISRA war/ist eine Totgeburt, wer hierzu referenziert hat keinen eigenen
> praktischen Hintergrund dazu und nichts selber real dazu erlebt.
>
> Ungarische Notation war mal vor 20 Jahren eine "kleine Idee" und heute
> komplett tot/unbenutzt/null added value!

Misra ist gut. Für seine Anwendung. Und was ist die? Für 
Sicherheitsgerichteten Code mit begrenzter, eng umrissener Aufgabe, den 
größtenteils Anfänger schreiben oder warten.

Es geht bei Misra vor allem darum, die Fallen zu kennen und zu 
versichern, dass man sie kennt.

Ich sehe allerdings nicht, wo Misra ungarische Notation verlangt. Vor 
allem jenen Abklatsch mit der integer-Größe im Namen.

Aber immerhin hat es "der Ungar" bis ins All geschaft (als 
Weltraumtourist).

Beitrag #6412849 wurde von einem Moderator gelöscht.
von Rolf M. (rmagnus)


Lesenswert?

A. S. schrieb:
> Misra ist gut. Für seine Anwendung. Und was ist die? Für
> Sicherheitsgerichteten Code mit begrenzter, eng umrissener Aufgabe, den
> größtenteils Anfänger schreiben oder warten.

Und genau darin liegt das Problem. Solchen Code dürften Anfänger gar 
nicht erst bearbeiten. Man lässt ja auch nicht den Praktikanten im 
Krankenhaus eine Herzoperation durchführen. Den befähigt man auch nicht 
dazu, indem man ihm einfach ein Heftchen mit Regeln vorlegt.

von misra?! (Gast)


Lesenswert?

MISRA erfüllt imho mehrere Aufgaben:1. Der Entwickler muss sich Gedanken 
über seinen Code machen, entweder weil er die Regeln befolgt, oder weil 
er Abweichungen dokumentieren/argumentieren muss.
2. Das Management ist zufrieden, weils etwas quantifizierbares gibt, das 
jemand unterschreiben kann. 3. Der Kunde ist zufrieden, weil er 
Verantwortung abgeben kann.
Das alles kann zu gutem Code führen, muss es aber nicht. Wenn man zB in 
AUTOSAR-Sourcen schaut, wird man mit einer recht großen Menge an 
MISRA-Violation-Rechtfertigungen konfrontiert. Anfänger sind aber 
(vermute ich) eher überfordert damit, sich auch um das noch zu kümmern, 
während sie sich noch immer nicht sicher sind was & und * so alles 
anstellen ... Da ist eine strukturierte Vorgehensweise (die für Code im 
MISRA-Umfeld ja auch dringend nötig ist) etwas, das deutlich hilfreicher 
ist.

Beitrag #6412960 wurde von einem Moderator gelöscht.
Beitrag #6412970 wurde von einem Moderator gelöscht.
von spess53 (Gast)


Lesenswert?

HI

> Ich wollte einigen, vor allem Anfängern,
> ein Geschenk machen.

Quidquid id est, timeo Danaos et dona ferentes.

MfG Spess

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

spess53 schrieb:
> Quidquid id est, timeo Danaos et dona ferentes.

und wieviele Leute hier im Forum können deinen Lateinischen Satz 
verstehen?

Warum nicht in Altgriechisch, oder gar in Sanskrit? Das gibt noch mehr 
Authentizität!

: Bearbeitet durch User
Beitrag #6412989 wurde von einem Moderator gelöscht.
von Ralf X. (ralf0815)


Lesenswert?

Wegstaben V. schrieb:
> spess53 schrieb:
>> Quidquid id est, timeo Danaos et dona ferentes.
>
> und wieviele Leute hier im Forum können deinen Lateinischen Satz
> verstehen?

Alle, die noch eine Suchmaschine bedienen können? :-)

Und mit „Φοβοῦ τοὺς Δαναοὺς καὶ δῶρα φέροντας.“  oder "Phobou tous 
Danaous kai dōra pherontas." hätte das auch funktioniert.

: Bearbeitet durch User
Beitrag #6413001 wurde von einem Moderator gelöscht.
Beitrag #6413019 wurde von einem Moderator gelöscht.
Beitrag #6413036 wurde von einem Moderator gelöscht.
Beitrag #6413083 wurde von einem Moderator gelöscht.
von Adam P. (adamap)


Lesenswert?

Also ich bekomme bei der PDF Augenschmerzen...

- Viel zu überladen (genau so wie die Internetseite)
- Code schlecht formatiert
- "ungarische Notation"?
- ...

Als Anfänger wäre ich da direkt raus.

...manchmal ist weniger mehr.

: Bearbeitet durch User
von Christof E. (Gast)


Lesenswert?

Adam P. schrieb:
> Also ich bekomme bei der PDF Augenschmerzen...
>
> - Viel zu überladen (genau so wie die Internetseite)
> - Code schlecht formatiert
> - "ungarische Notation"?
> - ...
>
> Als Anfänger wäre ich da direkt raus.
>
> ...manchmal ist weniger mehr.

Es ist primär als Powerpoint Beamer Version mit Erklärung gedacht. PDF 
ist daher oft ungünstig formatiert. (..Kritik von außen)

Es fehlt ein Inhaltsverzeichnis.  Warum? Weil die Reihenfolge sich 
dauernd ändert, neues dazukommt. Und es von der Vorbildung abhängt, was 
interessiert und wann wo gebraucht wird.  Also, einfach mit STR+F nach 
Themen suchen, die einem interessieren.
Oder einfach durchblättern und ausprobieren.

Es ist für Neulinge, ungeübte oder leicht vorgebildete gedacht.  Nicht 
für Profis, die  es sowieso besser wissen. Und jedes fehlende „;“ 
mokieren.
Codebeispiele sind  ab und zu inkonsistent formatiert.
Das liegt daran das manches sehr alt, anderes neu ist.
Oder der Platz/Seite  genutzt werden sollte.

Die vielen Bilder sollen die Ödnis mancher Lehrbücher vertreiben 
helfen.Die „Ungarische Notation“ ist mein Stil, in meinem Kursskript. 
Punkt

Rechtschreibfehler sind leider in der Natur meines ADHS möglich.

von Cyblord -. (cyblord)


Lesenswert?

Christof E. schrieb:
> Es ist für Neulinge, ungeübte oder leicht vorgebildete gedacht.  Nicht
> für Profis, die  es sowieso besser wissen. Und jedes fehlende „;“
> mokieren.

Es wurde schon ein paar mal gesagt, aber du scheinst es nicht glauben:

GERADE für Anfänger, gerade wenn man etwas für andere macht, wenn man 
LEHREN möchte, dann müssen die Infos präzise sein. Das Material muss 
konsistent sein.

Es ist ein Irrglaube dass man bei Anfängern über so was hinwegsehen 
kann. Und ein paar Fehler und Ungenauigkeiten würden da nichts 
ausmachen.

Gerade da braucht man eine saubere Struktur und der Autor/Dozent muss 
diese saubere Struktur auch verinnerlicht haben. Nur so kann man Wissen 
effizient vermitteln.

Ehrlich gesagt, merkt man an derart schludrigen Arbeiten, dass der Autor 
selbst nicht so fest im Sattel sitzt was den Stoff angeht.

Deine falschen Includes z.B. sowohl die Backslahes als auch die 
überflüssige ..sfr.h verdeutlichen das:

Für jemanden der vor sich hin frickelt spielt das keine Rolle. Auf 
seinem Windows System läuft das und der zusätzliche include tut ihm 
nicht weh.

Will ich aber LEHREN, so muss ich erstmal VERSTEHEN warum der Backslash 
nicht sein darf und ich muss das include-system der AVR Toolchain 
verstanden haben.
Habe ich das nicht, sollte ich anderen auch nichts in der Richtung 
beibringen. Ich gebe Halbwissen weiter und trainiere falsche 
Vorgehensweisen an.
Der Hinweis: "Auf WinAVR läuft es, ich habe doch gesagt ich nutze nur 
Windows" ist in diesem Zusammenhang wenig schmeichelhaft, bis extrem 
peinlich. Zumindest für jemanden der anderen etwas beibringen will.

Es bringt nichts wenn der Blinde, den Blinden die Farben beibringt.
Es gibt nichts schlimmeres als ein ein Lehrer den eigenen Stoff nicht 
kapiert hat. Und dazu gehört mehr als: "Also gestern gings bei mir".

: Bearbeitet durch User
von Adam P. (adamap)


Lesenswert?

Cyblord -. schrieb:
> GERADE für Anfänger, gerade wenn man etwas für andere macht, wenn man
> LEHREN möchte, dann müssen die Infos präzise sein. Das Material muss
> konsistent sein.

Das sind dann die Fälle, wo Schüler/Studenten hier im Forum schreiben:
"...ich habe mich ans Skript gehalten, aber mein Programm funktioniert 
nicht..."

Christof E. schrieb:
> Es ist für Neulinge, ungeübte oder leicht vorgebildete gedacht.

GENAU...Neulinge sind meistens eh schon vom Inhalt (Programmiersprache / 
Hardware) am Anfang überfordert und dann kommt noch der mega Input an 
Bildern usw.

Und wenn ein Profi, der eigentlich keine PDF benötigt, sagt:
"Das ist too much", was soll da ein Anfänger bitte denken.

von Christof E. (Gast)


Lesenswert?

@ von Cyblord -. (cyblord)
Also jetzt mal gut
Könnten wir diese beisenden Herabwürdigungen und Besserwisserei mal sein 
lassen.!
Hängen Sie sich bitte nicht an einigen Relikten mit einen Backslash auf,
Mir ist es nicht aufgefallen, weil eben WINAvr das toleriert.
WinAVR war die Wahl FÜR Anfänger. Weil einfach und nackt.
Das heisst nicht, das ICH NUR damit arbeiten kann, weil sonst zu blöd!

Oder einer #include sfr.h zuviel.
das ist formal sicher unnötig, aber kein Fehler.

Das habe ich schon korrigiert, oder werde es noch.

Es ging mir darum junge Leute zu motivieren nicht z.B. dieses doofe 
Sketch zu machen oder überhaupt Projektkopierer zu werden.
Tatsächlich konnte ich schon einige junge Leute dazu bringen, als 
Entwickler zu arbeiten und ein Brikett mehr aufzulegen.
und damit habe ich wohl Erfolg gehabt.

Ich selbst arbeite mit C++ und EFM32 von Silconlabs unter Eclipse.
Was wirklich steinig ist. Und gerade jetzt und heute  programmiere ich 
den Raspi mit CodeLite für ein MINT Girl Projekt.

So und jetzt mal zu ihnen
Es ist ein Frechheit Anderen die Kompetenz abzusprechen, weil 
irgendwelche Artefakte in 800 Seiten sind.
Ich verbitte mir das:
Für was halten Sie sich!  Für den Oberguru?

Auch ich habe 35 Jahre Berufserfahrung mit QNX, und Luftfahrt 
zertifizierter Software.
Ich brauche ihr Gedöns nicht. Und nicht ich muss mich schämen für 
schlechten Stil. Und wen Sie andere für "zu blöd für Kurs" halten, kann 
sich jeder selbst hier eine Meinung bilden für schlechten 
Kommunikationsstil.

Ich dachte es ist ein gute Idee in einem Mikrocontroller Forum meinem 
Mikrocontroller Kurs zur Verfügung zu stellen, den ich wohl nicht mehr 
nutzen kann, weil Corona keine Kurse zulässt, auch nächstes Jahr, und 
danach ein Nachfolger sein eigens Ding mach.
Schade. Aber es reicht mir hier. Beschämend. Aber nicht für mich

Beitrag #6413228 wurde von einem Moderator gelöscht.
von Cyblord -. (cyblord)


Lesenswert?

Christof E. schrieb:
> @ von Cyblord -. (cyblord)
> Also jetzt mal gut
> Könnten wir diese beisenden Herabwürdigungen und Besserwisserei mal sein
> lassen.!

Wenn du jede Kritik nur so siehst, dann wird das nichts. Arbeite mal an 
deiner Kritikfähigkeit. Die ist elendig verkümmert würde ich mal sagen.

> Hängen Sie sich bitte nicht an einigen Relikten mit einen Backslash auf,
> Mir ist es nicht aufgefallen, weil eben WINAvr das toleriert.
> WinAVR war die Wahl FÜR Anfänger. Weil einfach und nackt.
> Das heisst nicht, das ICH NUR damit arbeiten kann, weil sonst zu blöd!

Ich habe doch ausgeführt WARUM das ein Problem ist. Bitte nochmal lesen 
und es verstehen!

> Oder einer #include sfr.h zuviel.
> das ist formal sicher unnötig, aber kein Fehler.

Ich habe doch ausgeführt WARUM das ein Problem ist. Bitte nochmal lesen 
und es verstehen!

> Ich selbst arbeite mit C++ und EFM32 von Silconlabs unter Eclipse.
> Was wirklich steinig ist. Und gerade jetzt und heute  programmiere ich
> den Raspi mit CodeLite für ein MINT Girl Projekt.

Ich finde es zweifelhaft wenn du Leuten was beibringst mit so einer 
Einstellung und quasi keiner Kritikfähigkeit.

> So und jetzt mal zu ihnen

Uiui jetzt bekomm ich Angst.

> Es ist ein Frechheit Anderen die Kompetenz abzusprechen, weil
> irgendwelche Artefakte in 800 Seiten sind.
> Ich verbitte mir das:
> Für was halten Sie sich!  Für den Oberguru?

Du kannst dir verbitten was du willst. Schlechten Code und schlechte 
Skripte werde ich als solches benennen. Und JA, das muss nicht von 
mangelender Kompetenz herrühren, es gibt sicher gute Entwickler die 
schlechte Skripte machen, aber bei deiner ganzen Pfuscher-Einstellung 
glaube ich daran nicht. Ich bleibe dabei, dass du in der ganzen Materie 
selbst eher so Try&error unterwegs bist und weit entfernt von "fest im 
Sattel".

> Auch ich habe 35 Jahre Berufserfahrung mit QNX, und Luftfahrt
> zertifizierter Software.
Und da schludert man sich mit falschen Includes durch? Oder machst du 
das nur bei minderwertigem Code für deine Schüler? Sind die es nicht 
Wert dass man ordentlich arbeitet?

> Ich dachte es ist ein gute Idee in einem Mikrocontroller Forum meinem
> Mikrocontroller Kurs zur Verfügung zu stellen, den ich wohl nicht mehr
> nutzen kann, weil Corona keine Kurse zulässt, auch nächstes Jahr, und
> danach ein Nachfolger sein eigens Ding mach.
> Schade. Aber es reicht mir hier. Beschämend. Aber nicht für mich

Ach wolltest du gar kein ehrliches Feedback sondern nur Applaus? Dann 
schreib das nächstes mal dazu.

von Adam P. (adamap)


Lesenswert?

Christof E. schrieb:
> Es ist ein Frechheit

Christof E. schrieb:
> Ich dachte es ist ein gute Idee in einem Mikrocontroller Forum meinem
> Mikrocontroller Kurs zur Verfügung zu stellen

Natürlich...aber man sollte auch Kritik annehmen.

Stefan hat hier auch sein Skript reingestellt und wurde ebenfalls mal 
hier & da auf Fehler oder Abweichungen angesprochen, jedoch empfand er 
dies nicht als Frechheit.

Man sollte sich der Kritik annehmen und es dann besser machen.
Die ganzen Anmerkungen kommen doch nicht aus Langeweile, sondern, weil 
es Tatsache ist. Dies ist kein Angriff und wer dies so empfindet, dann 
können wir auch nicht weiterhelfen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Cyblord -. schrieb:
> GERADE für Anfänger, gerade wenn man etwas für andere macht, wenn man
> LEHREN möchte, dann müssen die Infos präzise sein. Das Material muss
> konsistent sein.

Ich hätte ja echt nicht gedacht, dass ich in diesem Leben nochmal 
Cyblord meine volle Zustimmung ausdrücken würde. ;-) Aber diesmal ist 
nicht nur der Inhalt seiner Aussage in Ordnung (das passiert gar nicht 
so selten bei ihm) sondern auch der Tonfall.

Christof E. schrieb:
> Kritik in Ehren, aber diese Methoden sind für den AVR so vorgesehen. !

Wenn du es nicht schaffst, Johann ernst zu nehmen, dann sorry, ist dir 
leider nicht zu helfen. Seine Argumente sind nicht nur inhaltlich 
zutreffend (logischerweise, bei seinem Hintergrund), sondern ja nun 
wirklich sehr sachlich formuliert. Bevor du ihnen widersprichst mit 
derart banalen Aussagen wie der von mir gerade zitierten, solltest du 
vielleicht einen Blick mehr in die Details von AVR-GCC und avr-libc 
werfen.

Damit würde ich mich der Nichtempfehlung des Dokuments für Anfänger 
leider anschließen. Es gab ja einige hier, die versucht haben, dir zu 
einem besseren (fehlerfreien und konsistenten) Dokument zu verhelfen, 
aber wenn du deren Kritik nur an dir abperlen lässt ("ist ja nicht für 
Profis gedacht", "geht bei mir so"), dann lohnt das nicht.

ps: Ich weiß, wie aufwändig es ist, Dokumentation zu schreiben. Ein 
großer Teil der avr-libc-Doku ist von mir, und ich habe auch schon 
Workshops und Vorträge zur Genüge gehalten.

: Bearbeitet durch Moderator
von Christof E. (Gast)


Lesenswert?

jtreumer schrieb im Beitrag #6413228:
> Hallo Christof Ermer,
>
> herzlichen Dank für die Mühe, die Du Dir mit der Zusammenstellung des
> Crash-Kurses gemacht hast. Ich freue mich darüber, dass mir jemand aus
> freien Stücken und kostenlos seine Arbeit zur Verfügung stellt. Die Art
> und Weise, wie hier Kritik geübt wird (und sei sie teilweise auch
> sachlich begründet), ist einfach nur daneben.
>
> SCNR, LG Jürgen

Danke

Beitrag #6413242 wurde von einem Moderator gelöscht.
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Christof E. schrieb:
> WinAVR war die Wahl FÜR Anfänger.

WinAVR ist übrigens seit 10 Jahren ungepflegt.

von Rainer S. (enevile) Benutzerseite


Lesenswert?

Christof E. schrieb:
> Ich dachte es ist ein gute Idee in einem Mikrocontroller Forum meinem
> Mikrocontroller Kurs zur Verfügung zu stellen, den ich wohl nicht mehr
> nutzen kann, weil Corona keine Kurse zulässt, auch nächstes Jahr, und
> danach ein Nachfolger sein eigens Ding mach.
> Schade. Aber es reicht mir hier. Beschämend. Aber nicht für mich

Das wäre schade. Viele haben die Gliederung angesprochen. Darauf würde 
ich mal bei Stefans Seite verweisen:
http://stefanfrings.de/mikrocontroller_buch/

Gut Sie arbeiten im Kurs praktisch immer mit Beamer da ist soviel Text 
nicht gut. Deswegen denke ich, dass es eine gute Idee ist es zu 
splitten.
Eine PPP(auch als pdf zur Veranschaulichung) und eine pdf für Arbeits- & 
Lernsmaterial und eine pdf mit Projekten.

Erst ab Seite 15 zeigen Sie wozu ein µC verwendet wird. Direkt danach 
Projekte und dann sprichen Sie die CPU an und zeigst auf 4 
unterschiedlichen Bildern mit dem gleichen Inhalt.

Dann kommen bei Seite 34 bis Seite 57 verschiedenste µController. Und 
den Schaltplan würde ich nicht von Eagle nehmen sondern selber einen 
schönen zeichnen und alles unwichtige weglassen. Eine Seite wo 
verschiedene µController drauf sind reicht.

Usw. für andere Themen.

Das Steckbrett haben Sie gut angerissen. Mehr braucht es nicht.

Ich bin kein Anfänger, aber mir wäre es zuviel Theorie auf einmal.

Bekommen Sie Feedback von Ihren Studenten? So ein Fragebogen ist sehr 
nützlich. Am besten anonym dann sind die ehrlich.

von Nicht W. (nichtsowichtig)


Lesenswert?

Und was genau soll an Cyblords Kritik unsachlich gewesen sein?!

von Christof E. (Gast)


Lesenswert?

Jörg W. schrieb:
> Cyblord -. schrieb:

> Wenn du es nicht schaffst, Johann ernst zu nehmen, dann sorry, ist dir
> leider nicht zu helfen. Seine Argumente sind nicht nur inhaltlich
> zutreffend

Wer sagt den , das ich dass nicht umsetze wa sJohann sagte, acuh cyborg 
hat in manchem Recht
Wer Recht hat hat Recht.
Die Backslashs , etc, überflüssige Includes....
Mir ist das nicht aufgefallen. Die eigenen Fehler und Redundanzen sieht 
man schlecht.
Was ich korrigieren kann, mache ich.
Aber diese Ton hier ist unter meiner Würde.!!

Vieles was man umformatieren sollte, oder besser gar nicht formatieren.
Kommentare habe ich versucht einzufärben

Wem mein Stil nicht gefällt, die vielen Bildchen, braucht nicht 
weiterzulesen. So einfach ist das.
Die Zielgruppe sind Andere.
Ich habe es sonst auf dem Beamer wo ich was dazu sage und zeige. Aber es 
erklärt sich von selbst.
Die Bildchen. Ich mache das so, weil es mir gefällt.

WinaAVR ist gnadenlos veraltet.   Das weis ich.
Aber gerade die Nacktheit des Programmers Notepad macht vieles klarer.
Ein Klick auf Make
Ein Klick auf Programm.. und gut ists..
Und ein Ordnername ist zugleich der Projektname.. ohne komplizierte 
Workspaces usw.
Hat alles seinen Grund

Nachricht von der Aussenwelt:

Ich habe es mit zunehmend schlecht vorgebildeten Studienanfängern zu 
tun.
Da brauch ich nicht mit AVR Studio kommen. Die blicken das nicht, die 
Projektverwaltung, in der kurzen Zeit.
Hab's ausprobiert und bin reumütig zu WINAVR zurück

Wie abreiten im C++ Kurs z.B. mit DEV_C++  . Ebenfalls Saurier.
Das Debugging, grauenhaft. Aber eben auch verständlich, und kostenlos.

Da mein Skript nicht geschätzt wird, habe ich die Löschung des Threads 
beantragt. Das Skript werde ich von berechtigten Fehlern befreien. Aber 
so schlimm waren die jetzt nicht, offen gesagt. Artefakte, Relikte. 
zumeist.

Das Powerpoint beim Kopieren ein Autoformat macht und ein Gänsefüßchen 
runtersetzt... also ich bitte..

Meist sind diese Texte Nachts um 10:00, zuhause, wo das Skript zumeist 
entstand, kurz vor einem Kurs, dazugekommen.
Es geht immer noch um Strukturen. Wie einen Timer Bitmuster Sequenzen 
ausgeben lassen, was Schrittmotor Steuerungen zulässt.  Das ist wichtig, 
wie man das macht, Flags, oder UART Text Kommunikation+ Steuerung mit 
externen Steueroberflächen wie LabView ( Uni üblich )... und das kann 
man mit dem Skript auch selbst lernen. Wie die letzten 16 Jahre (ohne 
festes Skript) zeigen.

von Christof E. (Gast)


Lesenswert?

Rainer S. schrieb:
> Christof E. schrieb:
>> Ich dachte es ist ein gute Idee in einem Mikrocontroller Forum meinem
>> Mikrocontroller Kurs zur Verfügung zu stellen, den ich wohl nicht mehr
>> nutzen kann, weil Corona keine Kurse zulässt, auch nächstes Jahr, und
>> danach ein Nachfolger sein eigens Ding mach.
>> Schade. Aber es reicht mir hier. Beschämend. Aber nicht für mich
>
> Das wäre schade. Viele haben die Gliederung angesprochen. Darauf würde
> ich mal bei Stefans Seite verweisen:
> http://stefanfrings.de/mikrocontroller_buch/
>
> Gut Sie arbeiten im Kurs praktisch immer mit Beamer da ist soviel Text
> nicht gut. Deswegen denke ich, dass es eine gute Idee ist es zu
> splitten.
> Eine PPP(auch als pdf zur Veranschaulichung) und eine pdf für Arbeits- &
> Lernsmaterial und eine pdf mit Projekten.
>
> Erst ab Seite 15 zeigen Sie wozu ein µC verwendet wird. Direkt danach
> Projekte und dann sprichen Sie die CPU an und zeigst auf 4
> unterschiedlichen Bildern mit dem gleichen Inhalt.
>
> Dann kommen bei Seite 34 bis Seite 57 verschiedenste µController. Und
> den Schaltplan würde ich nicht von Eagle nehmen sondern selber einen
> schönen zeichnen und alles unwichtige weglassen. Eine Seite wo
> verschiedene µController drauf sind reicht.
>
> Usw. für andere Themen.
>
> Das Steckbrett haben Sie gut angerissen. Mehr braucht es nicht.
>
> Ich bin kein Anfänger, aber mir wäre es zuviel Theorie auf einmal.
>
> Bekommen Sie Feedback von Ihren Studenten? So ein Fragebogen ist sehr
> nützlich. Am besten anonym dann sind die ehrlich.

Vielen Dank
Ich sehe, da ist noch was zu tun für mich.
Habe evtl zuviel reingestopft. Wollte auf alles vorbereite sein
Ich habe mir das gespeichert und berücksichtige dies sobald ich dazu 
kommen
Vilen Dank
Chriostof Ermer

von Cyblord -. (cyblord)


Lesenswert?

Christof E. schrieb:
> Wem mein Stil nicht gefällt, die vielen Bildchen, braucht nicht
> weiterzulesen. So einfach ist das.

Oder er liest weiter und gibt dir Feedback. Ist das nicht erwünscht?

Ich meine du solltest "deinen Stil" mal überdenken. Allein wenn man 
deine Website anschaut. Ist DAS dein Stil? Ernsthaft?

Und die Folien sind überladen. Das ist ein Fakt. Keine Stilfrage. Schau 
dir doch mal grundlegende Aspekte für gute PP Folien an. Tipps gibts da 
heute an jeder Ecke. Ein bisschen sollte man sowas schon annehmen.

> Da brauch ich nicht mit AVR Studio kommen. Die blicken das nicht, die
> Projektverwaltung, in der kurzen Zeit.
> Hab's ausprobiert und bin reumütig zu WINAVR zurück
> Wie abreiten im C++ Kurs z.B. mit DEV_C++  . Ebenfalls Saurier.
> Das Debugging, grauenhaft. Aber eben auch verständlich, und kostenlos.

Bei der modernen SW-Entwicklung geht es eben auch um Tools. Es geht um 
guten Code und um die sinnvolle Nutzung der Werkzeuge. Bei JEDEM Beruf 
geht Fachwissen und Werkzeugbeherrschung Hand in Hand. Was würdest du zu 
einem Schreiner sagen, der alles mit der Nagelfeile sägt, weil er prof. 
Sägen zu anstrengend findet? Dabei ist egal wie gut er vermeintlich ist. 
Es ist kein prof. Vorgehen.

Was soll bei dir gelehrt werden? Frickeln auf Microcontrollern? Oder hat 
das wirklich irgendwas mit PROFESSIONELLEM Arbeiten zu tun? Ich meine, 
es kommt immer auf den Anspruch drauf an. Aber ich habe da was von Uni 
gelesen.

Ich meine ich mache ja gerne mal Witze über Physiker die SW Entwickeln, 
aber da werden doch alle Klischees erfüllt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Christof E. schrieb:
> Da brauch ich nicht mit AVR Studio kommen. Die blicken das nicht, die
> Projektverwaltung, in der kurzen Zeit.

Das wundert mich jetzt nicht.

Aber du kannst natürlich auch Notepad++ mit einem neueren Compiler 
benutzen, dann ist das wenigstens nicht mehr so hornalt. Es ist ja nicht 
nur, dass allerlei aktuelle Verbesserungen im C-Standard seither 
aufgekommen sind, insbesondere sind seit dem alten GCC, der im WinAVR 
drin ist, unzählig viele Bugfixes in den Compiler eingearbeitet worden 
(und zwar von ebendiesem Johann, der sich ganz oben zu Wort gemeldet 
hat). Auf die sollte man nun wirklich nicht verzichten.

Ja, das gibt's dann nicht schlüsselfertig als Paket, aber für einen Kurs 
an der Uni sollte man so ein Paket ja auch mal selbst zusammenstellen 
können. Du kannst m.W. den Compiler separat bei Atmel/Microchip nehmen, 
ohne dass man den gesamten Atmel-Studio-Rassel runterladen muss.

Christof E. schrieb:
> Aber diese Ton hier ist unter meiner Würde.

Komm, gerade Johann hat das doch außerordentlich sachlich kommentiert, 
viele andere auch.

Das ist ein Forum und damit eben öffentlich, ignoriere einfach die, 
deren Ton dir nicht gefällt.

> Das Powerpoint beim Kopieren ein Autoformat macht und ein Gänsefüßchen
> runtersetzt... also ich bitte

Auch wenn du bittest: einen Anfänger können gerade derartige 
Kleinigkeiten massiv verwirren. Der sucht sich dann mühevoll raus, wie 
er die falschen Gänsefüßchen überhaupt auf der Tastatur findet, nur um 
danach einen Compilerfehler an den Kopf geworfen zu bekommen.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Christof E. schrieb:
> Gegentest auf Kritik  #include <avr\io.h>  mit Backslash
> ES GEHT !

Wow! Du weißt schon, dass aus "A => B" nicht folgt "B => A"? Hier mit:

A = "Code ist korrekt"
B = "Code macht, was er soll"

Das ist ein omnipräsenter Denkfehler! Warum? Weil man B nicht testen 
kann für

* alle Eingaben und Timings
* alle Compiler-Optionen, mit denen übersetzt wird
* alle erlaubten Predefines wie -DF_CPU=
* alle Compiler-Versionen
* alle Hosts, auf denen der Compiler läuft

Häufig begegnet einem der Denkfehler bei Antwort auf Fragen wie "Was 
macht der Code?", wenn mit "Schau dir an, was ein Simulator macht" 
geantwortet wird.  Die Antwort ist in dem Sinne korrekt, dass ein 
Simulator zeigt, was der Maschinencode für bestimmte Eingaben macht. 
Aber daraus erhält man eben  nicht die Semantik des C/C++ Codes!  Und 
auch nicht seine Korrektheit!

Kleine Fehler und Ungereimtheiten

Das Problem damit ist, dass Anfänger oder Leute, die nicht sicher mit 
der Materie umgehen können, nicht darüber hinweglesen — eben weil 
sie sich noch nicht damit auskennen.  Es stellt sich dann ein diffuses 
Gefühl ein von "das versteh ich nicht", und Anfänger denken dann schnell 
sie seien zu blöd um das alles zu verstehen, werden frustriert etc. und 
/ oder lernen es so auswendig, wie es da steht.

Klar, in einer Präsenzveranstaltung kann man nachfragen, falls einem 
klar ist, was da inkonsistent ist.  In einem Dokument zum 
Selbststudium geht Nachfragen aber nicht.

Was wären z.B. Deine Antworten auf die Fragen:

* Warum heißt es manchmal #include <avr/io.h> und manchmal #include 
<avr\io.h>?

* Warum wird avr/sfr_defs.h included?

* Warum ist manchmal ein ";" hinter der schließenden "}" eines Blocks 
und manchmal nicht?

Weil es funktioniert?

Aufbau

Das Dokument ist offenbar als Mitschrift oder Dokumentation einer 
Präsenzveranstaltung gewachsen, und als solches hat es wohl seine 
Daseinsberechtigung.  Das bedeutet aber noch lange nicht, dass es für 
ein Selbststudium geeignet wäre.

Solch ein Werk zu erarbeiten ist sau viel Arbeit, und es wäre definitiv 
mehr als eine Dokumentation dessen, was in einem bestimmten Präsenzkurs 
dann und wann mal Thema war.

M.E. wäre ein gangbarer Weg genau andersrum:  Man nimmt ein zum 
Selbststudium geeignetes Werk, und darauf basierend konzipiert man eine 
Präsenzveranstaltung.  Aber so ein Werk zu erstellen ist ein erheblicher 
Klotz an Arbeit, und man macht das nicht mal eben nebenher!

Und es braucht definitiv einen Lektor. Und zwar einen, der sich mit der 
Materie auskennt.

Formatierung

Kritik an Formatierung mag Dir haarspalterisch erscheinen.  Hat ja nix 
mit dem Inhalt zu tun.  Aber: Menschen erfassen einen Text nicht nur als 
Abfolge von Buchstaben und Glyphen, sondern als Bild. Das gilt 
insbesondere auch für Code:  Ob der gut oder grottig formatiert ist, ist 
einem Compiler egal.  Für einen Menschen ist es nicht egal.

Die Lehre, die sich damit beschäftigt, heißt Typographie.  Vor 100 
Jahren gab es noch Typographen und Setzer, die Texte und Bilder in eine 
Form brachten, die für den Leser möglichst gut und ermüdungsfrei 
erfassbar war — natürlich ohne den Inhalt anzufassen.  Das betrifft 
Formatierung von Texten, Wahl von Schriftschnitten und Seitenspiegel, 
etc.

Mit Aufkommen von Textverarbeitungsprogrammen ist dieser Beruf praktisch 
ausgestorben: Textsatz etc. wird vom Autor selbst vorgenommen, oft ohne 
dass dem Autor typographische Prinzipien und Anforderungen überhaupt 
bewusst sind.  Er wählt Fonts und Vorlagen, die der hübsch findet, und 
gut ist...

Wie gut und ermüdungsfrei ein Text zu lesen ist, hängt aber wesentlich 
auch mit der Form zusammen.  Ist nun mal so.

Dein Dokument hat das Problem, dass es eine Präsentation ist, d.h. es 
passt nur recht wenig Text auf eine Seite, was wiederum die 
Möglichkeiten, ihn typographisch angemessen zu gestalten, stark 
einschränkt.  Insbesonere Quellcode, der sehr stringente Formatierung 
erfordert, leidet sehr darunter.

Was das Dokument angeht, hab ich aber den Eindruck, dass noch nichtmal 
versucht wurde, eine eingehende und konsistente Code-Formatierung zu 
erreichen, includive Naming Conventions etc.  Das macht den Code 
schwerer erfassbar, als es sein müsste.  Insbesondere würd ich nicht 
eine hausbackene Formatierung erfinden, sonderen eine etablierte 
Formatierung wählen und die auch durchhalten.

> wenn an zwei Stellen in 800 Seiten das "\" Stand, ist das erträglich,
> nicht?

Siehe oben.  Code für Anfänger muss m.E. extrem gut sein.  Damit meine 
ich nicht trickreich, sondern konsistent, absolut fehlerfrei, gut 
nachvollziehbar, stringent formatiert etc.

Anfänger lesen nämlich nicht über Ungereimtheiten, Schlampereien oder 
Fehler hinweg, sondern lernen sie, oder es behindert sie beim Verstehen; 
oft ohne dass sie die Probleme artikulieren können — einfach weil sie 
sich noch nicht damit auskennen.

Dem Dokument hätte es definitiv nicht geschadet, wenn ein 
Besserwisser[tm] im Kurs gewesen wäre :-)

von Christof E. (Gast)


Lesenswert?

Danke
verstehe
Die meisten Sachen habe ich schon korrigiert auf meiner page
Meist flüchtigkeistartefakte.
Kann den Downloadlink hier nicht ändern. Aber auf meiner Seite ist das 
jetzt bereinigt
Das Skript habe ich zuletzt Feburar erweitert. Dann kam Corona.

Das einige #include <avr/sfr_defs.h>   zuviel solche Aufregung machen, 
hätte ich nicht geahnt.
Na gut. Ich selbst öffne diese immer wieder mal zum nachsehen.

Überflüssige Formate
Es gibt einen Trick,. Text Kopieren,  in Notepade pasten, kopieren. und 
zurück.
und schon hat man alle Fomatierungen los.
Dann kann man sich das nochmals ansehen
Das Beamerformat lässt leider nur wenige Zeilen/Seite zu und dies dann 
noch mindesten .28 gross sonst wird es zu klein für die hinteren Reihen.

Was meine Augen mit 60 dazu mein ist klar.
Den Text habe ich meist spät abends zusammengesucht.
Irgendwann,
Immer wieder.
daher wohl das unterschiedliche Aussehen.
Und viel Arbeit habe ich so auch tagsüber.

Ok. Da muss dann halt nochmals der Formatputz drüber.
Es war einfach immer ein Arbeits-Merkzettel. Kein redigiertes Buch
Aber ich habe von Leuten die damit gearbeitet haben immer wieder 
Erfolgsmeldungen bekommen.  ADC- Servo- Sensoren Shiftbausteine etc.. 
CLK, DATA, ENABLE , LCD..  Stepmotor. und das ohne externe, nicht 
einsehbare Bibliotheken.--  Mehr kann man in 8..10 Tagen gar nicht 
erreichen.
Und leider wird es Zeit für Weitergabe.   Das war mein Intention
Übrgens  Stefan Frings Seite ist einfach klasse,. !!
Da komme ich mit meinem Kompozer HTML nicht hin..
Aber dazu habe ich auch nicht die Zeit..
Mit 60 überlegt man sich , was man nicht mehr tut.
Dennoch habe ich mir den Spass erhalten.
Baue gerad eine Kurzwellen MorseSender mit Dekodierung auf Raspie mit 
einem AVR als Arbeitsknecht...
Darum geht es.  Spass zu haben ,was man tut

von ohne Account (Gast)


Lesenswert?

Christof E. schrieb:
> Stimmt.! vieles, dort und da, was so nicht sein sollte. Oder sogar
> verwirrt.
> Ich schrieb auch. "Dort und da "Fehlerhaft ,aber brauchbar."
> Es ist ein Powerpoint Vortrag und eine Erklär-Arbeitsgrundlage, und
> werden normalerweis im Kurs alles erklärt, wie es gemeint ist.
> Habe aber keinen Lektor. Wenn ich Fehler finde, beseitige ich dies auch
> sobald wie mögl.
> Es ist eine Anleitung, mit Registern statt mit Bibliotheken, deren
> Arbeitsweise man nicht kennt, umgehen zu lernen. Mit Verwendung von
> ANSI-C und nicht C++. Was unnötig sperrig ist für das kleine
> Controllerchen.
> Das tut es. Und darum geht es..

erst einmal vielen Dank für das Skript - ich finde es gut :-)
Was jetzt die Kritik anbelangt ... die kann man in einem update 
aufgreifen - aber ansonsten ist Kritik nicht berechtigt.
Leute, das Skript ist zum kostenfreien Download - wer unbedingt meint es 
müsse der heilige Gral sein, der kann sich ja gern so für 80 Euronen im 
Handel eindecken ... wäre mir zu teuer :-)

von Stefan F. (Gast)


Lesenswert?

Christof E. schrieb:
> Übrigens  Stefan Frings Seite ist einfach klasse,. !!
> Da komme ich mit meinem Kompozer HTML nicht hin..

Danke für das Lob. Meine Seite ist allerdings komplett hand-gedengelt, 
mit Notepad. Alte Gewohnheit.

Johann L. schrieb:
> Soweit is sehe verwendest du auch Features, die nicht ANSI-C sind wie
> Interrupts, Inline Assembly und util/delay.h, avr/eeprom.h etc.

Bei Mikrocontrollern kommt man wohl kaum umhin, Dinge zu benutzen, die 
"nicht ANSI-C sind".

von Christof E. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Christof E. schrieb:
>> Übrigens  Stefan Frings Seite ist einfach klasse,. !!
>> Da komme ich mit meinem Kompozer HTML nicht hin..
>
> Danke für das Lob. Meine Seite ist allerdings komplett hand-gedengelt,
> mit Notepad. Alte Gewohnheit.
>
> Johann L. schrieb:
>> Soweit is sehe verwendest du auch Features, die nicht ANSI-C sind wie
>> Interrupts, Inline Assembly und util/delay.h, avr/eeprom.h etc.
>
> Bei Mikrocontrollern kommt man wohl kaum umhin, Dinge zu benutzen, die
> "nicht ANSI-C sind".

Ich bin beeindruckt. Solche Leute machen Freude

von Armin K. (-donald-) Benutzerseite


Lesenswert?

Christof E. schrieb:
> Es gibt einen Trick,. Text Kopieren,  in Notepad pasten, kopieren. und
> zurück. und schon hat man alle Fomatierungen los.

Für sowas nutze ich "PureText" von Steve Miller.
Unverzichtbar auf Windows. In meinen Augen.

Beitrag #6413394 wurde von einem Moderator gelöscht.
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Christof E. schrieb:
> PRINZIP:
> #define KEY_INT_EVENT 0x01
> ISR( INT0.....
> {
> gu8KeyFlags |= KEY_INT_EVENT;
> // dann Stop INT0_Interrupt  usw...
> }
>
> // irgendwo z.B. Mainloop
> if(gu8KeyFlags & KEY_INT_EVENT)
> {
> gu8KeyFlags &= ~KEY_INT_EVENT; // clear flag
> ....Polling , was immmer passiert
> }
> Ich wollte damit vor allem die "Möglichkeit" der Ablaufsteuerung mit
> Flags zeigen.

Es stellt sich aber die Frage, wozu?  Im Endeffekt ist es das gleiche, 
wie in der main direkt auf's INT0-Flag zu pollen — es sein denn, in main 
vergeht eine Mindestzeit in der Größenordnung von 10ms zwischen den 
Abfragen des Flags.  Dies wiederum kann geschehen durch Delay 
(abzulehnen), oder indem eine Timer-ISR alle 10ms ein Flags setzt, das 
in main abgeholt wird um zu testen, ob ein KEY_INT_EVENT auszuwerten 
ist.

Entprellung geschieht am einfachsten, indem man in einer Timer-ISR alle 
10ms den Status der Taster abfragt.  Weiterer Vorteil ist, dass man 
nicht einen dedizierten Port wie INT0 braucht, sondern den Port frei 
wählen kann.  Insbesondere wichtig, wenn man mehrere Taster hat oder 
INTx für was anderes wirklich braucht.

Und in vielen Anwendungen hat man eh ne periodische Timer-ISR, z.B. für 
LED-Blink, (Trigger von) Morse-Ausgabe o.ä., etc.  Falls die 
entsprechende IRQ öfter triggert als alle 10ms (wahrscheinlich), dann 
macht man die 10ms per Software in dieser ISR.

Außerdem gibt's nen Glitch im Code da nicht atomar:
1
    gu8KeyFlags &= ~KEY_INT_EVENT; // clear flag
Falls gu8KeyFlags noch andere Flags beherbergt, was der Name nahelegt, 
dann funktioniert er sporadisch nicht wie angedacht. Testfall:
1
#include <stdint.h>
2
3
#define KEY_INT_EVENT (1 << 0)
4
5
volatile uint8_t gu8KeyFlags;
6
7
void foo (void)
8
{
9
    gu8KeyFlags &= ~KEY_INT_EVENT;
10
}
Assembly von avr-gcc:
1
foo:
2
  lds r24,gu8KeyFlags
3
  andi r24,lo8(-2)
4
  sts gu8KeyFlags,r24
5
  ret
Falls zwischen LDS und STS eine ISR ein anderes Flag verändert (z.B. für 
einen anderen Taster), dann wird dies vom STS überschrieben.

> Inhaltsverzeichnis... schwierig.

Bei ca. 800 Seiten aber unabdingbar.  Und es hilft Dir selbst dabei, 
alles zu organisieren und den Überblick zu bewahren.

> Tatsächlich springe ich die Themen je nach Kursablauf an.

Offenbar.  Aber was macht ein Leser, der das Dokument wie von Dir 
angedacht zum Selbststudium verwendt?

> Zwischensemster ganztags Kursdauer von nur 10 Tagen

Weia.  Da kann man nur hoffen, ihr habt genug Trichter.

von mh (Gast)


Lesenswert?

Johann L. schrieb:
>> Zwischensemster ganztags Kursdauer von nur 10 Tagen
>
> Weia.  Da kann man nur hoffen, ihr habt genug Trichter.

Und erwartet nicht, dass irgendwer etwas lernt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan ⛄ F. schrieb:
> Bei Mikrocontrollern kommt man wohl kaum umhin, Dinge zu benutzen, die
> "nicht ANSI-C sind".

Korrekt, aber dann sollte man halt auch nicht "ANSI C" drüber schreiben 
- zumal der C-Standard seit ANSI C89 (so wäre die korrekte Bezeichnung) 
inzwischen bereits weitere Versionen kennt, und die  Standardisierung an 
die ISO übergegangen ist. C99 brachte uns insbesondere <stdint.h> und 
damit die genannten Ganzzahlen mit wohldefinierten Größen (uint8_t 
etc.), die gerade im Controller-Umfeld massiv Einzug gehalten haben. Die 
Ergänzungen von C11 und C17 haben dagegen noch nicht ganz die 
Verbreitung gefunden.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Seite 656 aus dem externen Link - zufällig mal hingeblättert:
1
// **********************
2
uint8_t PseudoRandom(void) 
3
// **********************
4
{
5
static uint8_t s=0xaa,a=0;
6
s^=s<<3;  //XOR
7
s^=s>>5;
8
s^=a++>>2;
9
};
10
Zufallsfund:
11
Auf der suche nach einer Speicherschonenden 
12
Zufallszahlengenerierung
13
(was die Leute sich so ausdenken)

Die Funktion PseudoRandom() ist definiert mit einem Rückgabewert vom Typ 
uint8_t, liefert aber gar nichts zurück.

Ich muss mich meinen Vorrednern anschließen: Gerade Anfängern sollte man 
Code präsentieren, der selbst auch getestet und auf Richtigkeit 
überprüft wurde. Solche Stolperfallen wie falsche Gänse, Slashes und 
fehlende Rückgabewerte schrecken gerade Anfänger ab, wenn sie am Code 
verzweifeln, weil sie ihn gar nicht durch den Compiler bekommen.

Die armen Anfänger wissen in solch einer Situation überhaupt nicht, wie 
sie den Fehler beheben können und werden dann einfach das Handtuch 
werfen. Und wieder einer weniger...

Dieses Dokument ist in dieser Form kontraproduktiv und bedarf ganz klar 
einer strikten Überarbeitung, sorry.

: Bearbeitet durch Moderator
Beitrag #6413503 wurde von einem Moderator gelöscht.
Beitrag #6413551 wurde von einem Moderator gelöscht.
von Christof E. (Gast)


Lesenswert?

Frank M. schrieb:
> Seite 656 aus dem externen Link - zufällig mal hingeblättert:
>
1
> // **********************
2
> uint8_t PseudoRandom(void)
3
> // **********************
4
> {
5
> static uint8_t s=0xaa,a=0;
6
> s^=s<<3;  //XOR
7
> s^=s>>5;
8
> s^=a++>>2;
9
> };
10
> Zufallsfund:
11
> Auf der suche nach einer Speicherschonenden
12
> Zufallszahlengenerierung
13
> (was die Leute sich so ausdenken)
14
>
>
> Die Funktion PseudoRandom() ist definiert mit einem Rückgabewert vom Typ
> uint8_t, liefert aber gar nichts zurück.
>
> Ich muss mich meinen Vorrednern anschließen: Gerade Anfängern sollte man
> Code präsentieren, der selbst auch getestet und auf Richtigkeit
> überprüft wurde. Solche Stolperfallen wie falsche Gänse, Slashes und
> fehlende Rückgabewerte schrecken gerade Anfänger ab, wenn sie am Code
> verzweifeln, weil sie ihn gar nicht durch den Compiler bekommen.
>
> Die armen Anfänger wissen in solch einer Situation überhaupt nicht, wie
> sie den Fehler beheben können und werden dann einfach das Handtuch
> werfen. Und wieder einer weniger...
>
> Dieses Dokument ist in dieser Form kontraproduktiv und bedarf ganz klar
> einer strikten Überarbeitung, sorry.

Ja, das return hat das kopieren nicht überlebt.
Aber daher die Ruprik  Fundus. auf das fehlene return kommt man ja 
noch..
Dennoch, haben Sie recht. Typische Flüchtigkeitsfehler, die man selber 
nicht sofort sieht., Evtl war schon ein Troliinger eingeschraubt um 
23:00, was so meine bevorzugte Zeit ist für Codestöbereienen..
Ist schon gelöscht..

Kann mich aber erinnern, dass ich das ausprobiert hatte.
Ging hervorragend, Grafische Verteilungsprüfung war bestens.
Manchmal ist sowas hilfreich.
Kleiner Tipp
IN YT gibt es eine Prof WEIZ
https://www.youtube.com/channel/UCjTfChr0yyz4iZq0x12Q6xA
mit hervorragenden Mathe Videos. Da habe ich das mit der 
Zufallsverteilung her. Sie glauben nicht was da alles für Misst 
existiert.
Doch. Sie glauben es

von Stefan F. (Gast)


Lesenswert?

Jörg W. schrieb:
> C99 brachte uns insbesondere <stdint.h>

Ich glaube, die Binärzahlen (literale) gehören inzwischen auch zum 
Standard.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan ⛄ F. schrieb:
> Ich glaube, die Binärzahlen (literale) gehören inzwischen auch zum
> Standard.

Nur in C++.

In C habe ich das gerade an die WG14 eingereicht … ich gehe mal davon 
aus, dass es (anders als 1999) durchgehen wird, insbesondere da C++ es 
bereits standardisiert hat.

von Stefan F. (Gast)


Lesenswert?

Jörg W. schrieb:
>> Ich glaube, die Binärzahlen (literale) gehören inzwischen auch zum
>> Standard.
> Nur in C++.

Echt? Das ist ja seltsam, wie unlogisch!

von eh auch ein Gast (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ich glaube, die Binärzahlen (literale) gehören inzwischen auch zum
> Standard.

Ich bin mir nicht sicher, ob das nicht nur eine GCC-Erweiterung ist, 
oder ob das wirklich alle Compiler unterstützen? In C++14 dürfte es 
standardisiert sein, aber in C eher nicht.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Christof E. schrieb:
> Ging hervorragend, Grafische Verteilungsprüfung war bestens.

Naja, "geht so", würde ich mal sagen.

Bringt es ungefähr auf die gleiche Qualität, wie wenn ich die 
stdlib-Funktion random() auf 8 Bits einkürze.

Wenn man aber ein LFSR (gängige Praxis für eine Pseudo-Random-Zahl) mit 
8 Bits aufbaut, wird es sauberer.

Die Funktion lsfr1() habe ich mir aus dem englischen Wikipediaartikel:

https://en.wikipedia.org/wiki/Linear-feedback_shift_register

mal schnell zusammengeschustert:
1
uint8_t lfsr1(void)
2
{
3
    static uint16_t lfsr = 0xe1;
4
    uint8_t bit;
5
    unsigned period = 0;
6
7
    /* taps: 8 6 5 4; feedback polynomial: x^8 + x^6 + x^5 + x^4 + 1 */
8
    bit = ((lfsr >> 0) ^ (lfsr >> 2) ^ (lfsr >> 3) ^ (lfsr >> 4)) /* & 1u */;
9
    lfsr = (lfsr >> 1) | (bit << 15);
10
11
    return lfsr;
12
}

Anbei die Histogramme für PseudoRandom(), (int)random & 255 und lsfr1(), 
jeweils für 20000 Durchläufe. Ich denke, man kann die Unterschiede 
sehen. ;-)

(Hatte mich jetzt mal persönlich interessiert, wie gut sowas jeweils 
ist.)

: Bearbeitet durch Moderator
Beitrag #6413598 wurde von einem Moderator gelöscht.
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Seite 473 ff:
1
//MAKROS
2
#define INIT_74165PORTDIR() (INSHIFT_74165_DDRX = INSHIFT_74165_DDRX_VALUES);
3
#define SET_74165_CLK() (INSHIFT_74165_PORT |= INSHIFT_74165_CLK_BIT);
4
#define CLR_74165_CLK() (INSHIFT_74165_PORT &= ~INSHIFT_74165_CLK_BIT);
5
#define SET_74165_SHLD() (INSHIFT_74165_PORT |= INSHIFT_74165_SHLD);
6
#define CLR_74165_SHLD() (INSHIFT_74165_PORT &= ~INSHIFT_74165_SHLD);
Man beachte die Semikolons am Ende.

Anwendung auf Seit 474:
1
CLR_74165_CLK();   <--- mit Semikolon
2
CLR_74165_SHLD()   <--- ohne Semikolon
3
_delay_us(1);
4
SET_74165_SHLD();  <--- mit Semikolon

Hier ist die unheitliche Anwendung von Makros zu bemerken: Mal mit, mal 
ohne Semikolons. Ein Anfänger fragt sich: "Warum?!?".

Ich sage da nur: Uff, nochmal gutgegangen, denn fatal wäre folgende 
Anwendung:
1
if (flag)
2
  CLR_74165_CLK();
3
else
4
  mach_was_anderes();

Da wundert sich dann der mutmaßliche Anfänger, warum der C-Compiler ihm 
diese absolut unverständliche Fehlermeldung
1
error: ‘else’ without a previous ‘if’
um die Ohren knallt. (Hint: doppeltes Semikolon)

@christof: Semikolons in C-Makros sind absolut zu vermeiden. Wenn, dann 
gehören sie ausschließlich in den Programmcode.

: Bearbeitet durch Moderator
von Cyblord -. (cyblord)


Lesenswert?

Jörg W. schrieb:
> In C habe ich das gerade an die WG14 eingereicht … ich gehe mal davon
> aus, dass es (anders als 1999) durchgehen wird, insbesondere da C++ es
> bereits standardisiert hat.

Gab es 1999 eine Begründung warum es nicht eingeführt wurde?

Beitrag #6413607 wurde vom Autor gelöscht.
von Joachim B. (jar)


Lesenswert?

Christof E. schrieb:
> uint8_t u8NN = 0;
>  if( u8NN < -2 )
> ....kann so nicht stimmen weil "u8NN"--> unsigned 8 Bit namens NN heißt,

aber NN ist eine Variable und die sollten doch Kleinbuchstaben bekommen?
Mir war mal so als wenn Großbuchstaben den #define vorbehalten sind.

Ich nenne also meine Variablen
uint8_nn um beim Beispiel zu bleiben.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Cyblord -. schrieb:
> Gab es 1999 eine Begründung warum es nicht eingeführt wurde?

Steht im C99 Rationale:

"A proposal to add binary constants was rejected due to lack of 
precedent and insufficient utility."

;-)

Beitrag #6413615 wurde von einem Moderator gelöscht.
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Joachim B. schrieb:
> aber NN ist eine Variable und die sollten doch Kleinbuchstaben bekommen?
> Mir war mal so als wenn Großbuchstaben den #define vorbehalten sind.

Reine Konvention. (BTW an die ich mich auch halte).

Er meinte den Vergleich einer vorzeichenlosen Variablen mit einem 
negativen Wert, lies nochmal.

von Christof E. (Gast)


Lesenswert?

Jörg W. schrieb:
> Christof E. schrieb:> Die Funktion lsfr1() habe ich mir aus 
dem englischen Wikipediaartikel:
> https://en.wikipedia.org/wiki/Linear-feedback_shift_register

> mal schnell zusammengeschustert:
>
1
> uint8_t lfsr1(void)
2
> {
3
>     static uint16_t lfsr = 0xe1;
4
>     uint8_t bit;
5
>     unsigned period = 0;
6
> 
7
>     /* taps: 8 6 5 4; feedback polynomial: x^8 + x^6 + x^5 + x^4 + 1 */
8
>     bit = ((lfsr >> 0) ^ (lfsr >> 2) ^ (lfsr >> 3) ^ (lfsr >> 4)) /* & 
9
> 1u */;
10
>     lfsr = (lfsr >> 1) | (bit << 15);
11
> 
12
>     return lfsr;
13
> }
14
>
>
> Anbei die Histogramme für PseudoRandom(), (int)random & 255 und lsfr1(),
> jeweils für 20000 Durchläufe. Ich denke, man kann die Unterschiede
> sehen. ;-)
>
> (Hatte mich jetzt mal persönlich interessiert, wie gut sowas jeweils
> ist.)


Ohh gefällt mir sehr

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Christof E. schrieb:
>>     unsigned period = 0;

> Ohh gefällt mir sehr

Sorry, das "unsigned period" ist noch ein copy&paste-Überbleibsel aus 
dem Wikipedia (dort haben sie ja die Periode ermittelt), das kann weg.

von Joachim B. (jar)


Lesenswert?

Frank M. schrieb:
> Reine Konvention. (BTW an die ich mich auch halte).

prima, sind wir mindestens schon mal 2

Frank M. schrieb:
> Er meinte den Vergleich einer vorzeichenlosen Variablen mit einem
> negativen Wert, lies nochmal.

hatte ich verstanden war aber nicht mein Kontext dazu und trotzdem sieht 
man den Fehler sofort!

auch ein uint8_nn kann nicht negativ werden ;) genau wie ein u8NN nur 
ist u8NN unübersichtlicher im Gegensatz zu uint8_nn

von mh (Gast)


Lesenswert?

Jörg W. schrieb im Beitrag #6413607:
> Christof E. schrieb:
>
>> Löschen Sie diesen Thread und vor allen den Kopierlink zur PDF
>> Das ist ein Aufforderung zur Löschung des Threads.
>
> Dafür gibt es keinen Grund.

Vor allem, da die pdf unter CC BY-NC-SA 3.0 AT steht.

Jörg W. schrieb:
> "A proposal to add binary constants was rejected due to lack of
> precedent and insufficient utility."

Weißt du was mit precedent gemeint ist? Gab es zu dem Zeitpunkt keine 
Sprache, die binary constants hatte, oder gabes noch keine c-Compiler, 
die eine derartige Erweiterung hatten?

von Cyblord -. (cyblord)


Lesenswert?

Jörg W. schrieb:
> "A proposal to add binary constants was rejected due to lack of
> precedent and insufficient utility."

Ich kann mich täuschen, aber heißt das auf Deutsch übersetzt nicht so 
viel "F...ck dich und deinen Vorschlag"? ;-)

Beitrag #6413637 wurde von einem Moderator gelöscht.
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

mh schrieb:
>> "A proposal to add binary constants was rejected due to lack of
>> precedent and insufficient utility."
>
> Weißt du was mit precedent gemeint ist? Gab es zu dem Zeitpunkt keine
> Sprache, die binary constants hatte, oder gabes noch keine c-Compiler,
> die eine derartige Erweiterung hatten?

Ich vermute mal, das Standardkommittee kannte keinen C-Compiler, der 
sowas damals implementiert hatte (obwohl es davon bestimmt schon welche 
gab).

von Christof E. (Gast)


Lesenswert?

korrekt

Die Var heißt u8NN
Also ein Zähler mit unsigned 8 Bit Länge.
Ich schreibe Variablen mit Typzeichen aus Kleinbuchstaben und dann Jede
Silbe mit Großbuchstaben
Asunahme. außer einem banalen Zähler u8YY ist OK, da man zumindest den 
Typ sieht, was ja mit Kleinbuchstaben davor steht,  daher u8NN;

Nur die beliebten "Ein-Buchstaben variablen wie in Lehrbüchern
for( i = ....
das gibt es bei mir nicht,

So sieht man immer!!, mit was man arbeitet.

#define ICH_BIN_EIN_DEFINE    123UL

int32_t * pi32DiesIsteinPointerauf32Bit= NULL;

Das mag alt sein
Ich auch
Ich mache das seit den frühen 90erm,
und ich liebe es.
hier ein Beispiel aus den frühen 2000enern
https://homepages.uni-regensburg.de/~erc24492/GPS_Secrets/GPS_Secrets.html

Beitrag #6413654 wurde von einem Moderator gelöscht.
Beitrag #6413658 wurde von einem Moderator gelöscht.
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Christof E. schrieb:
> So sieht man immer!!, mit was man arbeitet.

Den Typ der Variablen (bzw. die Definition selbst) zeigt so gut wie jede 
IDE an, wenn man mit der Maus drüber fährt.

Statt solche unwichtigen Äußerlichkeiten für wichtig zu halten, solltest 
Du besser an den Inhalten feilen, zum Beispiel 
Beitrag "Re: Mikrokontroller Crash Kurs mit ANSI-C, mit ATMega Register Nutzung" , wo es um die 
falsche Verwendung von Semikolons in Makros geht.

Ich hatte mir zunächst eigentlich nur die Bilder angeschaut, an 
lediglich zwei Stellen bin ich beim Überfliegen am C-Code 
hängengeblieben und bin direkt in zwei Fettnäpfchen gestolpert.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Christof E. schrieb:
> Das mag alt sein

Ungarische Notation ist nicht nur alt, sondern war immer ziemlich 
umstritten. Siehe Wikipedia-Artikel darüber. Selbst Microsoft (die es 
lange eifrig verfochten haben) mag das inzwischen nicht mehr …

Als persönliche Vorliebe mag das OK sein, als generelle Empfehlung eher 
nicht.

Einbuchstabige Variablen können gut und gern die Lesbarkeit 
vereinfachen, insbesondere, wenn man C99-mäßig in einer for-Schleife den 
Scope auf die Schleife limitiert:
1
  for (int i = 0; i < limit; i++)
2
     dosomething(i);

Vergleiche das mit
1
  for (int Schleifenzaehler = 0; Schleifenzaehler < limit; Schleifenzaehler++)
2
    dosomething(Schleifenzaehler);

oder
1
  for (int iSchleifenzaehler = 0; iSchleifenzaehler < iLimit; iSchleifenzaehler++)
2
    vDosomething(iSchleifenzaehler);

Was lässt sich schneller erfassen? ;-)

von Cyblord -. (cyblord)


Lesenswert?

Jörg W. schrieb:
> Was lässt sich schneller erfassen? ;-)

Eben.

Dazu kommt:
Ungarische Notation koppelt den Namen an den Typ. Ändert man den Typ, 
MUSS man auch den Namen ändern -> Redundant.

Dann hat man in C ja oftmals Präfixe wegen fehlendem Namespace. Am Ende 
hat man 90% Präfix und 10% Variablenname.
1
 for (int iSchleifenzaehler = 0; iSchleifenzaehler < iMotorDriver_Limit; iSchleifenzaehler++)
2
    vMotorDriver_Dosomething(iSchleifenzaehler);

: Bearbeitet durch User
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Cyblord -. schrieb:
> for (int iSchleifenzaehler = 0; iSchleifenzaehler < iMotorDriver_Limit;
> iSchleifenzaehler++)

Ineinander verschachtelte Schleifen mit iGanzAeussererSchleifenzaehler, 
iAeussererSchleifenzaehler, iInnererSchleifenzaehler und 
iGanzInnererSchleifenzaehler werden dann besonders spaßig.

: Bearbeitet durch Moderator
von Stefan F. (Gast)


Lesenswert?

mh schrieb:
> Weißt du was mit precedent gemeint ist? Gab es zu dem Zeitpunkt keine
> Sprache, die binary constants hatte, oder gabes noch keine c-Compiler,
> die eine derartige Erweiterung hatten?

Gute Frage. Borland Pascal hatte damals schon binäre Zahlen und der GCC 
auch.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan ⛄ F. schrieb:
> und der GCC auch

Nein, ganz gewiss nicht. Das darf ich ausnahmsweise mal besser wissen. 
:-))

(Wenn du ins ChangeLog guckst, weißt du, warum. ;-)

: Bearbeitet durch Moderator
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Christof E. schrieb:
> Frank M. schrieb:
>> Seite 656 aus dem externen Link - zufällig mal hingeblättert:
>>
1
>> // **********************
2
>> uint8_t PseudoRandom(void)
3
>> // **********************
4
>> {
5
>> static uint8_t s=0xaa,a=0;
6
>> s^=s<<3;  //XOR
7
>> s^=s>>5;
8
>> s^=a++>>2;
9
>> };
10
>> Zufallsfund: Auf der suche nach einer Speicherschonenden
11
>> Zufallszahlengenerierung (was die Leute sich so ausdenken)
12
>>
>>
>> Die Funktion PseudoRandom() ist definiert mit einem Rückgabewert vom
>> Typ uint8_t, liefert aber gar nichts zurück.
>>
>
> Ja, das return hat das kopieren nicht überlebt.
> [Snip Rechtfertigung, Weinchen nach 23:00 etc.]
>
> Kann mich aber erinnern, dass ich das ausprobiert hatte.
> Ging hervorragend,

Ein Paradebeispiel dafür, dass Code, der ganz klar falsch ist, zu 
"richtigem" (das, was der Autor erwartet) Assembly übersetzt werden 
/kann/:

Es ist nicht unwahrscheinlich, dass der Compiler R24 für s reserviert, 
und dann ist der erzeugte Code so wie erwartet, denn R24 ist laut ABI 
auch das return-Register für uint8_t.

Aber: Wenn das in anderem Kontext verwendet wird, zum Beispiel mit einer 
neueren Compilerversion, die besser optimiert und den Code inlinet, dann 
steht s womöglich nicht mehr in R24.

Und Du merkst den Unterschied noch nicht mal, weil der Wert ja 
"zufällig" sein soll.  Es gibt genügend andere Register, deren Wert sich 
auch "zufällig" (auf für den Anwender nicht unmittelbar nachvollziehbare 
Weise) ändert.

Kommentar zum Generator selbst verkneif ich mir.

Und mit genug Alk sieht sogar ne Konstante zufällig aus...

SCNR

Beitrag #6413696 wurde von einem Moderator gelöscht.
von Christof E. (Gast)


Lesenswert?

> #define SET_74165_CLK() (INSHIFT_74165_PORT |= INSHIFT_74165_CLK_BIT);
> #define CLR_74165_CLK() (INSHIFT_74165_PORT &= ~INSHIFT_74165_CLK_BIT);
> #define SET_74165_SHLD() (INSHIFT_74165_PORT |= INSHIFT_74165_SHLD);
> #define CLR_74165_SHLD() (INSHIFT_74165_PORT &= ~INSHIFT_74165_SHLD);
>


Ja das ist Blödsinn.
Semikolon hat da nix verloren.
Kein Ahnung wie das da reingefunden hat.
Schon korriegiert
Unglaublich was man alles nicht sieht. Ein strengerer Compiler ist da 
doch hilfreich

Beitrag #6413702 wurde von einem Moderator gelöscht.
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Christof E. schrieb:
> Ein strengerer Compiler ist da doch hilfreich

Da hilft kaum ein Compiler.

Makros sind halt reine Textersetzungen, daher darf man auf der rechten 
Seite hinschreiben, was man will. Auch völliger Blödsinn kann dort 
stehen, solange der Makro halt nie benutzt wird.
1
#define FOO das ist bullshit hier!
2
#include <stdio.h>
3
4
int main(void)
5
{
6
        printf("Hello world!\n");
7
        return 0;
8
}

Das compiliert völlig ohne Warnungen.

Da doppelte Semikola auch nirgends angemahnt werden, merkt man solche 
Fehler halt sehr spät. Sowas muss man wirklich bereits bei der Eingabe 
sehen lernen.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> In C habe ich das gerade an die WG14 eingereicht

Du verbringst Deine Zeit mit dem Kampf gegen — Windmühlen?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Johann L. schrieb:
> Jörg W. schrieb:
>> In C habe ich das gerade an die WG14 eingereicht
>
> Du verbringst Deine Zeit mit dem Kampf gegen — Windmühlen?

Vielleicht ja nicht, mal sehen. :-)

Beitrag #6413717 wurde von einem Moderator gelöscht.
Beitrag #6413721 wurde von einem Moderator gelöscht.
von Egon D. (Gast)


Lesenswert?

Jörg W. schrieb:

> insbesondere, wenn man C99-mäßig in einer
> for-Schleife den Scope auf die Schleife limitiert:
>   for (int i = 0; i < limit; i++)
>      dosomething(i);

Nur nebenbei interessehalber: Gibt es einen GUTEN
Grund, dies so zu tun?

Dank im Voraus.

von Oliver S. (oliverso)


Lesenswert?

Gegenfrage: gibt es auch nur einen guten Grund, es nicht so zu tun?

Oliver

von Cyblord -. (cyblord)


Lesenswert?

Egon D. schrieb:
> Jörg W. schrieb:
>
>> insbesondere, wenn man C99-mäßig in einer
>> for-Schleife den Scope auf die Schleife limitiert:
>>   for (int i = 0; i < limit; i++)
>>      dosomething(i);
>
> Nur nebenbei interessehalber: Gibt es einen *GUTEN*
> Grund, dies so zu tun?
>
> Dank im Voraus.

Je begrenzter der Scope der Variablen, desto besser kann optimiert 
werden. Auch wird der Code übersichtlicher, weil klar ist, die Variable 
hat nur in der Schleife Gültigkeit und sonst NIRGENDS.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Cyblord -. schrieb:
> Auch wird der Code übersichtlicher, weil klar ist, die Variable hat nur
> in der Schleife Gültigkeit und sonst NIRGENDS.

Der Schuss kann auch nach hinten losgehen - durch unbeabsichtigtes 
Shadowing:
1
#include <stdio.h>
2
3
int main ()
4
{
5
    int i = 42;
6
7
    for (int i = 0; i < 3; i++)
8
    {
9
        printf ("%d\n", i);
10
    }
11
12
    printf ("%d\n", i);
13
    return 0;
14
}
1
cc -Wall -Wextra a.c && ./a.out
2
0
3
1
4
2
5
42

(Manchmal kommt es vor, dass man den Wert der Schleifenvariablen nach 
der Schleife braucht. Wenn man da immer reflexartig mit loop-internen 
Laufvariablen arbeitet, kann man das schon mal übersehen und wundert 
sich dann, warum i nach der Schleife einen ganz anderen Wert hat)

: Bearbeitet durch Moderator
von Egon D. (Gast)


Lesenswert?

Oliver S. schrieb:

> Gegenfrage: gibt es auch nur einen guten Grund,
> es nicht so zu tun?

Ja.

von Oliver S. (oliverso)


Lesenswert?

Nein. Keinen einzigen, bis auf den genannte Fall, daß man den Wert des 
Zählers außerhalb der Schleife benötigt.

Oliver

Beitrag #6413739 wurde von einem Moderator gelöscht.
von mh (Gast)


Lesenswert?

Jörg W. schrieb:
> mh schrieb:
>>> "A proposal to add binary constants was rejected due to lack of
>>> precedent and insufficient utility."
>>
>> Weißt du was mit precedent gemeint ist? Gab es zu dem Zeitpunkt keine
>> Sprache, die binary constants hatte, oder gabes noch keine c-Compiler,
>> die eine derartige Erweiterung hatten?
>
> Ich vermute mal, das Standardkommittee kannte keinen C-Compiler, der
> sowas damals implementiert hatte (obwohl es davon bestimmt schon welche
> gab).

Ich hab endlich die Dokumente auf der open-std Seite gefunden. Danke für 
das Paper! Einfach, klar und direkt (fehlen nur die Referenzen auf 
Rothfüssige Bücher ;-) )
Weißt du zufällig wo man N2562 - N2564 finden kann? Die Links auf
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2567.htm
führen bei mir ins Nichts.

von Egon D. (Gast)


Lesenswert?

Cyblord -. schrieb:

> Je begrenzter der Scope der Variablen, desto besser
> kann optimiert werden.

Okay, danke. Das leuchtet mir ein.


> Auch wird der Code übersichtlicher, weil klar ist,
> die Variable hat nur in der Schleife Gültigkeit
> und sonst NIRGENDS.

Hmm.

von Egon D. (Gast)


Lesenswert?

Oliver S. schrieb:

> Nein. Keinen einzigen, bis auf den genannte Fall,
> daß man den Wert des Zählers außerhalb der Schleife
> benötigt.

Bei allem Respekt: Ich habe ausdrücklich nach einem
GUTEN Grund, es zu TUN gefragt -- und zwar deshalb,
weil ich solchen penetranten Prinzipienreitern wie
Dir signalisieren wollte, dass ich an penetranter
Prinzipienreiterei nicht interessiert bin.

Dir dennoch einen Guten Tag.

von mh (Gast)


Lesenswert?

Frank M. schrieb:
> Der Schuss kann auch nach hinten losgehen - durch unbeabsichtigtes
> Shadowing:

Dagegen gibt es -Wshadow und Verwandschaft.

von Cyblord -. (cyblord)


Lesenswert?

Egon D. schrieb:
> und zwar deshalb,
> weil ich solchen penetranten Prinzipienreitern wie
> Dir signalisieren wollte, dass ich an penetranter
> Prinzipienreiterei nicht interessiert bin.

Dann müsstest du auch Fragen: Welchen GUTEN Grund gibt es nicht einfach 
ALLE Variablen global zu machen?
Die Antwort ist dieselbe.

von Egon D. (Gast)


Lesenswert?

Frank M. schrieb:

> Manchmal kommt es vor, dass man den Wert der
> Schleifenvariablen nach der Schleife braucht.
> Wenn man da immer reflexartig mit loop-internen
> Laufvariablen arbeitet, kann man das schon mal
> übersehen und wundert sich dann, warum i nach
> der Schleife einen ganz anderen Wert hat

Ja, das war der erste Grund meiner Frage.

Der zweite Grund ist: Es widerspricht meiner
Denkweise.

Ich renne ja auch nicht erstmal nach dem Spiralbohrer,
den ich für das Loch brauche, um dann, wenn ich wieder
an der Bohrmaschine stehe, festzustellen, dass mir auch
der Futterschüssel fehlt...

Ich definiere VORHER die Menge der Dinge, die ich
brauche (Operanden) und beschreibe anschließend die
Folge der Operationen -- aber ich rühre in der Regel
nicht beides durcheinander. Dafür ist mein Gehirn
nicht geschaffen.

von Egon D. (Gast)


Lesenswert?

Cyblord -. schrieb:

> Egon D. schrieb:
>> und zwar deshalb,
>> weil ich solchen penetranten Prinzipienreitern wie
>> Dir signalisieren wollte, dass ich an penetranter
>> Prinzipienreiterei nicht interessiert bin.
>
> Dann müsstest du auch Fragen: Welchen GUTEN Grund
> gibt es nicht einfach ALLE Variablen global zu machen?

Nein, das muss ich nicht, denn den Grund dafür kenne
ich.


> Die Antwort ist dieselbe.

Nein.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

mh schrieb:
> Weißt du zufällig wo man N2562 - N2564 finden kann?

Die sind zwar offenbar intern bei Koordinator schon mal aufgetaucht 
(sodass er ihnen eine Dokumentennummer erteilt hat), aber danach noch 
nicht zur Veröffentlichung - warum auch immer.

mh schrieb:
> Dagegen gibt es -Wshadow und Verwandschaft.

Nur schade, dass das nicht bei -Wall -Wextra enthalten ist.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Egon D. schrieb:
> Ich definiere VORHER die Menge der Dinge, die ich brauche (Operanden)
> und beschreibe anschließend die Folge der Operationen

Spätestens bei C++ kann das schnell Probleme bereiten - weshalb ja dort 
auch die Möglichkeit, Variablen auch später als nur am Beginn eines 
Blocks zu definieren, zuerst da war. Wenn du nämlich für ein Objekt zum 
Anlegen unbedingt Initialwerte brauchst, die du am Anfang des Blocks 
noch gar nicht hast, dann kannst du das Objekt an dieser Stelle noch 
nicht erstellen.

C99 hat die Möglichkeit, Variablen auch innerhalb des Blocks zu 
definieren, übernommen, und ich finde, das macht den Code 
überschaubarer, da man die Definition der Variablen dann nahe an der 
Verwendung vornehmen kann (jetzt mal unabhängig davon, dass der Scope 
"nach unten offen" ist).

von Cyblord -. (cyblord)


Lesenswert?

Jörg W. schrieb:
> Definition der Variablen dann nahe an der
> Verwendung

Das ist einfach grundsätzlich ein guter Stil.

Einfach mal am Anfang einer Funktion zwanzig Variablen zu definieren ist 
C89 Stil und einfach nicht mehr zeitgemäß. Es bringt auch nichts.

von Veit D. (devil-elec)


Lesenswert?

Hallo Christof,

https://homepages.uni-regensburg.de/~erc24492/C_ProgTests/Bereichs_Ueberlauf.html

Das solltest du ebenfalls unbedingt überarbeiten, wird bestimmt auch in 
deinem .pdf enthalten sein. Das funktioniert alles ohne casten. Wenn man 
mit unsigned Variablen rechnet, kann man keine negativen Werte erhalten.

Sowas hier wird im Arduino Forum jeden Neuling verklickert bis er es 
verstanden hat. :-)  Überlauffehler gibts nicht, solange man die 
Rechnung/den Vergleich nicht verändert.
1
void heartbeat (const byte pin, const unsigned long interval)                     
2
{
3
  static unsigned long lastMillis = 0;
4
  static bool state = LOW;
5
  unsigned long ms = millis();
6
  
7
  if (ms - lastMillis >= interval)
8
  {
9
    lastMillis = ms;
10
    state = !state;
11
    digitalWrite(pin, state);
12
  }
13
}

Viele schreiben es auch so.
1
void heartbeat (const byte pin, const unsigned long interval)                     
2
{
3
  static unsigned long lastMillis = 0;
4
  static bool state = LOW;
5
    
6
  if (millis() - lastMillis >= interval)
7
  {
8
    lastMillis += interval;
9
    state = !state;
10
    digitalWrite(pin, state);
11
  }
12
}

Kannste leicht abändern, wenn du fertige Methoden nicht magst.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> mh schrieb:
>> Dagegen gibt es -Wshadow und Verwandschaft.
>
> Nur schade, dass das nicht bei -Wall -Wextra enthalten ist.

Sehe ich auch so, -Wextra würde sich schon dafür anbieten. Shadowing 
halte ich schon für beachtenswert, denn ich gehe in so einem Fall immer 
von einem Programmierfehler aus.

von mh (Gast)


Lesenswert?

Egon D. schrieb:
> Ich definiere VORHER die Menge der Dinge, die ich
> brauche (Operanden) und beschreibe anschließend die
> Folge der Operationen -- aber ich rühre in der Regel
> nicht beides durcheinander. Dafür ist mein Gehirn
> nicht geschaffen.

Dann hast du alle "Operanden" mit undefiniertem Zustand definiert? Oder 
initialisierst du alles mit 0, auch wenn es keinen logischen Grund für 
diesen Wert gibt?

Jörg W. schrieb:
> mh schrieb:
>> Weißt du zufällig wo man N2562 - N2564 finden kann?
>
> Die sind zwar offenbar intern bei Koordinator schon mal aufgetaucht
> (sodass er ihnen eine Dokumentennummer erteilt hat), aber danach noch
> nicht zur Veröffentlichung - warum auch immer.
Schade, ich würd gerne wissen was sich hinter 2564 versteckt. Mal schaun 
ob ich in nem Monat nochmal nachgucke.

> mh schrieb:
>> Dagegen gibt es -Wshadow und Verwandschaft.
>
> Nur schade, dass das nicht bei -Wall -Wextra enthalten ist.

Jörg W. schrieb:
> mh schrieb:
>> Dagegen gibt es -Wshadow und Verwandschaft.
>
> Nur schade, dass das nicht bei -Wall -Wextra enthalten ist.

Da sind so viele Dinge nicht enthalten die sehr praktisch sind (ich hab 
neben -Wshadow z.B. immer -Wconversion in der langen Liste)

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> da man die Definition der Variablen dann nahe an der Verwendung
> vornehmen kann (jetzt mal unabhängig davon, dass der Scope "nach unten
> offen" ist).

Zu dem Problem "nach unten offen":

Geschweifte Klammern um den Block, innerhalb dessen die Variable leben 
soll, verhindern diesen "Defekt". Dafür braucht man dann noch nichtmals 
mehr C99, das ging schon immer ;-)

Also:
1
    {
2
        int local;
3
        ...
4
    }

Aber ehrlich gesagt: Ich mache das auch nicht. So ein eigener 
Geschweifter-Klammern-Block im losen Raum hängend sieht irgendwie 
komisch aus.

: Bearbeitet durch Moderator
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Frank M. schrieb:
> Aber ehrlich gesagt: Ich mache das auch nicht.

Ich auch nicht.

Historische Anekdote: da habe ich mir vor 30 Jahren mal bei einem 
OS9-Compiler einen Wolf gesucht. Er hat mit der öffnenden geschweiften 
Klammer den stack space für die Variable eingeräumt - ihn aber mit der 
schließenden nicht wieder ausgeräumt. Das schaffte er nur, wenn man es 
wirklich auf Funktionsebene getan hat.

Zuweilen nutze ich solche geschachtelten Blöcke innerhalb der case-Teile 
eines switch: direkt nach dem 'case' darf man keine Variable definieren. 
(Ich glaube aber, das soll sich in C2x ändern. Zumindest deutet 
irgendeiner der Nxxxx-Titel auf sowas hin.)

von Egon D. (Gast)


Lesenswert?

Jörg W. schrieb:

> Egon D. schrieb:
>> Ich definiere VORHER die Menge der Dinge, die ich
>> brauche (Operanden) und beschreibe anschließend
>> die Folge der Operationen
>
> Spätestens bei C++ kann das schnell Probleme bereiten -
> weshalb ja dort auch die Möglichkeit, Variablen auch
> später als nur am Beginn eines Blocks zu definieren,
> zuerst da war. [...]

Okay. Dass ich das Argument nicht im einzelnen nach-
vollziehen kann, könnte daran liegen, dass ich von C++
keine Ahnung habe. :) Ich glaube Dir das einfach.


> C99 hat die Möglichkeit, Variablen auch innerhalb
> des Blocks zu definieren, übernommen,

In Ordnung: Da viele Leute sowohl C++ als auch reines C
verwenden, hat man das Ausdrucksmittel übernommen.
Ist mir zugänglich.


> und ich finde, das macht den Code überschaubarer,

Das sei jedermann zugestanden -- aber das war nicht
der Aspekt, um den es mir ging.
Mir ging es um die Frage: Mache ich als C-Anfänger
(reines C! ohne Plusplus!) etwas nachweislich technisch
Nachteiliges, wenn ich diese Schreibweise nicht
verwende.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Zuweilen nutze ich solche geschachtelten Blöcke innerhalb der case-Teile
> eines switch: direkt nach dem 'case' darf man keine Variable definieren.

Da mache ich die geschweiften Klammern fast ausnahmslos. Aber nicht 
wegen der dann definierbaren Variablen (angenehmer Nebeneffekt), sondern 
weil sich mein Auge sonst gegen den Bruch der Klammern-Tiefe "wehrt". 
Also ein rein optischer Effekt.

Automatismus: "{" rückt um 4 Blanks ein, "}" wieder um 4 Blanks aus. Bei 
switch() ohne geschweifte Klammern nach jedem "case" wird diese 
Hierarchie durchbrochen.

Also:
1
    switch (x)
2
    {
3
        case 1:
4
        {
5
             ...
6
             break;
7
        }
8
        case 2:
9
        {
10
             ...
11
             break;
12
        }
13
    }

Ja, ich weiß: Das sind jede Menge überflüssiger Klammern. Aber da bin 
ich konsequent ;)

: Bearbeitet durch Moderator
von Egon D. (Gast)


Lesenswert?

mh schrieb:

> Egon D. schrieb:
>> Ich definiere VORHER die Menge der Dinge, die ich
>> brauche (Operanden) und beschreibe anschließend die
>> Folge der Operationen -- aber ich rühre in der Regel
>> nicht beides durcheinander. Dafür ist mein Gehirn
>> nicht geschaffen.
>
> Dann hast du alle "Operanden" mit undefiniertem
> Zustand definiert?

Hmm. Meistens. Ja.
Warum fragst Du?


> Oder initialisierst du alles mit 0, auch wenn es keinen
> logischen Grund für diesen Wert gibt?

Nee.
Wenn es einen inhaltlich irgendwie sinnvollen Grundzustand
gibt, initialisiere ich natürlich. Wenn nicht, dann nicht.

Ich achte aber ziemlich streng darauf, dass ich lokalen
Variablen erst beschreibe, ehe ich sie lese. Das ist
einfach alte Gewohnheit vom Z80-Assembler her...

von Cyblord -. (cyblord)


Lesenswert?

Egon D. schrieb:
> Ich achte aber ziemlich streng darauf, dass ich lokalen
> Variablen erst beschreibe, ehe ich sie lese. Das ist
> einfach alte Gewohnheit vom Z80-Assembler her...

Gewohnheit?
Lokale Variablen sind sonst nun mal uninitialisiert und enthalten 
irgendwelchen Müll. Warum sollte man den lesen wollen?

von mh (Gast)


Lesenswert?

Egon D. schrieb:
> Ich achte aber ziemlich streng darauf, dass ich lokalen
> Variablen erst beschreibe, ehe ich sie lese. Das ist
> einfach alte Gewohnheit vom Z80-Assembler her...

Darauf brauchst du nicht mehr achten, wenn du Variablen erst definierst, 
wenn du sie auch richtig initialisieren kannst. Dann kann man nicht mehr 
unbeabsichtigt uninitialisierte Variablen lesen und undefined behavior 
auslösen. Bis vor ein paar Jahren hatte gcc noch einige Probleme damit 
korrekt zu erkennen, ob eine Variable initialisiert ist, bevor auf sie 
zugegriffen wird. Damit wurde die entsprechende Warnung sehr nervig 
(oder noch ist?)

von OT (Gast)


Lesenswert?

Ihr schweift langsam ab...

von Egon D. (Gast)


Lesenswert?

mh schrieb:

> Egon D. schrieb:
>> Ich achte aber ziemlich streng darauf, dass ich lokalen
>> Variablen erst beschreibe, ehe ich sie lese. Das ist
>> einfach alte Gewohnheit vom Z80-Assembler her...
>
> Darauf brauchst du nicht mehr achten, wenn du Variablen
> erst definierst, wenn du sie auch richtig initialisieren
> kannst. Dann kann man nicht mehr unbeabsichtigt
> uninitialisierte Variablen lesen und undefined behavior
> auslösen.

Sicher -- aber da ich ohnehin zwanghaft darauf achte,
bringt mir diese neue Freiheit keinen Vorteil ;)


Ich wollte im übrigen keinen Glaubenskrieg auslösen,
sondern wirklich nur die Hintergründe wissen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

mh schrieb:
> Bis vor ein paar Jahren hatte gcc noch einige Probleme damit korrekt zu
> erkennen, ob eine Variable initialisiert ist, bevor auf sie zugegriffen
> wird. Damit wurde die entsprechende Warnung sehr nervig (oder noch ist?)

Gerade so etwas:
1
#include <stdio.h>
2
3
int f (int x)
4
{
5
    int i;
6
7
    if (x)
8
    {
9
        i = 4;
10
    }
11
12
    printf ("%d\n", x);
13
14
    if (x)
15
    {
16
        printf ("%d\n", i); // i uninitialized?
17
    }
18
19
    return 0;
20
}

hat er früher zu Unrecht angemeckert. Da hat er sich gebessert. Aber 
leider ist gcc in dieser Beziehung auch abgestumpft:
1
#include <stdio.h>
2
3
int f (int x)
4
{
5
    int i;
6
7
    if (x)
8
    {
9
        i = 4;
10
    }
11
12
    printf ("%d\n", x);
13
14
    if (! x)                // changed here!
15
    {
16
        printf ("%d\n", i); // i uninitialized?
17
    }
18
19
    return 0;
20
}

Das meckert gcc nicht mehr an. Okay, ich habs gerade mit gcc 6.3.0 
getestet, weil gerade nichts neueres zur Hand.

Beitrag #6413861 wurde von einem Moderator gelöscht.
Beitrag #6413865 wurde von einem Moderator gelöscht.
Beitrag #6413868 wurde von einem Moderator gelöscht.
Beitrag #6413871 wurde vom Autor gelöscht.
Beitrag #6413875 wurde von einem Moderator gelöscht.
Beitrag #6413876 wurde von einem Moderator gelöscht.
Beitrag #6413879 wurde vom Autor gelöscht.
von mh (Gast)


Lesenswert?

Frank M. schrieb:
> Das meckert gcc nicht mehr an. Okay, ich habs gerade mit gcc 6.3.0
> getestet, weil gerade nichts neueres zur Hand.

Auf https://godbolt.org/ steht dir ne große Auswahl an Versionen zur 
Verfügung.

Beitrag #6413881 wurde von einem Moderator gelöscht.
Beitrag #6413887 wurde vom Autor gelöscht.
Beitrag #6413891 wurde vom Autor gelöscht.
von Thomas W. (Gast)


Lesenswert?

Moin, -

ist jetzt zwar zu spaet, aber ich hatte so schoen angefangen zu 
schreiben:

Ich sehe nicht den Mehrwert (oder Sinnhaftigkeit) dieses PDFs (und auch 
der Kurse):

- Ein Seminar „Messen mit dem Mikrocontroller“ in Physik waere in zwei 
Wochen moeglich (z.B. physikalisches Pendel (mit einem Poti am Pendel), 
TOF-Messung (billige Lichtschranken), Beschleunigung-Bestimmung (man 
merkt auch, Analysis I und Numerik waren nicht umsonst). Der Student 
lernt etwas und versteht vielleicht, wie man physikalische Probleme 
angeht.

- Fuer Mikroelektronik ist der Kurs nichts, der ATMega328P ist zwar 
nett, der Student lernt aber nichts (aktuell ist STM32 mit vernuenftigen 
Debugging, mehr Ompff von Allem). Du willst die Standardprodukte (Keil, 
Atmel Studio, Eclipse) nicht benutzen. OK. Was soll der Student mit 
Deiner Bastelei? Stand der Mikrocontroller-Entwicklung 1995 
kennenlernen?

Ich sehe wirklich nicht den Einsatzbereich dieses Hochschulkurses. Der 
Student lernt nichts was er gebrauchen koennen (ausser ein bisschen 
Arduino spielen). Da erwarte ich von einer Hochschule mehr. Deutlich 
mehr.

>>> Ich hatte gesehen, dass dieser Kurs beendet wird. Das ist gut, denn der 328P 
ist leider etwas alt. <<<

Ich weiterer Punkt ist der sehr entspannte Einsatz von Urheber- und 
Persoenlichkeitsrechte: Alle Photos selber gemacht, oder? Michelle 
Feynman gefragt? Bavaria Atelier GmbH gefragt? Zumindest versucht, die 
Originalquellen Deiner Aussagen zu suchen und zitieren?  Studenten 
muessen eine Erklaerung unterschreiben, welche Teile ihre eigene 
Leistung sind und was zitiert wurde.

Oder die Studenten am Ende gefragt, dass sie zeitlich und raeumlich 
unbegrenzt veroeffentlicht werden sollen? Ohne Moeglichkeit der 
Widerrede?  Finde ich nicht so gut.

Trotz allem,

Gruesse

Th.

Beitrag #6413917 wurde von einem Moderator gelöscht.
Beitrag #6413929 wurde vom Autor gelöscht.
Beitrag #6413936 wurde von einem Moderator gelöscht.
Beitrag #6413946 wurde von einem Moderator gelöscht.
Beitrag #6413972 wurde von einem Moderator gelöscht.
Beitrag #6414007 wurde von einem Moderator gelöscht.
von Apollo M. (Firma: @home) (majortom)


Lesenswert?

Christof E. schrieb:
> #define CLR_74165_SHLD() (INSHIFT_74165_PORT &= ~INSHIFT_74165_SHLD);
>>
>
> Ja das ist Blödsinn.
> Semikolon hat da nix verloren.
> Kein Ahnung wie das da reingefunden hat.
> Schon korriegiert
> Unglaublich was man alles nicht sieht. Ein strengerer Compiler ist da
> doch hilfreich

... die Klammer ist bei so einem Makro auch sinnlos, besser 
do{...}while(0) oder gleich ganz ohne.

: Bearbeitet durch User
Beitrag #6414014 wurde von einem Moderator gelöscht.
von mh (Gast)


Lesenswert?

Apollo M. schrieb:
> ... die Klammer ist bei so einem Makro auch sinnlos, besser
> do{...}while(0) oder gleich ganz ohne.

Das stimmt so nicht. CLR_74165_SHLD wird mit einer expression ersetzt, 
die eine Wert hat. Wenn du das in ein while packst ist es ein statement 
und hat keinen Wert mehr. (wenn man die Probleme mit dem ; ignoriert)

Beitrag #6414025 wurde von einem Moderator gelöscht.
Beitrag #6414036 wurde von einem Moderator gelöscht.
Beitrag #6414039 wurde von einem Moderator gelöscht.
Beitrag #6414041 wurde von einem Moderator gelöscht.
Beitrag #6414049 wurde vom Autor gelöscht.
Beitrag #6414054 wurde von einem Moderator gelöscht.
Beitrag #6414059 wurde von einem Moderator gelöscht.
Beitrag #6414060 wurde von einem Moderator gelöscht.
Beitrag #6414063 wurde von einem Moderator gelöscht.
Beitrag #6414065 wurde von einem Moderator gelöscht.
Beitrag #6414069 wurde von einem Moderator gelöscht.
Beitrag #6414071 wurde von einem Moderator gelöscht.
Beitrag #6414076 wurde von einem Moderator gelöscht.
Beitrag #6414094 wurde von einem Moderator gelöscht.
Beitrag #6414107 wurde vom Autor gelöscht.
Beitrag #6414116 wurde von einem Moderator gelöscht.
Beitrag #6414120 wurde von einem Moderator gelöscht.
Beitrag #6414126 wurde von einem Moderator gelöscht.
Beitrag #6414133 wurde von einem Moderator gelöscht.
Beitrag #6414155 wurde von einem Moderator gelöscht.
Beitrag #6414165 wurde von einem Moderator gelöscht.
Beitrag #6414194 wurde von einem Moderator gelöscht.
Beitrag #6414318 wurde von einem Moderator gelöscht.
Beitrag #6414330 wurde von einem Moderator gelöscht.
Beitrag #6414358 wurde von einem Moderator gelöscht.
Beitrag #6414364 wurde von einem Moderator gelöscht.
Beitrag #6414377 wurde von einem Moderator gelöscht.
Beitrag #6414420 wurde vom Autor gelöscht.
Beitrag #6414437 wurde von einem Moderator gelöscht.
Beitrag #6414438 wurde vom Autor gelöscht.
Beitrag #6414445 wurde von einem Moderator gelöscht.
Beitrag #6414447 wurde von einem Moderator gelöscht.
Beitrag #6414449 wurde vom Autor gelöscht.
Beitrag #6414451 wurde von einem Moderator gelöscht.
Beitrag #6414454 wurde von einem Moderator gelöscht.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.