Attualmente sto sviluppando un controller per un'applicazione industriale che prende gli input di dati da vari sensori e interfacce (ethernet, seriali, ecc.), esegue un minimo di elaborazione e adatta le uscite alle interfacce e ai sistemi meccanici secondo necessità.
Il dispositivo, un controller di automazione B & X20, utilizza un semplice RTOS che funziona su un single-core con supporto multi-processing, ma non multi-threading. Non è possibile generare nuovi processi durante l'operazione. Gli interrupt non sono supportati. Piuttosto, per assegnare la priorità alle attività, ogni processo viene assegnato durante la programmazione di una frequenza per l'esecuzione completa del suo ciclo principale e lo scheduler fa del suo meglio per aderire a questo programma in tempo reale, generando eccezioni in caso di violazioni temporali.
Per massimizzare la concorrenza tra le varie funzioni, ognuna delle quali ha requisiti di temporizzazione diversi, ho diversi piccoli processi (ad esempio, un lettore / scrittore ethernet, un apriporta / chiudi valvola) per lo più associati 1-a-1 con input / output funzioni. Per soddisfare i requisiti di I / O in tempo reale, l'elaborazione intensiva dei dati viene eseguita in processi separati, prescritti per ridurre la frequenza di pianificazione.
La comunicazione tra processi avviene attraverso variabili globali ai rispettivi processi, sincronizzati tramite semafori.
Il dispositivo consente di scrivere programmi in C e C ++. Quando dovrei preferire scrivere con uno o l'altro? Non supponiamo alcuna differenza significativa nelle prestazioni.
Il mio pensiero:
Mentre il mio istinto è di preferire l'incapsulamento del C ++, ciascuno dei miei processi è sufficientemente semplice in modo tale che l'uso di OOP lascerebbe in esso un solo oggetto. La codifica in C ++ sembra quindi aggiungere un ulteriore livello di comunicazione inutile dall'oggetto al processo: le variabili globali che non esisterebbero sarebbero state l'oggetto di calcolo senza dimora. Inoltre, poiché l'intero processo contiene un oggetto, sembra che non vi sia alcun beneficio di incapsulamento, dal momento che non è rimasto nulla da incapsulare.
Allo stesso tempo, ho l'istinto che anche i programmi semplici dovrebbero essere programmati con OOP quando possibile per consentire flessibilità e crescita.
Ho scoperto una situazione in cui l'oggettificazione introduce livelli di struttura non necessari a un programma semplice? O è preferibile aderire a OOP ogni volta che l'hardware lo consente?