Skip to content

Journal

Matthieu Pizenberg edited this page Jun 8, 2019 · 6 revisions

Journal de bord ;)

2019-06-08 Led roulette !

Aujourd'hui, on fait marcher les leds de la discovery ! On se base sur une "crate" (bibliothèque Rust) auxiliaire fournie par le tuto, qui apporte une interface haut-niveau pour allumer les leds et mettre le programme en pause. On peut très facilement faire clignoter une led avec le programme suivant.

use aux5::{entry, prelude::*, Delay, Leds};

#[entry]
fn main() -> ! {
    let (mut delay, mut leds): (Delay, Leds) = aux5::init();
    loop {
        leds[0].on();
        delay.delay_ms(500);

        leds[0].off();
        delay.delay_ms(500);
    }
}

Et maintenant que l'on sait faire ça, on peut coder une "led-roulette" comme dans le gif animé ci-dessous.

led roulette gif

Le programme est super simple. On peut représenter l'état des leds par le schéma suivant.

led roulette

On a un compteur incrémental circulaire modulo 8 (0, ... 7, 0, ...). Quand le compteur vaut (i), on allume la led numéro (i) et on éteint la led numéro (i-2), le tout modulo 8. Mais comme on manipule des indices, de type usize, on peut pas faire (i-2) car ca risque de faire un nombre négatif. Comme tout est modulo 8, c'est simple il suffit de faire (i+6) % 8 et le tour est joué. On a donc le code suivant.

let (mut delay, mut leds): (Delay, Leds) = aux5::init();
let period = 100_u16;
let mut i = 0;
loop {
	leds[i].on();
	leds[(i + 6) % 8].off();
	delay.delay_ms(period);
	i = (i + 1) % 8;
}

2019-06-06 Réception de la STM32F3Discovery !

C'est parti pour la première partie du guide : compiler et flasher un programme en mode debug. Biensur, il faut tous les outils nécessaires au préalable, pour ça, il faut suivre le tuto. Mais ensuite, voici un petit récapitulatif des trucs utiles.

# Start openocd in the /tmp/ directory (in another terminal)
cd /tmp
openocd -f interface/stlink-v2-1.cfg -f target/stm32f3x.cfg

# Build in cross compilation (from project root)
cargo build --target thumbv7em-none-eabihf

# Start GDB with our program
arm-none-eabi-gdb -q target/thumbv7em-none-eabihf/debug/led-roulette

# Connect to the openocd gdb server running by default on port 3333
(gdb) target remote :3333

# Flash the device
(gdb) load

# Change to src or asm text layout
(gdb) layout src
(gdb) layout asm

# Navigating
(gdb) break main    # Add a break point
(gdb) continue      # Run until break point
(gdb) next          # Next line without entering function
(gdb) step          # Next line, can enter in functions
(gdb) stepi         # Next assembly instruction
(gdb) finish        # Run until return current function

# Print some info
(gdb) print x       # Print value
(gdb) print &x      # Print reference
(gdb) info locals   # Print all local variables
(gdb) info args     # Print all function arguments
(gdb) backtrace     # Print backtrace

# Reset microcontroller and stop at entry point
(gdb) monitor reset halt

# Quit GDB
(gdb) quit

2019-06-05 Vidéo sur enseigner Rust et l'embarqué

Je suis tombé sur cette vidéo : OxidizeConf: Oliver Scherer - War stories from teaching Rust and Embedded simultaneously qui est un retour d'expérience sur l'enseignement de Rust et de l'embarqué, super bien présenté. Son user sur github : oli-obk.

2019-06-04 Commande de matos

Pour pouvoir me lancer dans l'embarqué en Rust, j'ai commandé le matos nécessaire pour suivre le tuto Embedded Rust Discovery Book. A savoir,

Ça devrait arriver assez vite :)

stm32f3discovery

2019-06-02 Création de 7TRobot

Par motivation après avoir regardé la coupe de France de robotique, j'ai créé cette organisation 7TRobot, avec un wiki pour détailler les aventures à venir !