Bonjour,
Je reviens avec un nouveau super sujet !
Aujourd'hui, le but du jeu est de faire du monitoring de variables sur un système embarqué. Un genre de probe / oscilloscope de variables. Appelons cette classe Probe pour le moment. La partie PC pour faire de l'affichage est OK, ce qui me titille est la manière de récupérer les données. En fait, ce n'est pas le PC qui va envoyer les données, c'est le système embarqué qui va envoyé des données formatées sur une liaison série. L'idée est qu'il aura une liste de variables connues et les valeurs seront envoyées régulièrement.
Mon questionnement est sur la manière de "surveiller" ces variables. Probe exposera des méthodes pour enregistrer des variables à surveiller. Un code tout simple ressemblerait à ça :
Et il affiche bien 42 et 66.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 class Probe { public: void watch(const int& integer) { integer_m = &integer; } void monitor() const { if (integer_m) { std::cout << *integer_m << std::endl; } } private: const int* integer_m = nullptr; }; int main() { Probe probe; int a = 42; probe.watch(a); probe.monitor(); a = 666; probe.monitor(); }
Là où ça se complique, c'est pour surveiller une classe, notamment les champs privés. Prenons cette classe à surveiller :
Comment faire ? Je ne vois pas trop Probe avoir une méthode par type d'objets à supporter. Et je ne vois pas trop non plus Probe est ami avec tout le monde.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 class Translator { public: enum Locale { // ... }; Translator(Locale locale); std::string translate(std::string original); private: Locale locale_m; };
Mon idée serait que la classe Probe reste simple. Elle ne sait faire des watch() que sur des types de bases. Ensuite, chaque classe qui aurait besoin d'être surveiller se verrait adjointe d'une classer helper. Par exemple, TranslatorWatcher. Cette classe serait ami de Translator et serait capable de récupérer les données privées intéressantes, les transformant si besoin pour caler aux capacités de Probe. Je multiplie un peu les classes mais je reste très modulaire.
Qu'en pensez-vous ? Avez-vous de brillantes idées à me communiquer ?
Merci d'avance !![]()
Partager