Forum: Mikrocontroller und Digitale Elektronik 8-BIT Controllerentwicklungen -> Wie machen das Profis ?


von UBoot-Stocki (Gast)


Lesenswert?

Guten Morgen,

mich interessiert wie professionelle Entwickler die Elektronik 
von(Controllergesteuerten) Geräte entwickeln. Ich denke an Geräte wie 
Waschmaschinen, Gefrierschränke, Kaffeemaschinen, DVD-Player etc. Eben 
alles was potentiell von einem 8-Bitter gesteuert wird.

Wird da "Rapid Prototyping" angewand oder geht das "klassisch" mit 
Pflichtenheft, Struktogramm und Coding...

Wie oft ändert sich das Design während einer Eintwicklung? Was passiert 
bei Erweiterungen?

Eben wie das so abläuft ....

Hintergrund: Meine Hobby-Entwicklung steht nun vor dem Wendepunkt: 
Entweder ich redesigne den Code um Platz zu schaffen für neue Funktionen 
oder ich Erweitere das Gerät um einen weiteren Controller der dann 
Teilaufgaben übernimmt. Eine weitere Option wäre einen größeren 
Controller zu nehmen ...
Mich Interessiert wie die Profis an sowas rangehen und frage mich ob der 
bisherige Ansatz eines "interativen" Entwicklungsmodells (der Appetit 
kommt mit dem Essen) nicht evtl. völlig falsch war ...

Gruß

Andreas

von Der kleine Tierfreund (Gast)


Lesenswert?

Auch nicht anders, falls so eine allgemeine Frage überhaupt beantwortet 
werden kann. Die Fragen sind die gleichen und das ultimativ perfekte 
Design gibt es nirgendwo, bzw. nur bis zur nächsten Änderung.

Wenn genug Geld/Zeit vorhanden ist werden schon mal mehrere Designs 
beauftragt nur um sich ein Bild zu machen, aber das ist eher die 
Ausnahme.

Equipment Erfahrung und Knowledge sind in einer anderen Dimension, aber 
so weit ich das überblicken kann, kochen alle mit Wasser.

Und Rapid Prototyping nützt wenig da die Designprozesse nicht vom Design 
abhängen sondern von den Prozessen (Firmenstrukturen). Je größer  der 
Laden ist um so aufwändiger wird das drumherum.

Stichworte: Keil, IAR, Hitex, In Circuit Debug, usw

von Karl H. (kbuchegg)


Lesenswert?

UBoot-Stocki wrote:

> Wird da "Rapid Prototyping" angewand oder geht das "klassisch" mit
> Pflichtenheft, Struktogramm und Coding...

Bei uns geht das so, dass zunächst mal der Kunde in die Mangel genommen 
wird. Was will er genau haben. Das hört sich einfach an, ist aber 
mitunter einer der schwierigsten Punkte im ganzen Projekt: Aus dem 
Kunden seine genauen Vorstellungen rauskitzeln und das ganze so in 
Schriftform giessen, dass er das als Auftrag dann auch unterschreibt. 
Dabei auf all die kleinen Nebenbedingungen nicht vergessen, die einem 
später das Leben schwer machen werden und an die zum jetzigen Zeitpunkt 
keiner denkt (die aber später massiv Geld kosten werden).
Wenn dein Kunde sagt: "Ach, das ist ganz einfach, das geht so ..." oder 
"Das brauchen wir nicht" oder "Das kommt in der Praxis nicht vor", dann 
diese Aussage im Detail unbedingt festhalten bzw. nachbohren. Gerade 
dieses "Das kommt nicht vor" stellt sich im Nachhinein oft als Boomerang 
heraus.

Danach setzt sich ein Entwickler hin und überlegt mal in groben Blöcken, 
wie man die Kundenvorstellungen realisieren kann. Dabei muss er einen 
Überblick bekommen, was an Input notwendig ist und was als Output vom 
Programm rauskommen soll. Er überlegt sich, welches UI dafür adequat 
wäre, wobei er darauf achtet, möglichst vorhandene UI-Elemente 
wiederverwenden zu können. Wenn das gelingt ist es gut, wenn nichts da 
ist, kann man sich überlegen ob man die Aufgabenstellung ein wenig in 
die Richtung treiben kann, so dass irgendwas von der Halde passt. Wenn 
alle Stricke reißen, muß man was Neues erfinden.

Steht das ganze soweit und ist auch der Schritt 'Verarbeitung' in groben 
Zügen klar, dann gehen wir das mit dem Kunden noch mal durch. Zur 
Verarbeitung (also: wie du die Logik aufziehst) wird er nicht viel 
sagen. Erstens vertraut er dir, dass du schon weißt was du tust, 
zweitens ist es für Durchschnittskunden extrem schwer, eine logische 
Abfolge von vielen Kommandos mit seinen Vorstellungen zu vergleichen, 
egal wie du sie ihm präsentierst. Aber zum UI wird er sich äußern und 
das ist gut so. Das vermeidet zum einen, dass er hinterher sagt "Ich hab 
mir das aber ganz anders vorgestellt" zum anderen gibt es dir Hinweise, 
ob du bei der Verarbeitung etwas übersehen hast. Wenn der Kunde zb. auf 
der Output Seite unbedingt noch einen zusätzlichen Wert angezeigt haben 
will, dann hast du was übersehen.

> Wie oft ändert sich das Design während einer Eintwicklung? Was passiert
> bei Erweiterungen?

Im Idealfall ändert sich dann nichts mehr.
Diesen Idealfall hab ich noch nie erlebt :-)

OK. Wenn was rauskommt, dann treffen 2 Welten aufeinander. Hängt 
natürlich auch davon ab, wann diese Erweiterung notwendig wird. Ist es 
noch früh genug im Entwicklungsprozess, dann sind Entwickler 
normalerweise kooperativ, solange das nicht das Gesamtsystem komplett 
umdreht.
Je mehr sich aber die Dead-Line nähert, desto mehr werden Entwickler 
anfangen zu mauern. Erfahrene Entwickler haben längst gelernt, dass es 
tödlich ist, 2 oder 3 Wochen vor Abgabe noch irgendwelche großartigen 
Design-Änderungen zu akzeptieren. Das führt letztendlich immer zu 
versteckten Fehlern in bereits einwandfrei funktionierenden 
Programmteilen, die der Kunde dann dir anlasten wird. In so einem Fall 
gilt die Devise: Die gewünschte Änderung in einen neuen Auftrag 
verchieben, der nach dem laufenden Auftrag abgehandelt wird und erst 
beginnt, wenn das bisherige vom Kunden abgenommen wurde. Sonst wartest 
du nämlich ewig auf dein Geld und Gehälter wollen schliesslich auch 
bezahlt werden.

> Hintergrund: Meine Hobby-Entwicklung steht nun vor dem Wendepunkt:
> Entweder ich redesigne den Code um Platz zu schaffen für neue Funktionen
> oder ich Erweitere das Gerät um einen weiteren Controller der dann
> Teilaufgaben übernimmt. Eine weitere Option wäre einen größeren
> Controller zu nehmen ...

In so einem Fall, wird man versuchen, zu retten was zu retten ist ohne 
allzu gravierende Änderungen vorzunehmen. Die Variante, die am wenigsten 
Softwareänderungen verursachen wird, ist es, einen größeren Controller 
zu nehmen, sofern der kompatibel ist.
Ein zusätzlicher Controller bringt eine neue Komponente ins Spiel: Die 
beiden müssen miteinander kommunizieren können. Und das unter allen 
Umständen oder Sonderfällen. Wenn dein System nicht von vorne herein auf 
solche Multitasking Spezialitäten ausgelegt war, dann handelst du dir 
damit einen neuen Sack Flöhe ein, die mit deinem eigentlichen Problem 
(neue Funktionalität) erst mal gar nichts zu tun hat, dein 
Komplettsystem aber trotzdem lahmlegen kann.

> Mich Interessiert wie die Profis an sowas rangehen und frage mich ob der
> bisherige Ansatz eines "interativen" Entwicklungsmodells (der Appetit
> kommt mit dem Essen) nicht evtl. völlig falsch war ...

Kommt immer drauf an, wie gross der Appetit wird.
Einem Kunden wirst du natürlich nicht jede gewünschte Änderung 
abschlagen. Du musst ihn auch etwas bei Laune halten. Aber grundsätzlich 
lautet die Devise: Sieh zu, dass du zuerst das realisierst, was du 
ursprünglich mit dem Kunden ausgemacht hast. Erweiterungen bzw. 
Änderungen kannst du jetzt schon im Softwaredesign berücksichtigen (also 
etwas Vorarbeit leisten), aber so dass sie der Kunde sieht, wird es erst 
realisiert, wenn der Folgeauftrag da ist.

Grundsätzlich halte ich den Ansatz des 'iterativen Modells' für so 
schlecht nicht. Für gewerbliche Zwecke kann das zwar mächtig ins Auge 
gehen, aber für Privat ist das OK. So sammelt man nämlich dann auch 
Erfahrung, wie man Module aufbaut, so dass der Aufbau nicht vor 
möglicher Felxibilität untergeht, man sich aber auf der anderen Seite 
auch nicht eine Weiterentwicklung mutwillig verbaut. Das ist eine 
Gratwanderung, die mal lernen muss.
Ab und an auch mal den Schritt zurück machen und das Gesamtsystem 
betrachten. Wie könnte man Dinge vereinfachen, wenn man 'in Stein 
gemeisseltes' Urgestein verändert. Für solche Betrachtungen hab ich 
schon oft Testprogramm-Systeme gebaut. Einfach nut um zu sehen, wo mich 
eine Änderung hinführen wird, welche Auswirkungen bestimmte Änderungen 
haben werden, was sich vereinfacht, was komplizierter wird. Auf die Art 
sammelt sich dann ein Fundus an erprobten Methoden an.

von Karl-heinz S. (cletus)


Lesenswert?

Karl heinz Buchegger wrote:
> Aus dem
> Kunden seine genauen Vorstellungen rauskitzeln und das ganze so in
> Schriftform giessen, dass er das als Auftrag dann auch unterschreibt.

Und falls Nachfragen entstehen, weil etwas vorher nicht hunderprozentig 
klar war:

SCHRIFTLICH, niemals per Telefon.

"Ja, aber wenn wir das anders umsetzen ist [abuse hier einsetzen] 
möglich, wollen Sie das wirklich?"

Wen hatte ich zwei Wochen später unfreundlich motzend am Telefon? Bzw 
wessen Chef?

von Matthias N. (vbchaos)


Lesenswert?

Dito...

Bei uns (und ich denke eigentlich ueberall) ist das schwierigste, genau 
zu wissen und zu erfahren, was der Kunde genau will.

Die weiteren Schritte sind etwas Kunden-, Betriebs- und Designer 
abhaengig. Mancher Kunde will genau DEN Controller, andere sagen "8 Bit 
passt doch, Hersteller egal". Hat die Firma vielleicht Vertraege mit 
Controller-Herstellern, ist klar, was gewaehlt wird. Hat die Firma 
vielleicht x-Jahre Erfahrung mit einem Controllertyp gesammelt und 
massiv Design- und Coderessourcen angehaeuft, ist auch klar, was gemacht 
wird bzw. wo die Prioritaet sitzt. Manche Peripherie laesst sich anhand 
des Controllers auswaehlen, bei anderen ist es eine reine Kosten- 
und/oder Glaubensfrage. Es bleibt aber vielfach eine einfache Frage der 
vorhandenen Ressourcen, warum irgendwas ganz neu machen, wenn es schon 
fuer einen anderen Controller da ist? Es sei denn natuerlich, der Kunde 
will es so und bezahlt dafuer :)

Wir starten hier normalerweise mit DemoBoards, die auf dem selben 
Controller aufbauen wie das Projekt spaeter dann auch. Es wird zumeist 
eines gewaehlt, dass moeglichst viel der spaeteren Peripherie bereits 
mit dabei hat. Anhand der mitgelieferten Schematics hat der Designer in 
manchen Punkten dann einen Anhaltspunkt, und die Software Leute koennen 
parallel auf dem DemoBoard schon arbeiten.

Spaeter wird das zusammengefuegt. Das erste Design hat meist einige 
Schwachstellen und Kinderkrankheiten. Es dauert manchmal 1-2 Tage, bis 
die Software Leute problemlos ihren Code da reinkriegen. die meisten 
Redesign-Issues kommen dann auch aus der Software-Schmiede, die diverse 
kleine Fehler finden. Zusaetzlich ueberpruefen die Hardware Leute ihr 
Design noch selber, werden sicherlich kleinere Maengel an Footprints und 
Shapes finden (was ihr Ego nicht unerheblich erschuettert :) ).

Das Redesign Spiel geht solange, bis es passt. Gaengig sind eigentlich 2 
oder 3 Versionen, bei groesseren Sachen auch mal 4 oder 5. Sollte man 
aber nicht haeufig machen, kostet nur :)

von Johnny (Gast)


Lesenswert?

> Bei uns (und ich denke eigentlich ueberall) ist das schwierigste, genau
> zu wissen und zu erfahren, was der Kunde genau will.

Leider wissen die meisten Kunden selber nicht so genau, was sie 
eigentlich wollen...

von STK500-Besitzer (Gast)


Lesenswert?

>Leider wissen die meisten Kunden selber nicht so genau, was sie
>eigentlich wollen...

Einige Forenbesucher auch nicht...(LED soll blinken...)

von Juergen (Gast)


Lesenswert?

Im Prototypen wird erstmal ein Kontroller mit relativ viel Speicher 
verwendet, damit es da keine Zeitverluste gibt. Fuer die Grossserie 
(dazu kam es dann aber nicht) wird dann abgespeckt.

von Peter D. (peda)


Lesenswert?

UBoot-Stocki wrote:
> Wird da "Rapid Prototyping" angewand oder geht das "klassisch" mit
> Pflichtenheft, Struktogramm und Coding...

Pflichtenheft wäre schön, in der Praxis wirds leider selten richtig 
genutzt.


> Wie oft ändert sich das Design während einer Eintwicklung?

Zu oft.

> Was passiert
> bei Erweiterungen?

Wenn möglich als extra Projekt einstufen, d.h. neuer Auftrag, neue 
Entwicklungszeit.



> Hintergrund: Meine Hobby-Entwicklung steht nun vor dem Wendepunkt:
> Entweder ich redesigne den Code um Platz zu schaffen für neue Funktionen
> oder ich Erweitere das Gerät um einen weiteren Controller der dann
> Teilaufgaben übernimmt. Eine weitere Option wäre einen größeren
> Controller zu nehmen ...

Oftmals ist ein altes Projekt so vergurkt, daß eine neue CPU nichts 
bringt. Der Flaschenhals ist nicht die Rechenleistung, sondern der 
Ablauf. Es wird Rechenzeit an falschen Stellen vergeudet.

Ein weitere Controller ist so ziemlich das schlimmste, weil man dann 
erstmal ein zuverlässiges, echtzeitiges, fehlertolerantes 
Kommunikationsprotokoll entwickeln muß.

Die effektivste Methode ist, nochmal von vorne anzufangen, d.h. ein 
neuer Programmablaufplan.
Klingt erstmal aufwendig, aber man weiß ja schon, wie das alte Projekt 
funktioniert hat.
Und man wundert sich dann, wieviel sich nur durch den neuen 
Programmablauf alles optimieren läßt.



> Mich Interessiert wie die Profis an sowas rangehen und frage mich ob der
> bisherige Ansatz eines "interativen" Entwicklungsmodells (der Appetit
> kommt mit dem Essen) nicht evtl. völlig falsch war ...

Es reizt jeden Entwickler, beim neuen Projekt sofort den Editor zu 
öffnen und:
1
main()
2
{
3
...
4
}
zu schreiben.
Aber das ist die mit Abstand ineffektivste Methode und dauert am 
längsten.

Der beste Start eines Projekts ist, den PC auszuschalten und Papier und 
Bleistift zu nehmen.


Peter

von Peter D. (peda)


Lesenswert?

Juergen wrote:
> Im Prototypen wird erstmal ein Kontroller mit relativ viel Speicher
> verwendet, damit es da keine Zeitverluste gibt.

Und genau dadurch ergeben sich dann erst recht Zeitverluste, weil es den 
Programmierer zu schludrigem, ungeplanten Programmieren von 
Spaghetticode verleitet.

Das richtige Maß zu finden ist nicht einfach, da hilft eigentlich nur 
Erfahrung.

Viel hilft jedenfalls nicht viel. Wenn ich viel Speicher habe, geht ja 
auch viel CPU-Leistung für die vielen Zugriffe drauf, d.h. die Leistung 
sinkt weiter.

Ich versuche immer, die Abläufe in möglichst kleine universelle 
Funktionen zu zerlegen, damit sie schön einfach und übersichtlich sind 
(Ich habe leider kein Elefantengedächtnis für riesige Codemonster). Und 
damit sinkt der Speicherverbrauch automatisch mit.


Peter

von Karl H. (kbuchegg)


Lesenswert?

Peter Dannegger wrote:

> Die effektivste Methode ist, nochmal von vorne anzufangen, d.h. ein
> neuer Programmablaufplan.

Stimme zu.
Allerdings kriegt ein Kunde meistens einen Herzinfarkt, wenn du ihm das 
so erzählst :-) Da muß man dann öfter mal psychologisch etwas 
'tricksen', ansonsten hängt dir der Kunde dieses Neuschreiben sofort als 
'das geht aber auf eure Kappe' an.

> Klingt erstmal aufwendig, aber man weiß ja schon, wie das alte Projekt
> funktioniert hat.

Und vor allen Dingen hat man einen wesentlichen Vorteil: Man hat 
speziell auf dieser Aufgabenstellung in der Zwischenzeit eine Menge 
Erfahrung gesammelt, kennt all die kleinen Problemchen und wie man sie, 
manchmal schlecht als recht, umgangen hat und kann das neue Projekt 
gleich so aufsetzen, dass diese Problemkreise gar nicht mehr auftreten. 
Dafür gibts dann zwar neue, aber so ist das Leben.

> Der beste Start eines Projekts ist, den PC auszuschalten und Papier
> und Bleistift zu nehmen.

Das kann man gar nicht oft genug dick unterstreichen.

von ahem (Gast)


Lesenswert?

Der Kunde, oder derwelche, der etwas will, will zuerst mal das Falsche. 
Da muss er aber selbst herausfinden. Mit etwas glueck kann man die 
Aenderungen schon vorausahnen, mit etwas glueck den Kunden dahingehend 
beieinflussen. Denn der Termindruck kommt sowieso, aber von extern. 
Irgemdwann will/muss der Kunde an genau diese Messe, und muss da schon 
etwas haben. Das absolute Minimum ist die Gewissheit, dass das Problem 
geloest ist. Dann laesst sich noch was mit Attrappen erreichen.
Und ja, hin und wieder sollte man einen Redesign durchfuehren. Lieber 
neu anfangen, als weiter mit Effizienz Null rumprfriemeln.

von Oliver (Gast)


Lesenswert?

Als reiner Hobbyprogrammierer sehe ich das ziemlich entspannt. Wenn bei 
Mikrocontrollerprojekten nicht der Weg das Ziel ist, kaufe ich ein 
fertiges Gerät...

>Entweder ich redesigne den Code um Platz zu schaffen für neue Funktionen
Ein Redesign bei "gewachsenen" Projekte ist nie verkehrt, aber erwarte 
nicht, daß da plötzlich gigantische Reserven frei werden. Dazu kommt: Du 
hattest am Anfang des Projektes keine Vorstellung über den Umfang, und 
hast es heute immer noch nicht. So ist das halt unter uns Hobbiisten 
(und bei manchem "Profi" auch...).

>oder ich Erweitere das Gerät um einen weiteren Controller der dann
>Teilaufgaben übernimmt.
Vergiß es. Wenn sich die Aufteilung nicht völlig logisch ergibt (d.h. 
man kann zwei vollwertige Geräte draus machen), wird das viel zu komplex 
und nicht handelbar.

>Eine weitere Option wäre einen größeren Controller zu nehmen ...
Yepp. Wie heisst es so schön: Wende niemals Gewalt an, nimm gleich den 
großen Hammer :-) Ob der Prozessor nun 1,50 oder 3,50 bei Angelika 
kostet, ist doch völlig egal.

Oliver

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.