Arduino unit testing

Abbiamo già introdotto alcune tecnologie accessorie intorno al C++ e ad Arduino. Tra le evoluzioni più interessanti di cui vogliamo parlare oggi, c’è ne sono alcune che potremo sfruttare per Arduino, ed altre che sono meri spunti di riflessione. Andiamo ad iniziare!

Prima di partire

Se, come il sottoscritto, non usate il C++ da parecchio tempo, è bene sapere che il linguaggio è evoluto. Vi suggeriamo quindi alcuni riferimenti notevoli:

  1. Il sito web di Stroustrup, il creatore del linguaggio
  2. Questo breve tutorial sui template, la cui sintassi si è evoluta nel tempo.
  3. Una puntatina sui namespaces, tanto cari a linguaggi come Python, Perl, Java, Ruby

Spunti di Riflessione

I Template del C++ possono essere usati per organizzare una meta-programmazione in stile funzionale. Purtroppo la sintassi risultante è un tripudio di simboli < e >, ed è quasi illeggibile. Tra le applicazioni immediate, vi è la posibilità di creare alberi di ricerca bilanciati su dati statici, altrimenti detti compile-time binary search trees.

Se vi trovate a vostro agio con l’argomento, potete dare un occhio a questo metaprogramming framework, che però ci sembra troppo grande per il piccolo Arduino Uno con soli 32Kb di spazio per il codice :)

Strumenti ed idee

Ecco un elenco di strumenti e approcci che ci sono stati molto utili durante il design dei nostri progetti Arduino.

CxxUnit

Vi suggeriamo di imitare la strutturazione della libreria Aiko, che viene fornita  con un makefile in grado di effettuare test di non regressione senza l’ausilio dell’arduino IDE. E’ sufficente avere il gcc e python (o perl). Aiko sfrutta una libreria chiamata CxxTest. L’effeto è duplice: il codice viene strutturato in modo modulare, senza dipendere dalle API specifiche di Arduino, e risulta più corretto dal punto di vista formale, con la dichiarazione dei prototipi delle relative funzioni.

L’idea geniale di Aiko è di aver creato dei piccoli mokup (“stubs”) che consentono di compilare includendo delle versioni “finte” dei file di inclusioni dell’arduino ide:

Vi suggeriamo di “rubare” dal progetto Aiko gli stubs e di estenderli secondo le vostre necessità. Se CxxTest non vi piace c’è anche CppTest

Stack Usage

Abbiamo detto in un precedente articolo che il C++ non ha un gestore di memoria. In realtà lo stack può essere visto come un sistema di gestione automatica della memoria. E’ possibile quindi servirsene in modo molto aggressivo, strutturando il programma a funzioni chiuse ed isolate.

Ecco un esempio:

[cpp]typedef enum StatusLedsPinEnum { led1=2, led2=3, led3=4, led4=5, led5=6, LastLed=led5 }; … void knightRider(){ static StatusLedsPinEnum currentLedPosition = led1; static StatusLedsPinEnum prevcurrentLedPosition = led5; // Turn on it digitalWrite(currentLedPosition,HIGH); // Turn off the last digitalWrite( prevcurrentLedPosition,LOW);

prevcurrentLedPosition = nextLedPosition(prevcurrentLedPosition); currentLedPosition = nextLedPosition(currentLedPosition); } [/cpp]

Questa funzione si serve di variabili static private (quindi visibili solo a lei) e di una tipizzazione molto forte, per creare una callback che accenda alternativamente alcuni led.

E con questo abbiamo concluso questa rapida serie di suggerimenti architetturali per Arduino!

Altri Riferimenti

Posts in arduino

  1. Arduino: un successo italiano // Feb 12, 2011
  2. Arduino: partire da zero // Feb 24, 2011
  3. Arduino vede e provvede // Mar 3, 2011
  4. Arduino la sfida embedded per il Software Architect // Mar 10, 2011
  5. Arduino unit testing // Mar 14, 2011
  6. Arduino Car // Mar 20, 2011
  7. Arduino Ruby Development // Jul 18, 2011
  8. Arduino Launches New Stuff! // Sep 18, 2011
  9. Arduino Esplora // Dec 13, 2012
  10. Arduino EggBoxLamp // Oct 9, 2014
  11. Arduino Real Time EggBox // Oct 15, 2014
  12. Arduino programmazione avanzata: makefile! // Jan 26, 2015
  13. Arduino Starter Kit: Prime impressioni // Feb 15, 2015
  14. Egg box con Sensore sonico // Mar 27, 2015
  15. Arduino Stereo sid // Apr 6, 2015
  16. RaspberryPi 2: The perfect box for your backpack // Jul 21, 2015
  17. BBC Micro bit: first look // Sep 8, 2016
  18. Arduino Real Time OS Evolution (flash news) // Feb 7, 2017
  19. Arduino timers // Nov 12, 2023
  20. Stero Sid 2.0.7: Arduino 2.x and license update // Nov 12, 2023
  21. Arduino uno e ATMega328p // Nov 16, 2023
  22. Arduino UNO R4 Wi-Fi // Nov 27, 2023
  23. Small Lamp NoeBoat with Arduino Uno R3 and FreeRTOS // Dec 3, 2023
  24. Arduino, open source e futuro // Dec 24, 2023