Commit 95e6b2aa authored by Per's avatar Per

bare 7

parent 6268c73d
//! Serial interface loopback
#![deny(unsafe_code)]
//#![deny(warnings)]
#![deny(warnings)]
#![feature(proc_macro)]
#![no_std]
......@@ -18,7 +18,7 @@ use f4::prelude::*;
use f4::Serial;
use f4::time::Hertz;
use heapless::Vec;
use rtfm::{app, Threshold};
use rtfm::app;
// CONFIGURATION
const BAUD_RATE: Hertz = Hertz(115_200);
......@@ -42,17 +42,21 @@ fn init(p: init::Peripherals) {
let mut buffer: Vec<u8, [u8; 4]> = Vec::new();
loop {
if let Ok(byte) = block!(serial.read()) {
buffer.push(byte);
ipln!("Ok {:?}", buffer);
block!(serial.write(byte)).ok();
} else {
ipln!("Error");
match block!(serial.read()) {
Ok(byte) => {
let _ = buffer.push(byte);
ipln!("Ok {:?}", buffer);
block!(serial.write(byte)).ok();
}
Err(err) => {
ipln!("Error {:?}", err);
p.USART2.dr.read(); // clear the error by reading the data register
}
}
}
}
// IDLE LOOP
// We will never reach `idle` since we burn the CPU arduino style :)
fn idle() -> ! {
// Sleep
loop {
......@@ -76,27 +80,41 @@ fn idle() -> ! {
//
// you should now be able to send data and recive an echo from the MCU
//
// try sending: "abcd"
// try sending: "abcd" as a single sequence (set the option No end in moserial)
// (don't send the quation marks, just abcd)
//
// what did you receive
// what did you receive, and what was the output of the ITM trace
// ** your answer here **
//
// try changing to baud rate 57600, both in the program and terminal settings,
// recompile and run
// now try sending 'a', 'b', 'c', 'd' character by character
// (just send the characters not the single quotes and commas)
// what did you receive, and what was the output of the ITM trace
// ** your answer here **
//
// try sending: "abcd"
// what did you receive
// why did the transmission fail? (hint, think about timing...)
// ** your answer here **
//
// commit your answers as (bare7_1)
// commit your answers (bare7_1)
//
// 2. now stress the buffer lengt sending a sequence
// 'a', 'b', 'c', 'd', 'e' character by character
// what did you receive, and what was the output of the ITM trace
// ** your answer here **
//
// 2. now you should make a buffer
// static BUFFER [u8;8]
// to store the incoming data
// if done correctly you see an evedince of Rust's memory safety
// the buffer will be saturated (all elements occupied)
// but no buffer owerwrite will occur (outside the buffer)
//
// this can be done in a resource
// app
// your job now is to check the API of `heapless`
// https://docs.rs/heapless/0.2.1/heapless/
//
// when the buffer is full you should write the complete buffer
// and catch the case we are trying to write to a full buffer
// and write a suiteble error message
//
// commit your answers (bare7_2)
//
// !!!!! NOTICE !!!!!
// here we are not solving the underlying problem
// we are just mitigating the effects
// in bare8 we will se how to use interrupts for reliable
// high-speed communictation
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment