Hallo,
da ich derzeit doch hobbymässig viel C Code produziere möchte ich mal
fragen wo ich Sammlungen von "Programmiertechniken" finde?
Sowas nützliches wie das hier (Bit Twddling Hacks)
http://graphics.stanford.edu/~seander/bithacks.html#OperationCounting
IM Konkreten Fall geht es darum eine größere Menge voneinander
abhängiger "Aktionen" zeitgesteuert durch eine RTC durchzuführen, wobei
Techniken wie Blockierung von Routinen nach Durchlauf und eine größere
Menge logischer Verknüpfungen auftreten bei denen man wahnsinnig werden
würde, wenn man die in if then else verpacken würde. Zur klass.
Statemachine kommt noch der Zeitfaktor hinzu aber es ist und bleibt
schon eine Finite Statemachine. Nur eben mit Zählern darin.
Aktuell arbeite ich mit einem ganzen Struct an globalen Flags und nahezu
10 Softwaretimern, die von der RTC abgeleitet werden, die mir 1HZ
ausspuckt für den Interrupt, der die Timer hochzählt. Jeder Timer kann
durch ein Bit gestartet, gestoppt und resettet werden durch die
Statemachine. Der Interrupt fegt durch die Routine und führt das dann
aus.
Habt ihr da vielleicht Empfehlungen? Ich meine das wurde ja alles schon
mal gemacht und davon würde ich gern profitieren.
Man kann auch parallele und ineinander geschachtelte Statemaschinen
haben...
Und ich wuerd dann mal eine PC Simulation schreiben, um zu pruefen ob
alle Zustaende, und wie errecht werden koennen.
Das Geniale an Statemaschinen ist das Debuggen. Man weiss wo der Code
garantiert vorbeikommt, und muss sich dort nur die Variablen
rausschreiben lassen. Desgleichen wartet man nur an einem Ort im ganzen
Code. Und dort kann man auch nachsehen, wie kritisch das Timing ist,
wieviel Zeit jeweils uebrig ist.
Noch einer schrieb:> Donald Knuth und Niklaus Wirth
Niklaus Wirth hat nur 2 Bücher herausgebracht, eines über Pascal (was
ich habe) und eines über Datenstrukturen. Knuth, der auch den Turing
Award (Nobelpreis für IT) mal erhielt ist auf einer Ebene unterwegs auf
die ich ihm nicht folgen kann und es ist alles Englisch, was bei
Fachbüchern nicht grad gut zu lesen ist.
Komplexe Statemaschines mit Timern, wie zb das Schalten von Ampeln an
Kreuzungen würde ich auch als Zustände in einer Art Matrix als "array of
struct" (Zustand, Bedingung, Aktion, naechster Zustand) implementieren,
so dass keine endlose Folge von switch case Anweisungen dabei
herauskommt. Es wird nur noch ein Pointer bewegt auf den jeweiligen
Zustand.
Christian J. schrieb:> und es ist alles Englisch, was bei> Fachbüchern nicht grad gut zu lesen ist.
Englische Fachbücher sind im allgemeinen deutlich besser zu lesen als
deutsche. Ganz ohne Grundkenntnisse des Angelsächsischen geht es
natürlich nicht, das ist dann aber kein Problem der Fachbücher.
Oliver
Christian J. schrieb:> Noch einer schrieb:>> Donald Knuth und Niklaus Wirth>> Niklaus Wirth hat nur 2 Bücher herausgebracht, eines über Pascal (was> ich habe) und eines über Datenstrukturen.
Hmm, von den zweien habe ich dann wohl das dritte, den meins handelt von
keinem dieser beiden Dinge.
Hallo Fpga Kuechle.
Fpga Kuechle schrieb:> http://www.oreilly.de/catalog/wenschleprogger/
Das kenne ich. Gibt gerade Anfängern wertvolle Tipps, und der
Schreibstil von Frau Passig und Herrn Jander ist einfach genial!
Es geht aber doch mehr ums allgemeine des Programmierens und weniger um
eine Algorithmensammlung, was ich vermute der TO sucht.
Trozdem würde ich dieses Bucht dem TO anraten.
Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.l02.de
Christian J. schrieb:> Komplexe Statemaschines mit Timern, wie zb das Schalten von> Ampeln an Kreuzungen würde ich auch als Zustände in einer Art> Matrix als "array of struct" (Zustand, Bedingung, Aktion,> naechster Zustand) implementieren, so dass keine endlose> Folge von switch case Anweisungen dabei herauskommt.
Glückwunsch!
Du stehst kurz vor der Erfindung der Schrittkette.
Die von den "richtigen" PC-Anwendungsprogrammierern im
Allgemeinen verachteten Steuerungs-Fritzen machen so etwas
seit ca. 30 Jahren auf ihren SPS...
>Sowas nützliches wie das hier (Bit Twddling Hacks)>http://graphics.stanford.edu/~seander/bithacks.html#OperationCounting
Nützlich?
Die Beispiele aus der Website erscheinen mir als Beispiele, wie man
einfache Sache (unnötig) kompliziert machen kann:
Compute the sign of an integer
Detect if two integers have opposite signs
Compute the integer absolute value (abs) without branching
Compute the minimum (min) or maximum (max) of two integers without
branching
Es mag Fälle geben, wo man bei C das branching vermeiden muss, aber wie
oft kommt das in der Praxis vor?
Softwerker schrieb:> Es mag Fälle geben, wo man bei C das branching vermeiden muss, aber wie> oft kommt das in der Praxis vor?
Und nur weil man im C-Quellcode kein if oder ?: hat, bedeutet das noch
lange nicht, daß der Compiler daraus keine Branch macht, genausowenig
wie deren Vorhandensein bedeutet, daß eine Branch gemacht wird.
Es gilt also damit nur für ganz spezifische Kombinationen aus Compiler
und Prozessor, bei denen man ermittelt hat, daß der Compiler trotz
Optimizer ineffizienten Code erzeugt.
Softwerker schrieb:> Es mag Fälle geben, wo man bei C das branching vermeiden muss, aber wie> oft kommt das in der Praxis vor?
Für DSPs in rechenintensiven schleifen, kann das hilfreich sein.
Ein falsch vorhergesagte Branches kann das ganze significant
verlangsamen.