2009-02-12 3 views
10

Was denkst du sind der Unterschied in der Denkweise zwischen einem Programmierer für eine Desktop-Umgebung (Windows, Linux, was auch immer ...) und jemand arbeitet an einem Embedded-System?Mindset Unterschied zwischen Workstation und Embedded-Programmierer

Ein einfaches Beispiel, das ich denken kann, ist, dass in einer eingebetteten Umgebung, ich immer überprüfen, dass ein Malloc nicht NULL ist. Der meiste Code, den ich gesehen habe, dass Ziel-Desktops ist sicherlich nicht fleißig bei der Überprüfung Malloc Rückgabewert.

Alle anderen Beispiele für Denkweisen Unterschiede?

+0

in eingebetteten Sie printf „mit Lernende“ Die meisten eingebettet sind(). Im allgemeinen Programmieren beginnen Sie bei printf() und arbeiten sich die Abstraktion hinauf. –

Antwort

15

Lustig, dass Sie malloc() speziell in Ihrem Beispiel erwähnen.

In jedem tief eingebetteten Hard-Real-Time-System, an dem ich gearbeitet habe, wird die Speicherzuweisung speziell verwaltet (normalerweise nicht der Heap, sondern feste Speicherpools oder Ähnliches) ... und wenn möglich auch Die gesamte Speicherzuordnung erfolgt während der Initialisierung im Voraus. Dies ist überraschend einfacher, als die meisten Menschen glauben würden.

malloc() ist anfällig für Fragmentierung, ist nicht deterministisch und discriminiert nicht zwischen Speichertypen. Mit Speicherpools können Sie Pools haben, die sich aus superschnellem SRAM, schnellem DRAM, batteriegepuffertem RAM (ich habe es gesehen) usw. gebildet haben.

Es gibt hundert andere Probleme (in Antwort zu Ihrer ursprünglichen Frage), aber Speicherzuweisung ist eine große.

auch:

  • Achtung der/die Kenntnis der Hardware-Plattform
  • nicht automatisch asssuming die Hardware perfekt ist oder auch funktionelle
  • Bewusstsein für bestimmte Sprache apects & Merkmale (z(Ausnahmen in C++)
  • Bewusstsein für CPU-Auslastung und Speichernutzung
  • Bewusstsein für Interrupts, Vorkaufsrecht und die Auswirkungen auf gemeinsame Daten (wo absolut notwendig - die weniger gemeinsamen Daten , desto besser)
  • Die meisten eingebetteten Systeme sind daten-/ereignisgesteuert, im Gegensatz zu abgefragt; es gibt natürlich Ausnahmen
  • Entwickler ziemlich komfortabel mit dem Konzept der Zustandsmaschinen und Stateful-Verhalten/Modellierung
+1

malloc() als schädlich angesehen? – Crashworks

+0

Ich habe eine ganze Reihe von eingebetteten Projekten durchgeführt und nur malloc() in einem verwendet, das unter Embedded DOS lief. Die Überprüfung von malloc() auf null scheint mehr eine DOS-Ära zu sein als eine Embedded-System-Sache, da eingebettete Systeme oft besser mit einem Single- oder Double-Ended-LIFO-Heap-Allokator auskommen (in vielen Fällen kann ein LIFO-Allokator einen bekommen) mit 2-4 Bytes Gesamt-Overhead-System-weit, mit Null Overhead pro Block). – supercat

8

Ich Desktop-Umgebung gibt es die Idee, "Hey, ich kann immer ein Update oder einen Patch veröffentlichen, um dies später zu beheben." Im Embedded Design erhalten Sie mehr "das muss funktionieren, weil wir das Gerät nicht mehr aufrufen oder ein noch längeres Patch-Programm veröffentlichen wollen."

+0

Obwohl die Fähigkeit, Firmware-Updates zu veröffentlichen, die Embedded-Welt in eine Denkweise näher an den Desktop mehr und mehr mit der Zeit bewegt ... –

+0

Vereinbart, können wir dies mit neuen EEPROMs und die Fähigkeit, Flash-Updates zu veröffentlichen. Seit Jahren auf Mainboards zu sehen und wir werden wahrscheinlich bald auf Grafikkarten sehen. Sie können nun eigene Shader programmieren, die nun auf die gfx-Karte übertragen werden. – Suroot

8

Größe zählt

+2

alle Frauen sagen das gleiche ... – rcs20

+0

Größe, Zeit, Speicherzuweisung und Initialisierung. Endlosschleife und Timing müssen beachtet werden. – kapilddit

+0

Komm Leute, wenn du runterstimmst, sag mir warum (besonders Jahre nach der Tat) – KevinDTimm

1

2 Dinge - wie Suroot bereits erwähnt, wenn Sie eine Desktop-Anwendung freigeben, ist es nicht „für immer“, besonders heutzutage sein müssen.

Aber in eingebettet, sobald Sie es "versenden", es ist auf dem Weg zum Mars, so dass Sie nicht in der Lage sein wird, es zurück zu ziehen.

Auch einer der Hauptunterschiede ist, dass Embedded-Programmierer in der Regel viel bewusster über effiziente Code-und Speicherverwaltung sind - Desktops laufen schrecklich Code wirklich schnell, eingebettet nicht.

+0

Ich denke sie haben tatsächlich ein Firmware Update auf den Mars Rovern gemacht. – JeffV

+1

Ich wette, das würdest du einen "intensiven" Moment nennen, während es neu startet ...;) – Brandon

9

Desktop-Programmierer betrachten Ressourcen als praktisch unbegrenzt. Speicher, Rechenleistung, Speicherplatz. Die gehen nie aus. Embedded-Programmierer konzentrieren sich intensiv auf all diese.

Oh, und Embedded-Programmierer müssen sich oft auch Gedanken über Speicherausrichtungsprobleme machen. Desktop-Codierer nicht. Die Arm-Chips kümmern sich. x86-Chips nicht.

+0

Kannst du näher auf die: "Die Arm-Chips achten. X86-Chips nicht." – JeffV

+4

Sicher. Die meisten Nicht-x86-CPUs wie der ARM, der in eingebetteten Systemen so beliebt ist, lesen nur eine ganze Zahl, wenn sie sich auf einer DWORD-Grenze (32-Bit) befindet. Sie werden einen Fehler melden, wenn sie aufgefordert werden, einen nicht ausgerichteten int zu lesen. Das x86 wird glücklich solch ein int lesen, es wird nur ein bisschen langsam sein. –