In vielen Embedded-Anwendungen gibt es einen Kompromiss zwischen dem Code sehr effizient zu machen oder den Code von der spezifischen Systemkonfiguration zu isolieren, um gegen sich ändernde Anforderungen immun zu sein.Wie Sie Ihren eingebetteten C-Code gegen Änderungen der Anforderungen immun machen, ohne zu viel Aufwand und Komplexität zu verursachen?
Welche C-Konstrukte verwenden Sie normalerweise, um das Beste aus beiden Welten zu erreichen (Flexibilität und Rekonfigurierbarkeit ohne Verlust der Effizienz)?
Wenn Sie die Zeit haben, lesen Sie bitte weiter, um genau zu sehen, worüber ich spreche.
Als ich Embedded-Software für Airbag-Controller entwickelte, hatten wir das Problem, dass wir einige Teile des Codes jedes Mal ändern mussten, wenn der Kunde seine Meinung zu den spezifischen Anforderungen änderte. Zum Beispiel hat sich die Kombination von Bedingungen und Ereignissen, die den Einsatz des Airbags auslösen würden, alle paar Wochen während der Entwicklung geändert. Wir hassten es, diesen Code so oft zu ändern.
Damals besuchte ich die Embedded Systems Conference und hörte eine brillante Präsentation von Stephen Mellor mit dem Titel "Mit wechselnden Anforderungen umgehen". Sie können das Papier lesen here (sie machen Sie registrieren, aber es ist kostenlos).
Die Hauptidee davon war, das Kernverhalten in Ihrem Code zu implementieren, aber die spezifischen Details in Form von Daten zu konfigurieren. Die Daten können Sie leicht ändern und sogar im EEPROM oder einem anderen Flash-Bereich programmieren.
Diese Idee klang großartig, um unser Problem zu lösen. Ich teilte das mit meinem Kollegen und wir begannen sofort mit der Überarbeitung einiger SW-Module.
Beim Versuch, diese Idee in unserer Codierung zu verwenden, stießen wir auf einige Schwierigkeiten bei der tatsächlichen Implementierung. Unsere Code-Konstrukte wurden für ein eingeschränktes Embedded-System furchtbar schwer und komplex.
Um dies zu veranschaulichen, werde ich das oben erwähnte Beispiel näher ausführen. Anstatt eine Reihe von if-Anweisungen zu haben, um zu entscheiden, ob die Kombination von Eingängen in einem Zustand war, der eine Airbag-Entfaltung erforderte, wechselten wir zu einer großen Tabelle von Tabellen. Einige der Bedingungen waren nicht trivial, also verwendeten wir viele Funktionszeiger, um viele kleine Hilfsfunktionen aufrufen zu können, die einige der Bedingungen irgendwie lösten. Wir hatten verschiedene Ebenen der Indirektion und alles wurde schwer zu verstehen. Um es kurz zu machen, nutzten wir viel Speicher, Laufzeit und Code-Komplexität. Das Debugging der Sache war auch nicht einfach. Der Chef hat uns einige Dinge geändert, weil die Module zu schwer wurden (und vielleicht hatte er Recht!).
PS: Es gibt eine ähnliche Frage in SO, aber es sieht so aus, als ob der Fokus anders ist. Adapting to meet changing business requirements?
Ihre Einführung ist ziemlich lang und die Frage nicht sehr gut geben ... aber es ist immer noch ein guter. – jpinto3912
Einverstanden. Sie werden wahrscheinlich mehr (und bessere) Antworten erhalten, wenn Sie die Frage ein wenig verschärfen. Mach es einfach zu lesen. Stellen Sie zuerst die Frage, und dann können Sie uns den relevanten Hintergrund geben und alle Details erklären. Nicht jemand möchte einen Roman lesen, bevor er überhaupt herausfindet, was die Frage * ist *) – jalf
Ich denke, der Titel der Frage ist ein bisschen lang: P –