From 1405e6268293c317b165d31dcdd9a8dc90b57ac1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20J=C3=B6rdens?= Date: Mon, 26 Aug 2019 13:47:42 +0000 Subject: [PATCH] rtfm: 0.5 beta --- Cargo.lock | 82 ++++++++++++++++++++++++++++++++++++++++++++++------- Cargo.toml | 3 +- src/main.rs | 69 +++++++++++++++++++++----------------------- 3 files changed, 105 insertions(+), 49 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6c5cf68..4272b94 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -98,23 +98,25 @@ dependencies = [ [[package]] name = "cortex-m-rtfm" -version = "0.5.0-alpha.1" -source = "git+https://github.com/japaric/cortex-m-rtfm?rev=fafeeb2#fafeeb27270ef24fc3852711c6032f65aa7dbcc0" +version = "0.5.0-beta.1" +source = "git+https://github.com/japaric/cortex-m-rtfm?rev=da675dc3#da675dc35f373a38ab97cdc9813162e9d87507f9" dependencies = [ - "cortex-m 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cortex-m 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "cortex-m-rt 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", - "cortex-m-rtfm-macros 0.5.0-alpha.1 (git+https://github.com/japaric/cortex-m-rtfm?rev=fafeeb2)", + "cortex-m-rtfm-macros 0.5.0-alpha.1 (git+https://github.com/japaric/cortex-m-rtfm?rev=da675dc3)", "heapless 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rtfm-core 0.3.0-alpha.1 (git+https://github.com/japaric/rtfm-core)", ] [[package]] name = "cortex-m-rtfm-macros" version = "0.5.0-alpha.1" -source = "git+https://github.com/japaric/cortex-m-rtfm?rev=fafeeb2#fafeeb27270ef24fc3852711c6032f65aa7dbcc0" +source = "git+https://github.com/japaric/cortex-m-rtfm?rev=da675dc3#da675dc35f373a38ab97cdc9813162e9d87507f9" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.42 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rtfm-syntax 0.4.0-alpha.1 (git+https://github.com/japaric/rtfm-syntax)", + "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -159,6 +161,11 @@ dependencies = [ "hash32 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "indexmap" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "log" version = "0.4.8" @@ -189,6 +196,14 @@ dependencies = [ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "proc-macro2" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "quote" version = "0.6.13" @@ -197,6 +212,14 @@ dependencies = [ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "quote" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "r0" version = "0.2.2" @@ -223,6 +246,21 @@ name = "rand_core" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "rtfm-core" +version = "0.3.0-alpha.1" +source = "git+https://github.com/japaric/rtfm-core#22006d11dbd9b4997954ad57dcb02e1914c70e2c" + +[[package]] +name = "rtfm-syntax" +version = "0.4.0-alpha.1" +source = "git+https://github.com/japaric/rtfm-syntax#563efaffd9fad355d7a1334a3a54c902cd62f463" +dependencies = [ + "indexmap 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "rustc_version" version = "0.2.3" @@ -288,7 +326,7 @@ dependencies = [ "cortex-m 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "cortex-m-log 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "cortex-m-rt 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", - "cortex-m-rtfm 0.5.0-alpha.1 (git+https://github.com/japaric/cortex-m-rtfm?rev=fafeeb2)", + "cortex-m-rtfm 0.5.0-beta.1 (git+https://github.com/japaric/cortex-m-rtfm?rev=da675dc3)", "heapless 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "panic-semihosting 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -324,6 +362,16 @@ dependencies = [ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "syn" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "typenum" version = "1.10.0" @@ -334,6 +382,11 @@ name = "unicode-xid" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "unicode-xid" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "vcell" version = "0.1.0" @@ -360,22 +413,27 @@ dependencies = [ "checksum cortex-m-log 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "167217c5c34005115400577223f6cb6403dabc13e44ee3af2582ef7ec5965abf" "checksum cortex-m-rt 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "17805910e3ecf029bdbfcc42b7384d9e3d9e5626153fa810002c1ef9839338ac" "checksum cortex-m-rt-macros 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d7ae692573e0acccb1579fef1abf5a5bf1d2f3f0149a22b16870ec9309aee25f" -"checksum cortex-m-rtfm 0.5.0-alpha.1 (git+https://github.com/japaric/cortex-m-rtfm?rev=fafeeb2)" = "" -"checksum cortex-m-rtfm-macros 0.5.0-alpha.1 (git+https://github.com/japaric/cortex-m-rtfm?rev=fafeeb2)" = "" +"checksum cortex-m-rtfm 0.5.0-beta.1 (git+https://github.com/japaric/cortex-m-rtfm?rev=da675dc3)" = "" +"checksum cortex-m-rtfm-macros 0.5.0-alpha.1 (git+https://github.com/japaric/cortex-m-rtfm?rev=da675dc3)" = "" "checksum cortex-m-semihosting 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "165f3f86f4d1031351a6c9dc8d5a3f8fae2050f9dd6ef925e3d675c232cc0e46" "checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" "checksum generic-array 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0ed1e761351b56f54eb9dcd0cfaca9fd0daecf93918e1cfc01c8a3d26ee7adcd" "checksum hash32 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "12d790435639c06a7b798af9e1e331ae245b7ef915b92f70a39b4cf8c00686af" "checksum heapless 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c6c7ce2e47016f34d17acbf2fe5f9e0337ea59d2ab8ceecd9405b2336ffaca9b" +"checksum indexmap 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a4d6d89e0948bf10c08b9ecc8ac5b83f07f857ebe2c0cbe38de15b4e4f510356" "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" "checksum managed 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fdcec5e97041c7f0f1c5b7d93f12e57293c831c646f4cc7a5db59460c7ea8de6" "checksum panic-semihosting 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "97cfb37c1d3b5f0cc18bf14485018cccd13bdd24f7b5bfd456c1d8760afef824" "checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +"checksum proc-macro2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4c5c2380ae88876faae57698be9e9775e3544decad214599c3a6266cca6ac802" "checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" +"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" "checksum r0 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2a38df5b15c8d5c7e8654189744d8e396bddc18ad48041a500ce52d6948941f" "checksum rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9" "checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" "checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" +"checksum rtfm-core 0.3.0-alpha.1 (git+https://github.com/japaric/rtfm-core)" = "" +"checksum rtfm-syntax 0.4.0-alpha.1 (git+https://github.com/japaric/rtfm-syntax)" = "" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" @@ -386,7 +444,9 @@ dependencies = [ "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" "checksum stm32h7 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "63001af508d3332bd2dd81d4212b69e10f45e8f5435b7dab5def36178b9c1c17" "checksum syn 0.15.42 (registry+https://github.com/rust-lang/crates.io-index)" = "eadc09306ca51a40555dd6fc2b415538e9e18bc9f870e47b1a524a79fe2dcf5e" +"checksum syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf" "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" "checksum vcell 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "45c297f0afb6928cd08ab1ff9d95e99392595ea25ae1b5ecf822ff8764e57a0d" "checksum volatile-register 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0d67cb4616d99b940db1d6bd28844ff97108b498a6ca850e5b6191a532063286" diff --git a/Cargo.toml b/Cargo.toml index 6e3e9d6..b89bc05 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -53,8 +53,7 @@ default-features = false [dependencies.cortex-m-rtfm] git = "https://github.com/japaric/cortex-m-rtfm" -rev = "fafeeb2" -features = ["timer-queue"] +rev = "da675dc3" [features] semihosting = ["panic-semihosting", "cortex-m-log/semihosting"] diff --git a/src/main.rs b/src/main.rs index 37faf99..ac9a075 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,6 +26,7 @@ use core::fmt::Write; use cortex_m_rt::exception; use stm32h7::stm32h743 as pac; use heapless::{String, Vec, consts::*}; +use rtfm::cyccnt::{Instant, U32Ext as _}; use smoltcp as net; @@ -519,28 +520,24 @@ macro_rules! create_socket { ) } -#[rtfm::app(device = stm32h7::stm32h743)] +#[rtfm::app(device = stm32h7::stm32h743, peripherals = true, monotonic = rtfm::cyccnt::CYCCNT)] const APP: () = { - static SPI: (pac::SPI1, pac::SPI2, pac::SPI4, pac::SPI5) = (); - static ETHERNET_PERIPH: (pac::ETHERNET_MAC, pac::ETHERNET_DMA, pac::ETHERNET_MTL) = (); - - static mut IIR_STATE: [IIRState; 2] = [[0.; 5]; 2]; - static mut IIR_CH: [IIR; 2] = [ - IIR { - ba: [0., 0., 0., 0., 0.], - y_offset: 0., - y_min: -SCALE - 1., - y_max: SCALE - }; - 2]; - - #[link_section = ".sram3.eth"] - static mut ETHERNET: eth::Device = eth::Device::new(); + struct Resources { + spi: (pac::SPI1, pac::SPI2, pac::SPI4, pac::SPI5), + ethernet_periph: (pac::ETHERNET_MAC, pac::ETHERNET_DMA, pac::ETHERNET_MTL), + #[init([[0.; 5]; 2])] + iir_state: [IIRState; 2], + #[init([IIR { ba: [0., 0., 0., 0., 0.], y_offset: 0., y_min: -SCALE - 1., y_max: SCALE }; 2])] + iir_ch: [IIR; 2], + #[link_section = ".sram3.eth"] + #[init(eth::Device::new())] + ethernet: eth::Device, + } #[init(schedule = [tick])] fn init(c: init::Context) -> init::LateResources { let dp = c.device; - let cp = c.core; + let mut cp = c.core; let rcc = dp.RCC; rcc_reset(&rcc); @@ -617,25 +614,25 @@ const APP: () = { eth::setup(&rcc, &dp.SYSCFG); eth::setup_pins(&dp.GPIOA, &dp.GPIOB, &dp.GPIOC, &dp.GPIOG); - // c.schedule.tick(rtfm::Instant::now()).unwrap(); + // c.schedule.tick(Instant::now()).unwrap(); init::LateResources { - SPI: (spi1, spi2, spi4, spi5), - ETHERNET_PERIPH: (dp.ETHERNET_MAC, dp.ETHERNET_DMA, dp.ETHERNET_MTL), + spi: (spi1, spi2, spi4, spi5), + ethernet_periph: (dp.ETHERNET_MAC, dp.ETHERNET_DMA, dp.ETHERNET_MTL), } } - #[idle(resources = [ETHERNET, ETHERNET_PERIPH, IIR_STATE, IIR_CH])] + #[idle(resources = [ethernet, ethernet_periph, iir_state, iir_ch])] fn idle(c: idle::Context) -> ! { - let (MAC, DMA, MTL) = c.resources.ETHERNET_PERIPH; + let (MAC, DMA, MTL) = c.resources.ethernet_periph; let hardware_addr = net::wire::EthernetAddress([0x10, 0xE2, 0xD5, 0x00, 0x03, 0x00]); - unsafe { c.resources.ETHERNET.init(hardware_addr, MAC, DMA, MTL) }; + unsafe { c.resources.ethernet.init(hardware_addr, MAC, DMA, MTL) }; let mut neighbor_cache_storage = [None; 8]; let neighbor_cache = net::iface::NeighborCache::new(&mut neighbor_cache_storage[..]); let local_addr = net::wire::IpAddress::v4(10, 0, 16, 99); let mut ip_addrs = [net::wire::IpCidr::new(local_addr, 24)]; - let mut iface = net::iface::EthernetInterfaceBuilder::new(c.resources.ETHERNET) + let mut iface = net::iface::EthernetInterfaceBuilder::new(c.resources.ethernet) .ethernet_addr(hardware_addr) .neighbor_cache(neighbor_cache) .ip_addrs(&mut ip_addrs[..]) @@ -647,14 +644,14 @@ const APP: () = { // unsafe { eth::enable_interrupt(DMA); } let mut time = 0u32; - let mut next_ms = rtfm::Instant::now(); + let mut next_ms = Instant::now(); next_ms += 200_000.cycles(); let mut server = Server::new(); - let mut iir_state: resources::IIR_STATE = c.resources.IIR_STATE; - let mut iir_ch: resources::IIR_CH = c.resources.IIR_CH; + let mut iir_state: resources::iir_state = c.resources.iir_state; + let mut iir_ch: resources::iir_ch = c.resources.iir_ch; loop { // if ETHERNET_PENDING.swap(false, Ordering::Relaxed) { } - let tick = rtfm::Instant::now() > next_ms; + let tick = Instant::now() > next_ms; if tick { next_ms += 200_000.cycles(); time += 1; @@ -711,13 +708,13 @@ const APP: () = { // seems to slow it down // #[link_section = ".data.spi1"] - #[interrupt(resources = [SPI, IIR_STATE, IIR_CH], priority = 2)] - fn SPI1(c: SPI1::Context) { + #[task(binds = SPI1, resources = [spi, iir_state, iir_ch], priority = 2)] + fn spi1(c: spi1::Context) { #[cfg(feature = "bkpt")] cortex_m::asm::bkpt(); - let (spi1, spi2, spi4, spi5) = c.resources.SPI; - let iir_ch = c.resources.IIR_CH; - let mut iir_state = c.resources.IIR_STATE; + let (spi1, spi2, spi4, spi5) = c.resources.spi; + let iir_ch = c.resources.iir_ch; + let iir_state = c.resources.iir_state; let sr = spi1.sr.read(); if sr.eot().bit_is_set() { @@ -751,9 +748,9 @@ const APP: () = { } /* - #[interrupt(resources = [ETHERNET_PERIPH], priority = 1)] - fn ETH(c: ETH::Context) { - let dma = &c.resources.ETHERNET_PERIPH.1; + #[task(binds = ETH, resources = [ethernet_periph], priority = 1)] + fn eth(c: eth::Context) { + let dma = &c.resources.ethernet_periph.1; ETHERNET_PENDING.store(true, Ordering::Relaxed); unsafe { eth::interrupt_handler(dma) } }