aboutsummaryrefslogtreecommitdiff
path: root/examples/late-resources.rs
diff options
context:
space:
mode:
authorJorge Aparicio <jorge@japaric.io>2018-11-03 17:02:41 +0100
committerJorge Aparicio <jorge@japaric.io>2018-11-03 17:16:55 +0100
commitc631049efcadca8b07940c794cce2be58fa48444 (patch)
treef6bd73e5c396fc06072557ee965cc59e9c8e3e9f /examples/late-resources.rs
parent653338e7997a0cdc5deaed98b1bb5f60006717ed (diff)
v0.4.0
closes #32 closes #33
Diffstat (limited to 'examples/late-resources.rs')
-rw-r--r--examples/late-resources.rs86
1 files changed, 0 insertions, 86 deletions
diff --git a/examples/late-resources.rs b/examples/late-resources.rs
deleted file mode 100644
index 3bfc388..0000000
--- a/examples/late-resources.rs
+++ /dev/null
@@ -1,86 +0,0 @@
-//! Demonstrates initialization of resources in `init`.
-#![deny(unsafe_code)]
-#![deny(warnings)]
-#![no_std]
-
-extern crate cortex_m_rtfm as rtfm;
-extern crate stm32f103xx;
-
-use rtfm::{app, Threshold};
-
-app! {
- device: stm32f103xx,
-
- resources: {
- // Usually, resources are initialized with a constant initializer:
- static ON: bool = false;
-
- // However, there are cases where this is not possible or not desired.
- // For example, there may not be a sensible value to use, or the type may
- // not be constructible in a constant (like `Vec`).
- //
- // While it is possible to use an `Option` in some cases, that requires
- // you to properly initialize it and `.unwrap()` it at every use. It
- // also consumes more memory.
- //
- // To solve this, it is possible to defer initialization of resources to
- // `init` by omitting the initializer. Doing that will require `init` to
- // return the values of all "late" resources.
- static IP_ADDRESS: u32;
-
- // PORT is used by 2 tasks, making it a shared resource. This just tests
- // another internal code path and is not important for the example.
- static PORT: u16;
- },
-
- idle: {
- // Test that late resources can be used in idle
- resources: [IP_ADDRESS],
- },
-
- tasks: {
- SYS_TICK: {
- priority: 1,
- path: sys_tick,
- resources: [IP_ADDRESS, PORT, ON],
- },
-
- EXTI0: {
- priority: 2,
- path: exti0,
- resources: [PORT],
- }
- }
-}
-
-// The signature of `init` is now required to have a specific return type.
-fn init(_p: init::Peripherals, _r: init::Resources) -> init::LateResources {
- // `init::Resources` does not contain `IP_ADDRESS`, since it is not yet
- // initialized.
- //_r.IP_ADDRESS; // doesn't compile
-
- // ...obtain value for IP_ADDRESS from EEPROM/DHCP...
- let ip_address = 0x7f000001;
-
- init::LateResources {
- // This struct will contain fields for all resources with omitted
- // initializers.
- IP_ADDRESS: ip_address,
- PORT: 0,
- }
-}
-
-fn sys_tick(_t: &mut Threshold, r: SYS_TICK::Resources) {
- // Other tasks can access late resources like any other, since they are
- // guaranteed to be initialized when tasks are run.
-
- r.IP_ADDRESS;
-}
-
-fn exti0(_t: &mut Threshold, _r: EXTI0::Resources) {}
-
-fn idle(_t: &mut Threshold, _r: idle::Resources) -> ! {
- loop {
- rtfm::wfi();
- }
-}