Site icon AranaCorp

Tutoriel 201 – Bienvenue chez Vous

Le tutoriel Welcome Home (Bienvenue Chez Vous) est la suite logique d’un tutoriel Hello World qui permet de vérifier que l’environnement fonctionne correctement et qui permet de faire vivre des notions fondamentales du système étudié.

Un tutoriel après Hello World

Après Hello World, vos Premiers Pas vous mènent forcément à Bienvenue chez vous.

Le traditionnel Hello World permet de vérifier que l’environnement de développement (compilateur, éditeur, installation Python, etc.) fonctionne correctement. Ils existent également un grand nombre de tutoriels Premiers Pas pour étudier un sujet particulier.

Le traditionnel Hello World permet de vérifier que l’environnement de développement fonctionne correctement : compilateur installé, interpréteur Python opérationnel, éditeur configuré, dépendances présentes.
Il valide l’outil, mais il n’enseigne pas encore le système.

À l’autre extrémité, il existe une multitude de tutoriels Premiers Pas qui abordent une fonctionnalité précise : une API, un framework, un composant matériel, une bibliothèque.

Le tutoriel Welcome Home est un tutoriel conceptuel et concret, conçu pour faire vivre ensemble plusieurs notions fondamentales dans un projet unique, cohérent et évolutif. Il ne cherche pas à être exhaustif, mais à donner une vision systémique.

Il s’adresse en priorité à la programmation système, mais le concept est volontairement plus large.

Spécification du tutoriel

La spécification d’un tutoriel Hello World est de vérifier le fonctionnement de la cible ou de l’environnement de travail

La spécification d’un tutoriel Premiers Pas sont d’approfondir un sujet et de l’implémenter en vue de sa compréhension.

Le tutoriel Bienvenue Chez Vous a pour spécification de faire fonctionner un projet complet:

Scenario

Le scénario choisi représente un mini-système embarqué avec entrées, sorties, mémoire, horloge, et interface de communication. On cherche à développer un système activable par une interface, par exemple, via :

Le système peut être activé uniquement si deux conditions sont réunies :

  1. Le bouton (entrée discrète) est maintenu appuyé
  2. Un délai de sécurité stocké en mémoire (EEPROM/ROM) s’est écoulé
  3. Une commande externe (cmd on) est envoyée sur l’interface choisie

Le système simule :

INPUTS MEMORY file.bin OUTPUTS
Discrete (btn)
Analog (sensor)
CPU Discrete state
PWM output
Computer
C
gcc
RTC INTERFACES
computer Serial (socket)

Ce projet illustre ainsi les fondamentaux des systèmes embarqués :

ConceptApplication dans le projet
Variablesétat interne du système
Pointeurs (C)accès aux valeurs, buffers, registres
Chaînes de caractèresprotocole de communication
Fonctionsmodules, périphériques, drivers
Types & taillesuint16, float, conversion analogique
GPIO (entrée)bouton, capteur analogique
GPIO (sortie)LED / PWM
Bus de communicationUART / Socket
EEPROMdonnées persistantes
RTCgestion du temps réel

HelloWorld code C

Test si l’environnement est correct

Dans la bonne arborescence de fichier, créer un fichier helloworld.c à compiler et à lancer pour tester l’environnement d’installation

/**
 * @file helloworld.c
 * @brief Simple Hello World program in C
 * 
 * @compilation:
 *      Win32: gcc helloworld.c -o helloworld.exe ; ./helloworld.exe
 *      Linux/Mac: gcc helloworld.c -o helloworld ; ./helloworld
 */
#include <stdio.h>

// ==================== MAIN ====================
int main() {
    printf("Hello, World!\n");
    return 0;
}

First Steps code C

1-Tâche principale

Test si le système est vivant

Créer ensuite une boucle infini, tâche principale ou tâche de fond, permettant d’incrémenter un compteur et de changer l’état d’une sortie discrète

NB: permet de voir si le système crash, initialise une variable (limite encodage variable), test sortie système vivant

/**
 * @file basic_prgm.c
 * @brief Emulate a basic program (Ctrl+C to stop)
 * 
 * @compilation:
 *      Win32: gcc basic_prgm.c -o basic_prgm.exe ; ./basic_prgm.exe 
 *             ./run.bat basic_prgm.c  
 *      Linux: gcc basic_prgm.c -o basic_prgm ; ./basic_prgm
 *                 ./run.sh basic_prgm.c 
 */
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>

// ==================== GLOBAL ====================
bool state = false;

// ==================== MAIN ====================
int main() {
    //----------------- Initialization -----------------
    char name[] = "PRGM";
    printf("[%s] Initialized\n",name);
    
    //----------------- Main loop -----------------
    uint16_t counter = 0;
    while (1) {
        // Simulate MCU tasks
        if (counter % 10 == 0) {
            state = !state;
            printf("[%s] Main loop running... Counter=%d : %d\n", name, counter, state);
        }
        counter++;
    }
    printf("[%s] Exited\n",name);
    return 0;
}

Notions abordée

2- Interface de communication

Créer une interface de base pour le debug, le traitement et l’échange de données

envoi de donnée : permet de comprendre le formatage, l’émission et la réception de paquet de byte

Options:

3- Entrée

4-Sorties

3-EEPROM

acquérir les notions de registre mémoire, opération binaire, conversion de type et adresse

Options:

4-RTC

acquérir les notions de temps réel

Notion abordé

WelcomeHome code C

Une fois ces bases maitrisées, il est possible de les assembler pour concevoir un projet concret, évolutif et maintenable

Applications

Au-delà de la programmation

Le concept WelcomeHome peut s’appliquer à d’autres domaines :

INPUTS MEMORY Database / Cookies OUTPUTS
User actions (click, form)
HTTP requests (GET/POST)
SERVER LOGIC Web page
API response
Server
Python / PHP / JavaScript
HTML / CSS
RTC INTERFACES
Server time
Session expiration
Web browser
REST API
INPUTS MEMORY EEPROM / Flash OUTPUTS
Sensors (analog)
Buttons (digital)
MCU LEDs
Motors / Relays
Microcontroller
Power supply
Clock
RTC INTERFACES
Hardware timer
RTC module
UART / I2C / SPI
INPUTS MEMORY Plans / Measurements OUTPUTS
Raw wood
Dimensions
WORKFLOW Assembled object
Finished piece
Workshop
Hand tools
Machines
TIME INTERFACES
Drying time
Assembly steps
Tools
Jigs
INPUTS MEMORY Experience / Knowledge OUTPUTS
Materials
Constraints
PROCESS Finished object
Skill acquisition
Craftsman
Techniques
Tools
TIME INTERFACES
Learning curve
Iterations
Tools
Environment

Avant d’apprendre un outil, il faut comprendre le système dans lequel il vit.

Quitter la version mobile