Forum: Mikrocontroller und Digitale Elektronik Nutzung von HAL Libraries im kommerziellen Umfeld


von Christian J. (Gast)


Lesenswert?

Hallo,

ich hatte vor einiger Zeit einen Glaubenskrieg mit einem Kollegen, der - 
wie manche Sturköpfe ja so sind - ziemlich heftig ausfiel.

Es ging darum einen Atmel mit Software für Gerätesteuerung zu bestücken. 
Softwareentwicklung ist teuer, sie macht einen Grossteil eines Projektes 
aus, zudem manche meiner Meinung nach etwas zu lange über den immer 
gleichen Aufgaben brüten.

Die Steuerung war easy, nichts was die Welt bewegt, eine Schleife, die 
nacheinander Sensoren einliest, eine Uart bedient und ein paar Relais 
klappern lässt.

Mein Vorschlag war nun: Wieso der Zirkus in die internen Register des 
Atmega8 zu kriechen? Es kostet Umengen an Zeit, wenn man nicht jeden Tag 
sowas macht sich durch die Datenblätter zu wühlen, damit man jedes 
Register auch mit Namen kennt. Ich habe viele Jahre PICs auf diese Weise 
programmiert. Wobei der CCS Compiler ja schon viel eingebettet 
Funktionen hat.

Ich schlug vor die Arduino IDE zu nehmen, entsprechende Libraries 
einzubinden und Ruckzuck ist die Steuerung fertig, ohne dass ich auch 
nur einen Gedanken daran verschwenden muss, was in dem Atmega drin ist. 
Dürfte ja bekannt sein, dass man nur die ISP eines Chips herausführen 
muss, um ihn mit einem Programmer von der IDE aus zu programmieren. Das 
Arduino Programm ist alleinlauffähig, nur der Timer 0 kann nicht 
verwendet werden, da der Funktionen wie millis steuert. Außerdem werden 
ständig ISR von T0 ausgelöst, die man aber abschalten kann.

Ich wurde von den "alten Hasen" gründlich niedergemacht.... 
"Hobby-Zeugs..... Bastelkram..... sch. Open Source Software von 
Hobbybastlern....., weiss keiner ob der fehlerfrei ist"

Ich wurde da auch deutlich lauter in dem Meeting, dass ich diese sture 
Haltung "das wurde immer so gemacht..." nicht toleriere. Die Welt dreht 
sich weiter und viele, besonders ältere programmieren immer noch in 
Assembler, weil sie sich weigern C zu lernen.

Ich nahm also ein Arduino Board und hatte binnen eines einzigen Tages 
die Steuerung fertig! 1 Tag !

Wie ist das bei euch? Verwendet ihr fertige Lösungen (HALs), die es auch 
für Arm Cortex gibt oder wird jedes Programm immer noch "hardware nah" 
programmiert? Manchmal ist das nötig, wenn hoch effizineter Code erzeugt 
werden muss oder Dinge, die über einfache Kontrollstrukturen hinaus 
gehen, ok.

Gruss,
Christian

von Bernd N (Gast)


Lesenswert?

>> Die Steuerung war easy, nichts was die Welt bewegt, eine Schleife, die
>> nacheinander Sensoren einliest, eine Uart bedient und ein paar Relais
>> klappern lässt.

>> Ich nahm also ein Arduino Board und hatte binnen eines einzigen Tages
>> die Steuerung fertig! 1 Tag !

Einen Tag ? das ist was für maximal einen halben. Wie lange haben denn 
deine alten Hasen gebraucht ?

Grundsätzlich bin ich aber auf deiner Seite.

>> besonders ältere programmieren immer noch in
>> Assembler, weil sie sich weigern C zu lernen.

Da hast du noch einuges an Überzeugungsarbeit zu leisten :-).

Schau in Richtung ARM, fertige Libraries zu verwenden wird mehr oder 
weniger zum Standard.

von Oliver R. (orb)


Lesenswert?

Christian J. schrieb:
> Ich schlug vor die Arduino IDE zu nehmen,

Er hat Jehova gesagt ...

Ich befürchte auch hier wird Dir der gleiche Wind entgegen wehen.

Bier und Popcorn hol ...

von Achim S. (achims)


Lesenswert?

Wie weit darf man die Libs von freier Software in gewerblichen 
Steuerungen benutzen? Patentrecht? oder so was? Nur mit Angabe der 
Quelle?

von Christian J. (Gast)


Lesenswert?

Oliver R. schrieb:
> Christian J. schrieb:
>> Ich schlug vor die Arduino IDE zu nehmen,
>
> Er hat Jehova gesagt ...
>
> Ich befürchte auch hier wird Dir der gleiche Wind entgegen wehen.
>
> Bier und Popcorn hol ...

"Auf den Poden mit dem Purschen!"

Das ist mir absolut egal, ich denke rein pragmatisch und will ein 
Problem auf dem schnellsten und einfachsten Wege lösen ohne tausendmal 
das gleiche rad neu erfinden zu müssen. Zudem bin ich gläubiger Open 
Source Jünger, Linuxer und glaube an die Schwarmintelligenz dass viele 
fewillig eine Sache genauso gut machen können wie wenige bezahlte in 
einer einzigen Firma (GCC).

von Fritz (Gast)


Lesenswert?

Das sagt dir die Lizenz. Oh Wunder!

von Bernd N (Gast)


Lesenswert?

Mal als Beispiel...

http://www.ti.com/lit/ug/spmu367/spmu367.pdf

Man muß das Rad nicht immer neu erfinden.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Du hast da was verpennt...
Man schreibt nicht jedesmal den HAL neu!
Die meisten Firmen haben ihre Standardcontroller und dazu dann auch 
eigene Libs oder die vom Hersteller.

Außerdem mags ja sein, dass du da jetzt was in nem Tag zusammengeklickt 
hast, aber haste auch vorher alle Möglichen Zustände begutachtet und 
hinterher ausgiebig getestet?

von Christian J. (Gast)


Lesenswert?

Achim Seeger schrieb:
> Wie weit darf man die Libs von freier Software in gewerblichen
> Steuerungen benutzen? Patentrecht? oder so was? Nur mit Angabe der
> Quelle?

Freie Software ist freie Software. Alles was in der GPL drinsteht. Die 
Steuerung einer zielsuchenden Rakete eines Jagdflieger läuft, wie ich 
dir vertraulich sagen kann unter Linux ab.

von Christian J. (Gast)


Lesenswert?

Martin Wende schrieb:

>
> Außerdem mags ja sein, dass du da jetzt was in nem Tag zusammengeklickt
> hast, aber haste auch vorher alle Möglichen Zustände begutachtet und
> hinterher ausgiebig getestet?

Das ist eine Sache der Validation. Klar, natürlich, jedes Produkt wird 
validiert. Aber das war hier jetzt nicht das Thema. Es ging nur darum, 
dass mich wütend werde, wenn sog. Ingenieure sich auf den hohen Thron 
setzen und alles "kompliziert" erscheinen lassen, damit sie ihr Dasein 
rechtfertigen können. Denn ich weiss, dass es einigen ganz schön stinkt, 
dass es immer einfacher wird mit sowas umzugehen und dass man keinen 
Ingenieur mehr braucht um so was zu entwickeln.

von Karl (Gast)


Lesenswert?

Meiner Erfahrung nach versagen die _Fremd_-Library-Ansätze bei komplexer 
werdenden Aufgaben zunehmend. Zuerst versucht man sich mit den immer 
irgendwie vorhandenen Unzulänglichkeiten zu arrangieren und irgendwann 
macht man es doch neu und spezifisch für das Problem. Ich rede hier aber 
von Projekten > 10 Mannjahre.

Wie so oft: The right tool for the job.

Wenn man die Lösung in einem Tag programmieren kann, klick ich das in 30 
Minuten in Simulink für das Arduino-Target zusammen (:-P). Bei derart 
simplen Aufgaben spricht dann sicher auch nichts dagegen.

von Christian J. (Gast)


Lesenswert?

Karl schrieb:

> Wie so oft: The right tool for the job.
>
> Wenn man die Lösung in einem Tag programmieren kann, klick ich das in 30
> Minuten in Simulink für das Arduino-Target zusammen (:-P). Bei derart
> simplen Aufgaben spricht dann sicher auch nichts dagegen.

Hallo Karl,

das ist bei goßen projekten an komplexen Maschinen natürlich so wie du 
schriebst. Da muss man tief rein und diese fertigen Lösungen stellen ja 
nur ein Subset zur Verfügung. Ich verwende auch keine Lib, die ich nicht 
mal kurz durchgeschaut habe. Der Code ist alles andere als optimal und 
ROM Check, Ram check usw. wirst du damit nicht durchühren können. Aber 
ich sprach von einem einfachen Gerät, Konsumer Ware und meinem Ärger, 
dass da auf dem Budget 10.000 Euro für Software stehen, wo ich nicht mal 
1000 für ansetzen würde. Es geht auch um Politik der künstlichen 
Verkomplizierung von einfachen Dingen, um die eigene Tätigkeit zu 
rechtfertigen.

von Peter P. (Gast)


Lesenswert?

Ich würde auch soviel fertiges Zeug (Libs, Example Codes...)
nehmen, wie es geht. Spart normalerweise ungemein an Zeit,
wobei man die Zeit trotzdem aufwenden muss, wenn man
die Implementierung und den Ablauf dann doch mal verstehen muss
(z.B. wenn ein Fehler mit dem fertigen Zeug auftritt
oder der Code erweitert/portiert werden muss)
Mit einfach zusammen kopieren klappt es meist eher nicht,
zumindest wenn es dann mal schwieriger wird,
also Aufgaben, die nicht schon 1000 mal im Netz zu finden sind.
Es hängt aber oft auch von Randbedingungen ab.
(z.B. wenn der gleiche Code in verschiedenen Geräten/uC
verwendet werden soll, dann vielleicht aber Layer über HAL.
Oder stromsparender Betrieb, schnelle Reaktionszeit, bestimmtes OS.)

Jedoch gibt es auch Negativbeispiele:
Ich habe vor kurzem die Microchip Peripheral Lib benutzt,
(war aber eine uralt legacy Version
- neuere Version war leider nicht möglich)
musste dann aber wegen interner Fehler (oder waren es
Bedienfehler meinerseits?) die Nutzung aufgeben.
Variante waren dann Registerzugriff im selbst geschriebenen Code
oder Kopie von deren Code mit eingearbeiteten Bugfixes).
Da fragt sich dann, was besser/zeitsparender gewesen wäre,
gleich Registerzugriff statt Lib und Fehlersuche?
Aber nachher ist man immer schlauer...

Wenn es bei dir 1 Tag gedauert hat und es dann funktioniert,
dann ist ja nicht viel verloren. Wenn es doch noch zu
Problemen kommt oder Laufzeit/Features nicht ausreichen,
dann kann man es immer noch "Hardware-nah" realisieren.
Könnte man ja als Prototyp ansehen, damit man schnell und
frühzeitig die Hardware testen kann.

Wobei es da wirklich auch darauf ankommt, ob das Ding
dann nur für den internen Einsatz gedacht ist
oder Qualität dahinter stecken soll,
wofür die Firma auch gerade steht.

Und vielleicht auch, ob alles vorhanden ist (z.B. Source Code)
um etwas zu fixen (oder auch nur zum debuggen),
wenn ein Problem auftritt oder man Teile als Binary einbindet,
für die man im Falle des Falles externe Hilfe braucht
(eine Abhängigkeit hat) und selbst gar nichts machen kann,
als es dann ohne dieses Binary erneut zum Laufen zu bringen.

von Lustiger Augustin (Gast)


Lesenswert?

> Ich wurde von den "alten Hasen" gründlich niedergemacht....

Haha... Das kenne ich zu genüge...

Zur Zeit habe ich auch mit so einem zu tun. Unglaublich stur und 
uneinsichtig.

Sein Credo: "Copy und Paste".

Es ist einfach nur schlimm. Überall wird ständig wiederholt. Egal ob 
einzelne Zeilen, Blöcke oder ganze Funktionen: Kopieren, und dann ein, 
zwei kleine Änderungen. Oft an irgendwelchen magischen Konstanten.

Die unterschiedlichen Funktionen werden dann z.B. "func1", "func2", 
"func3" genannt. Das höchste was ich gesehen habe war "func17".

Es ist eine einzige Katastrophe, was er produziert. Aber er ist ja der 
"alte Hasen" der das schon ewig macht und sich auskennt. Seine 
Vorgesetzten hören auf ihn, obwohl sie keinen blassen Schimmer von 
Software haben. Die Hälfte der Zeit verbringt er damit, seine Position 
im Unternehmen zu verteidigen und Kritiker kalt zu stellen.

Ein Wunder, dass es diesen Schuppen noch gibt...

von Max D. (max_d)


Lesenswert?

erstmal ist an Arduino nichts falsch (und wenn man ihn so benutzt, dann 
zieht auch das Argument mit "nichts lernen" nicht). ABER: In dem Moment 
wo vom reinen Assembler weg bist (selbst C ist da nicht 100%, aber 
deutlich sicherer) kannst du nichtmehr zu vollständig vorraussagen wie 
sich dein Ding verhält (ausser du lies das .lss file in dem wiedrrum 
Assembler steht). Je nach Anwendung kann das sehr böse enden. Es geht 
bei manchen Bereichen so weit, dass man keine Interrupts verwenden darf 
weil die (in gewissem Maß) auch eine Unwägbarkeit darstellen.
Wenn deine Steuerung jetzt natürlich nur die Lüfter der dem Cheffe kühle 
Luft zufächelt steuert, dann ist ein Fehler drinnen harmlos und damit 
vertretbar.
Aber stell dir mal vor in deinem Auto würde das ABS mit Arduino geproggt 
sein und jemand hat einen overflow nicht beachtet (es gibt garantiert 
mindestens eine zweistelleige Anzahl an Szenarien wo das passiert) und 
mitten auf der AB haut das volle Lote die Bremse rein weil die Drehzahl 
überläuft und damit ein Bit für die Ausgabe kippt.
Wie bei allen Dingen ist es eine Frage der Werkzeugwahl. Und leider 
neigen viele Arduino-Nutzer dazu wenn sie einmal gelernt haben mit dem 
Hammer (=Arduino) umzugehen alles als Nagel zu sehen.

PS: Ich finde es btw. falsch die Problematik von Arduino auf Open-Source 
zu schieben. Bei einem Open-Source System kann man im Zweifelsfall 
nachlesen (im Source) und sogar nachbessern (wenn man Zeit und Können 
hat).

von pegel (Gast)


Lesenswert?

GPL ist ohne Garantie oder Haftung.
Wenn ich damit etwas herstelle muss ich das dem Kunden auch sagen oder 
eben selbst die Verantwortung übernehmen.
Dabei ist es sicher ein Unterschied ob ich einen Kaffeautomat verkaufe 
oder eine Robotersteuerung.
Im ersten Fall haben vielleicht ein paar Leute Durst,
im zweiten kann eine Produktionsline für eine Schicht ausfallen.

Muss jeder -Chef- selbst entscheiden.
Und der kann dabei auch Hilfe gebrauchen, am liebsten von denen mit 
deren Hillfe er schon oft Krisen vermieden bzw. gelöst hat.

Alte Hasen eben.

#########################

Für den Billigkrempel gibt es genug Sparzahler als Beta-Tester.

von Christian J. (Gast)


Lesenswert?

Lustiger Augustin schrieb:

>> Ich wurde von den "alten Hasen" gründlich niedergemacht....
>
> Haha... Das kenne ich zu genüge...

Bei mir steht der Absprung schon fest, die nächstbeste Gelegenheit wird
genutzt :-)

> Sein Credo: "Copy und Paste".
>
> Es ist einfach nur schlimm. Überall wird ständig wiederholt. Egal ob
> einzelne Zeilen, Blöcke oder ganze Funktionen: Kopieren, und dann ein,
> zwei kleine Änderungen. Oft an irgendwelchen magischen Konstanten.
>
> Die unterschiedlichen Funktionen werden dann z.B. "func1", "func2",
> "func3" genannt. Das höchste was ich gesehen habe war "func17".

Das kenne ich von den Quereinsteigern, Leuten die bei Röhren angefangen 
haben,
über Transistor- und Diodengräber in den 80igern ihre Blütezeit hatten, 
das TTL Kochbuch und die Taschentabentabellen von Transistoren und TTL 
IC's daeben lagen und dann gezwungen wurden sich mit sowas wie einem 
Mikrocontroller zu befassen. Ich habe da Programme gesehen wie:

do {                    // Schleifenanfang
   a=a+c;               // addiere c auf a
while (c<5)             // solange c kleiner ist als 5
for (a.....             // Für a = 0 bis a = 6

d.h. jede Zeile wurde kommentiert und das seitenlang. Variablen hiessen 
ij,k,b,l,m,o,p ..... ohne jede Aussagekraft. Keine Einrückungen, keine 
Zeilenabstände, stur durch ein einziger Klumpatsch!

Und überhaupt keine Einsicht, dass es sowas gibt wie lebenslanges 
Lernen. Dass die Dinge sich weiterentwickeln und dass man schnell zum 
alten Eisen gehört.

Ich habe früher seitenweise Assembler für PC programmiert, vor allem 
Treiber und ISR Routinen unter DOS, Z80, 6502 usw. aber heute ist das 
für mich nur noch das Gebrabbel eines Kleinkindes, was mit 35 Worten 
(PIC) schon an einer Fliesskommarechnung scheitert oder 3 Tage braucht, 
bis die FP Routinen endlich fehlerfrei sind. Assembler ist vorbei, im 
Startup Code ja, einige ISR als embedded code aber ansonsten Steinzeit 
aus der Zeit wo man noch mit Eprom Emulatoren gearbeitet hat und die 
Eproms alle 10 Brände wegwerfen konnte.

> Es ist eine einzige Katastrophe, was er produziert. Aber er ist ja der
> "alte Hasen" der das schon ewig macht und sich auskennt. Seine
> Vorgesetzten hören auf ihn, obwohl sie keinen blassen Schimmer von
> Software haben. Die Hälfte der Zeit verbringt er damit, seine Position
> im Unternehmen zu verteidigen und Kritiker kalt zu stellen.
>
> Ein Wunder, dass es diesen Schuppen noch gibt...

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.