Forum: Mikrocontroller und Digitale Elektronik Controller vs embedded


von Stephan R (Gast)


Lesenswert?

Hallo!

Problem: Studium ist vorbei und ich muss Geld verdienen.
Glück1: zweite Bewerbung war schon Volltreffer.
Glück2: meine Firma entwickelt elektrotechnische Produkte.
Beispiel: ein autonomes Wasserfahrzeug mit allerhand Sensorik.
Pech1: der Entwicklungschef ist von Controllern überhaupt nicht angetan 
(alter Linux- Hase) sondern schwört auf embedded Linux Boards
Pech2: mit Linux verbindet mich nix (aufgerundet). (geklauter Joke)
Zustand: vor mir liegt ein nacktes, kaltes, totes eLBoard.
Frage1: wie komm ich in die Materie?
Frage2: hab ich mir 6 Jahre µC-Schaltungen bauen umsonst beigebracht?

von Peter D. (peda)


Lesenswert?

Das Board wird ja irgendwo gekauft worden sein und auch die 
Linux-Distribution und die Toolchain (Compiler, Debugger).
Also dazu die Doku beschaffen und lesen.
Und dann ein "Hallo Welt" drauf laufen lassen.

Programmieren wie bei MCs wirst Du damit kaum, sondern einfach nur 
fertige Lego-Steinchen zusammen schieben.

von Daniel V. (danvet)


Lesenswert?

Da liegen doch sicherlich irgendwo EvalBoards rum? Unter den Nagel 
krallen, anwerfen, los geht`s.
Es hilft sicherlich, wenn man auch einen Linux-Entwicklungsrechner (PC) 
hat.

Da der Cheffe sich auskennt, hast du doch den perfekten Ansprechpartner. 
Dass du mit Linux noch nichts gemacht hast, dürfte ja aus deiner 
Bewerbung hervorgehen, also hast du die "Lizenz zum Fragen". Zumal du 
Berufsanfänger bist.

Die ersten 6 Monate wirst du sicherlich "rumeiern", dann wirds besser 
:-)
Also, Zähne zusammen beissen, einfach anfangen, zuhause mal 
spasseshalber Linux aufsetzen.
Du kannst nur (Erfahrungen) gewinnen!

von Bingoo (Gast)


Lesenswert?

naja auch bei embedded Linux gibt es C, also hardwarenahe 
Programmierung. Die Probleme dürften also geringer sein als befürchtet.

von Alexander F. (alexf91)


Lesenswert?

Zuerst solltest du eine passende Toolchain auf deinem PC installieren, 
vorzugsweise ebenfalls unter Linux.
Wie du das Board wirklich zum Laufen bringst hängt jetzt von mehreren 
Faktoren ab:
Liefert der Hersteller vielleicht sogar schon ein fertiges Image, von 
dem du ausgehen kannst?
Ist das nicht der Fall, so musst du dir dieses Image selbst erstellen. 
Das funktioniert für auf Debian basierende Distributionen mit 
debootstrap.

von Stephan R (Gast)


Lesenswert?

Danke für die Rückmeldungen!

Frageindenraumreinwerf: Ist "mein" AAEON GENE Board hier am Ende so 
etwas wie ein Raspberry?

von Rumpel (Gast)


Lesenswert?

Linux Embedded oder Windows Embedded verwendet man sobald Multimedia und 
Connectivitaet gefragt ist. Ein peppiges hochaufloesendes GUI, mit 
Ethernet, Bluetooth, WLAN, macht man besser mit einem ARM oder Atom wie 
mit einem Controller.
Controller verwendet da wo es an die Hardware geht, schnelle IO 
Vorgaenge gefragt sind.

von 4toTakoe (Gast)


Lesenswert?

http://www.aaeonusa.com/products/details/?item_id=1649

Wenn es sowas ist, dann definitiv NEIN. Es ist eine X86 Platform und 
kein ARM. Das Ding ist so Leistungsfähig, da könnte sogar Windows 8 
drauf.

Aber denk dran, gerad für solche Anwendungen

Stephan R schrieb:
> ein autonomes Wasserfahrzeug mit allerhand Sensorik

ist Echtzeitverarbeitung gefragt. Deine Hardware könnte maximal als 
Human-Maschine-Interface dienen und zum Anzeigen/Parametrieren. Die 
Steuerung buw. Sensor/Aktor Schnittstelle sollte auf jeden Fall 
Echtzeitfähig sein.

PS: Natürlich gibt es auch Echtzeiterweiterungen für Linux/Windows.

von Grendel (Gast)


Lesenswert?

Das Board da ist nen normaler x86 PC (nur halt auf einer einzigen 
Platine und paar speziellen Anschlüssen) da kannste auch Windows drauf 
installieren wenn Du willst.

Und Du kannst Deine Software direkt auf dem Board oder halt auf dem x86 
Rechner ganz normal mit dem gcc übersetzen oder irgendwas anderes nutzen 
- brauchst nichtmal nen cross compiler wie bei Mikrocontrollern.

Die grundlegenden Linux Sachen bekommt auch ein 16 jähriger hin (ich 
spreche aus Erfahrung ;-)).

von Stephan R (Gast)


Lesenswert?

4toTakoe schrieb:
> Das Ding ist so Leistungsfähig...

4toTakoe schrieb:
> Deine Hardware könnte maximal als
> Human-Maschine-Interface dienen...

Ääähm.. Dieses kleine Board ist soo leistungsfähig ABER könnte maximal 
als HMI dienen?

von 4toTakoe (Gast)


Lesenswert?

Stephan R schrieb:
> Ääähm.. Dieses kleine Board ist soo leistungsfähig ABER könnte maximal
> als HMI dienen?

Der Echtzeitanforderung wegen, und fehlender Schnittstellen. In einem 
Fahrzeug wird üblicherweise ein Bussystem verwendet und es gibt mehrere 
Messwandler für die Sensorik. Also muss ohnehin eine 
Aktor/Sensor-Schnitstelle irgendwo eingebaut sein/werden. Da kann auch 
gleich ein richtiger Controller die Steuerung übenehmen und er 
Embedded-PC übernimmt die Visualisierung und das Bling-Bling...

von Gregor B. (Gast)


Lesenswert?

GENE heißt bei AAEON ziemlich viel...
Da gibt es dann Boards mit Intel ATOM, i3, i5, i7, Celeron, Core2Duo,
AMD G, Geode LX,
TI Omap
Marvell PXA, ...

Also nicht nur x86.

von exstudent (Gast)


Lesenswert?

hmm studium vorbei, solltest du dann nicht ungefähr wissen was du hast 
x86, ARM, etc. und auf dem studium ein werkzeug mit bekommen haben um 
dich in die Materia einzuarbeiten? Oder wird das heutzutage nicht mehr 
gelernt...

Also Pobacken zusammen und die nächsten durchackern und den chef 
ausquetschen und los gehts - auch ja und nicht zuviel in mk.net herum 
treiben ;)

von Stephan R (Gast)


Lesenswert?

Ich versuche grad ein wenig über den Tellerrand heraus zu schauen und in 
meinem Gehirn eine Brücke (bzw Schneise) zwischen µC und embedded PC zu 
schlagen.


Ist es also so, dass ich zum Betrieb des ePC ein Betriebssystem brauche. 
Das werd ich jawohl kaum selber schreiben. Ich stelle mir also vor, mein 
Laptop wäre ein ePC samt Betriebssystem:
Ich wüsste nicht, wie ich ein Lämpchen an PortXY zum Blinken bringen 
sollte. Ich wüsste nicht mal, wonach ich suchen müsste, um auf ein 
Portbeinchen zuzugreifen. VisualBasic?

Anderes Schlachtfeld (keine Detaillösung gefragt) : mal so rein optisch: 
worin unterscheidet sich ein C- Programm, das für einen AVR geschrieben 
wurde, von einem, das für einen z.B. ARM geschrieben wurde 
(Pinbezeichnungen usw mal ausgenommen)? Verlangt ARM eine ganz andere 
"Grammatik" oder würde eine Aufgabe für einen ARM, die in für AVR 
geschriebenem Code gelöst werden soll, nur langsamer ausgeführt?

Fragen über Fragen..

von Stephan R (Gast)


Lesenswert?

exstudent schrieb:
> hmm studium vorbei, solltest du dann nicht ungefähr wissen

Mechatronik und Feinwerktechnik studiert, da war nicht sooo viel µC. Ist 
aber meine Leidenschaft und das soll meine Profession werden.

von Karl H. (kbuchegg)


Lesenswert?

>  Ich wüsste nicht, wie ich ein Lämpchen an PortXY zum Blinken bringen sollte.

Das ist unter Linux vom Ansatz her nicht weiter schwer.
Denn in allen Unixen gilt die Devise: Jeglicher I/O kann erst mal als 
'File' aufgefasst werden. Da gibt es also eine spezielle Datei und wenn 
man die öffnet und was reinschreibt, dann sorgt das System dafür, dass 
das dann auch bei der Hardware landet.

>  Ich wüsste nicht mal, wonach ich suchen müsste, um auf ein Portbeinchen 
zuzugreifen.

Na, wo wohl?
In der zugehörigen Doku. Entweder auf der papierenen, auf der 
Online-Hilfe (oftmals HTML) oder wenn alle Stricke reißen bei Tante 
Googel.

von Daniel V. (danvet)


Lesenswert?

Stephan R schrieb:
> Ich versuche grad ein wenig über den Tellerrand heraus zu schauen und in
> meinem Gehirn eine Brücke (bzw Schneise) zwischen µC und embedded PC zu
> schlagen.
>
Mach dir mal nicht zu viele Gedanken.
Der grösste Unterschied wird der Controller sein. Ein Atmel-AVR ist halt 
kein ARM/x86. Besorg dir das Datenblatt/Refrencemanual um Controller, 
dann siehst du wo das Problem liegt. Eventuell bist du dann sogar froh, 
wenn du ein OS hast, das dir so manches abnimmt.

Trotzdem kannst du auf Portpins etc. ähnlich zugreifen, wie mit dem AVR. 
Allerdings solltest du dir im Klaren sein, was du machst, sonst crasht 
dein OS...

von Karl H. (kbuchegg)


Lesenswert?

>  Verlangt ARM eine ganz andere "Grammatik"

Hmm.
Was denkst du?
Warum sind führende Programmiersprachen wohl genormt?
Warum gibt es Gremien, die sich regelmässig treffen und darüber 
diskutieren, wie und in welcher Form sich eine Programmiersprache 
weiterentwickeln soll und diese Ergüsse dann in Form eines nächsten 
Standards publizieren?

von W.S. (Gast)


Lesenswert?

Stephan R schrieb:
> sondern schwört auf embedded Linux Boards

Wenn du innerlich anders orientiert bist, also kein ausgesprochener 
Linux-Fan, dann wird das in dieser Firma auf längere Zeit nix. Es wird 
dann immer Reibereien geben, entweder zwischen dir und deinem Chef oder 
innerhalb von dir. Beides macht nicht glücklich.

Ansonsten gebe ich den Vorrednern Recht: So ein PC-AllInOne-Board mit 
nem Linux drauf taugt nicht für eine Fahrzeug-Automatisierung, sondern 
wirlich nur als Treiber für ein schönes buntes User-Interface. Ich 
schreib aus Erfahrung, hatte mal vor rund 20 Jahren Geräte mit 
eingebautem PC104 entwickelt. Wir hatten jahrelang Streß mit den Kunden 
- NIE WIEDER SOWAS!!!

Bedenke mal, daß so ein BS gebootet sein will und das dauert bei fast 
jedem Linux ne halbe Ewigkeit, also 20 Sekunden mindestens. In der 
Zwischenzeit ist dein Boot gestrandet oder vor nem Baum im Wasser 
zerschellt. Nee, die eigentliche Steuerung gehört in einen µC mit 
Programm im Flash, eingeschaltetem Watchdog und Startupzeiten im Bereich 
von ner halben Sekunde oder weniger - und mit Interrupts, die SOFORT 
reagieren können - nicht erst, wenn der Scheduler im BS meint, alle 
anderen Threads hätten grad mal nix zu tun.

W.S.

von Stephan R (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Warum sind führende Programmiersprachen wohl genormt?

Heißt das, es gibt keinen C- Code, der nur von einem 32Bit, nicht aber 
von einem 8-Bit- µC ausgeführt werden kann?



W.S. schrieb:
> Board mit
> nem Linux drauf taugt nicht für eine Fahrzeug-Automatisierung

Also eine Schnittstelle schaffen, mit der der für die Steuerung 
verwendete µC mit dem GUI-Board redet?

von Peter D. (peda)


Lesenswert?

Stephan R schrieb:
> worin unterscheidet sich ein C- Programm, das für einen AVR geschrieben
> wurde, von einem, das für einen z.B. ARM geschrieben wurde

Grob gesagt, ein ARM hat viel mehr Stellschrauben. 10 Init-Zeilen auf 
dem AVR entsprechen etwa 100 Init-Zeilen auf dem ARM.

Der Hauptunterschied ist aber das IO-Handling.
Bei den ARM hat sich allgemein das Set-/Clear-Register Schema 
durchgesetzt. Um einen Pin zu löschen, muß man ein 1-Bit an die Stelle 
im Clearregister schreiben.
Ein gleichzeitiges Setzen und Löschen einzelner Pins ist also nicht 
möglich.

Manche ARM können das allerdings doch. Die haben ein Maskenregister, wo 
man zuerst die zu ändernden Pins einträgt und danach mit dem 
Datenregister nur diese Pins ändert.

Aber mit nem OS sieht das eh alles ganz anders aus, da kannst Du 
nirgends direkt zugreifen.

von Eumel (Gast)


Lesenswert?

Stephan R schrieb:
> Heißt das, es gibt keinen C- Code, der nur von einem 32Bit, nicht aber
> von einem 8-Bit- µC ausgeführt werden kann?

So ist es. Solange beide genügend Speicher haben.

von Gerd B. (bertr2d2) Benutzerseite


Lesenswert?

W.S. schrieb:
> Stephan R schrieb:
>> sondern schwört auf embedded Linux Boards

> Bedenke mal, daß so ein BS gebootet sein will und das dauert bei fast
> jedem Linux ne halbe Ewigkeit, also 20 Sekunden mindestens. In der
> Zwischenzeit ist dein Boot gestrandet oder vor nem Baum im Wasser
> zerschellt.

Nun, es gibt auch Boards, die wesentlich schneller Booten (0,69s):

http://www.embeddedarm.com/products/board-detail.php?product=TS-7800

> Nee, die eigentliche Steuerung gehört in einen µC mit
> Programm im Flash, eingeschaltetem Watchdog und Startupzeiten im Bereich
> von ner halben Sekunde oder weniger - und mit Interrupts, die SOFORT
> reagieren können - nicht erst, wenn der Scheduler im BS meint, alle
> anderen Threads hätten grad mal nix zu tun.

Dazu gibt es Realtime Kernel oder man benutzt die Vorteile aus beiden
Welten wie beim AM335x des BeagleBones z.B.. Der hat zwei PRUSS an
Board, die unabhängig vom Hauptprozessor laufen. Siehe z.B.:
http://www.phytec.de/fileadmin/user_upload/pictures/Produkte/Microcontroller-Boards/D_phyCORE-AM335x.pdf

Gruß

Gerd

von Alexander F. (alexf91)


Lesenswert?

Hier wird ja immer wieder geschrieben, dass man Echtzeitanwendungen eher 
in einen eigenen Controller auslagern soll und das Board nur als HMI 
benutzen soll.
Wie sieht es eigentlich mit RTLinux oder der RTAI Erweiterung aus?
Hat damit jemand Erfahrung?

Für einen Anfänger ist das wahrscheinlich dennoch nicht geeignet.

von MCUA (Gast)


Lesenswert?

>ist Echtzeitverarbeitung gefragt. Deine Hardware könnte maximal als
>Human-Maschine-Interface dienen und zum Anzeigen/Parametrieren. Die
>Steuerung buw. Sensor/Aktor Schnittstelle sollte auf jeden Fall
>Echtzeitfähig sein.
Die X86-Hardware wäre wohl auch echtzeitfähig, wenn die darauf laufende 
Softw. (bsp. langsames OS) das nicht bremsen würde.


>Der Hauptunterschied ist aber das IO-Handling.
>Bei den ARM hat sich allgemein das Set-/Clear-Register Schema
>durchgesetzt. Um einen Pin zu löschen, muß man ein 1-Bit an die Stelle
>im Clearregister schreiben.
>Ein gleichzeitiges Setzen und Löschen einzelner Pins ist also nicht
>möglich.
Direkt beschreibbare Out-Reg sind eigentlich Std. (bei jedem uC).
Set-/Clear-Register bieten (sofern vorhanden) zusätzliche Möglichkeiten.

von Arc N. (arc)


Lesenswert?

Alexander F. schrieb:
> Hier wird ja immer wieder geschrieben, dass man Echtzeitanwendungen eher
> in einen eigenen Controller auslagern soll und das Board nur als HMI
> benutzen soll.
> Wie sieht es eigentlich mit RTLinux oder der RTAI Erweiterung aus?

Es kommt auf die Echtzeitanforderungen an.

https://www.osadl.org/Single-View.111+M5f6c0e654c7.0.html
http://www.osadl.org/Continuous-latency-monitoring.qa-farm-monitoring.0.html
(da werden u.a. aktuelle Systeme mit i3, i7 gemessen)

von Phantomix X. (phantomix)


Lesenswert?

Eumel schrieb:
> Stephan R schrieb:
>> Heißt das, es gibt keinen C- Code, der nur von einem 32Bit, nicht aber
>> von einem 8-Bit- µC ausgeführt werden kann?
>
> So ist es. Solange beide genügend Speicher haben.



Hallo!

Hier muss ich mal gewaltig widersprechen. Mir fallen aus dem Stand 5 
Beispiele ein, die auf 32Bit anders sind als auf 8Bit:

- Integer-Größe: Lest bitte mal nach, wie breit ein "int" bei 
AVR/8051/... ist. Auf 32 Bit ARM ist das 32 Bit.

- Endianness: Ist die Architektur Little- oder Big Endian? Bei 32 Bit 
ist es meist festgelegt, bei 8 Bit Systemen macht das jeder Compiler 
anders (GCC macht bspw little endian)

- Alignment von Variablen; packed structures, usw., bspw:
1
{
2
  uint8_t bla;
3
  uint32_t foo;
4
  uint8_t bar;
5
}
Der ARM GCC fügt defaultmäßig nach dem ersten uint8_t drei Padding-Bytes 
ein! Der AVR GCC macht das nicht.

- ist ein "char" signed oder unsigned?

- Die Größe eines "Byte":
In C ist ja ein "char" definiert als "1 Byte". Bei TMS320F2808 bspw. ist 
ein Byte aber 16 Bit breit.

---


Dazu kommen noch die ganzen Compilererweiterungen wie Interrupts, Pragma 
usw.
Dazu kommen noch schrottige Compiler wie der 8051 Keil, die nicht 
richtig mit dem Stack umgehen und stattdessen Overlays machen, mit 
Funktionspointern nicht gut klar kommen usw usf.

Von einem "über alles erhabenen" C-Standard kann also keine Rede sein. 
Man muss genau wissen was man tut, und lieber ein Paar Stunden/Tage mehr 
in eine Portierung stecken als zu wenig.

von W.S. (Gast)


Lesenswert?

Phantomix Ximotnahp schrieb:
> Hier muss ich mal gewaltig widersprechen.

Ja, ich dir auch:
> - Integer-Größe:
Du weißt ganz genau, daß ein int garantiert 16 Bit haben muß und man 
garantiert nicht erwarten darf, daß es mehr als 16 Bit hat (obwohl es 
das bei einigen µC haben kann - aber eben nicht muss).

Wer nicht doof herumprogrammiert, der wird von einem int also niemals 
mehr als 16 Bit erwarten und bei größerem Bedarf eben long wählen.

> - Endianness:
Das hat mit der Prozessorbitbreite nur wenig zu tun, bei 8 Bit Systemen 
wird dies eher von der Breite der Zeigerregister (PC, SP, usw.) 
abhängen.

Ansonsten geb ich dir voll Recht: Eumel liegt schlichtweg falsch mit 
seiner Ansicht und der Glaube, daß gerade im µC-Bereich irgendwelcher 
C-Code lustig portierbar sei, ist ein Fehlglaube. Das Einzige, was 
wirklich portierbar ist, sind Funktionsprinzipien, also wie man als 
Programmierer eine Aufgabe angeht und löst - und das ist sogar über 
relativ viele verschiedene Programmiersprachen portierbar.

W.S.

von Peter D. (peda)


Lesenswert?

Phantomix Ximotnahp schrieb:
> Dazu kommen noch schrottige Compiler wie der 8051 Keil, die nicht
> richtig mit dem Stack umgehen und stattdessen Overlays machen, mit
> Funktionspointern nicht gut klar kommen usw usf.

Was ist daran schrottig, wenn der Compiler effizienten Code erzeugt, 
anstatt mit Push/Pop-Orgien Flash und CPU-Zeit zu verschleudern.
Der 8051 läuft typisch nicht mit 1GHz und hat auch keine 1MB Flash. 
Daher muß man schon etwas auf Effizienz achten.
Rekursive Funktionen braucht man eh kaum, und falls doch, dann sagt man 
es einfach dem Compiler, aber dann nur für diese Funktion.

Ich hatte mit Funktionspointern noch nie Probleme, welche C51-Version 
meinst Du denn?
Selbst mit Funktionspointern macht er den Calling-Tree für das Overlay 
korrekt.

von Arc N. (arc)


Lesenswert?

Phantomix Ximotnahp schrieb:
> Eumel schrieb:
>> Stephan R schrieb:
>>> Heißt das, es gibt keinen C- Code, der nur von einem 32Bit, nicht aber
>>> von einem 8-Bit- µC ausgeführt werden kann?
>>
>> So ist es. Solange beide genügend Speicher haben.
>
>
>
> Hallo!
>
> Hier muss ich mal gewaltig widersprechen. Mir fallen aus dem Stand 5
> Beispiele ein, die auf 32Bit anders sind als auf 8Bit:

Die irrelevant sind. Alle bekannten Controller sind turing-vollständig 
d.h. könnten alles berechnen was auch eine universelle Turing-Maschine 
berechnen könnte. Gleiches gilt für die gängigen Programmiersprachen. 
Anders formuliert heißt das nichts anderes als die sich alle gegenseitig 
emulieren könnten.

von MarcVonWindscooting (Gast)


Lesenswert?

Arc Net schrieb:
> Anders formuliert heißt das nichts anderes als die sich alle gegenseitig
> emulieren könnten.

Die berechnen aber meines Wissens in der Realit"at nicht mathematische 
Funktionen. Emulier mal mit 'nem 8-bitter den atomaren Zugriff auf den 
Speicher bei 'nem 32-Bitter und Interrupts, hehe!

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Embedded Linux erfordert zuerst mal eines: Sich in die Treiber 
Schreiberei einzuarbeiten, wenn das auf deinem Board nicht schon vorher 
geschehen ist.
Am besten macht man das, indem man sich vorhandene Treiber anschaut und 
für seine Zwecke umstrickt. Programme im Userspace dürfen genauso wie 
bei Windows erstmal nicht an irgendwelcher Hardware rumfummeln, ohne das 
das geordnete Wege geht über /dev , /proc oder über seine neueren 
Nachfahren wie /udev.
Die Programmierung von Userspace Programmen unterscheidet sich dann 
nicht gross von jedem anderen Betriebssystem.

Und warum sollte ein millionenfach auf Routern, Set-Top Boxen usw. 
eingesetztes BS wie Linux nicht für ein Wasserfahrzeug gehen?

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.