Skip to content

Commit 9f2661f

Browse files
Merge pull request #323 from braun-embedded/dependencies
Upgrade to latest RTIC alpha
2 parents cee8a00 + eadfa05 commit 9f2661f

File tree

5 files changed

+59
-57
lines changed

5 files changed

+59
-57
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ default-features = false
6363

6464

6565
[dev-dependencies]
66-
cortex-m-rtic = "=0.6.0-alpha.4"
66+
cortex-m-rtic = "=0.6.0-alpha.5"
6767

6868
[dev-dependencies.panic-rtt-target]
6969
version = "0.1.1"

examples/i2c_master_slave.rs

+17-15
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,18 @@ mod app {
1515

1616
const ADDRESS: u8 = 0x24;
1717

18-
#[resources]
19-
struct Resources {
20-
#[lock_free]
21-
i2c_master: i2c::Master<I2C0, Enabled<PhantomData<IOSC>>, Enabled>,
18+
#[shared]
19+
struct Shared {}
2220

23-
#[lock_free]
21+
#[local]
22+
struct Local {
23+
i2c_master: i2c::Master<I2C0, Enabled<PhantomData<IOSC>>, Enabled>,
2424
i2c_slave: i2c::Slave<I2C0, Enabled<PhantomData<IOSC>>, Enabled>,
25+
i2c_data: Option<u8>,
2526
}
2627

2728
#[init]
28-
fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
29+
fn init(_: init::Context) -> (Shared, Local, init::Monotonics) {
2930
rtt_target::rtt_init_print!();
3031

3132
let p = Peripherals::take().unwrap();
@@ -57,19 +58,21 @@ mod app {
5758
});
5859

5960
(
60-
init::LateResources {
61+
Shared {},
62+
Local {
6163
i2c_master: i2c.master,
6264
i2c_slave: i2c.slave,
65+
i2c_data: None,
6366
},
6467
init::Monotonics(),
6568
)
6669
}
6770

68-
#[idle(resources = [i2c_master])]
71+
#[idle(local = [i2c_master])]
6972
fn idle(context: idle::Context) -> ! {
7073
let data = 0x14;
7174

72-
let i2c = context.resources.i2c_master;
75+
let i2c = context.local.i2c_master;
7376

7477
loop {
7578
rprintln!("MASTER: Starting I2C transaction...");
@@ -92,11 +95,10 @@ mod app {
9295
}
9396
}
9497

95-
#[task(binds = I2C0, resources = [i2c_slave])]
98+
#[task(binds = I2C0, local = [i2c_slave, i2c_data])]
9699
fn i2c0(context: i2c0::Context) {
97-
static mut DATA: Option<u8> = None;
98-
99-
let i2c = context.resources.i2c_slave;
100+
let i2c = context.local.i2c_slave;
101+
let data = context.local.i2c_data;
100102

101103
rprintln!("SLAVE: Handling interrupt...");
102104

@@ -111,15 +113,15 @@ mod app {
111113
Ok(i2c::slave::State::RxReady(i2c)) => {
112114
rprintln!("SLAVE: Ready to receive.");
113115

114-
*DATA = Some(i2c.read().unwrap());
116+
*data = Some(i2c.read().unwrap());
115117
i2c.ack().unwrap();
116118

117119
rprintln!("SLAVE: Received and ack'ed.");
118120
}
119121
Ok(i2c::slave::State::TxReady(i2c)) => {
120122
rprintln!("SLAVE: Ready to transmit.");
121123

122-
if let Some(data) = *DATA {
124+
if let Some(data) = *data {
123125
i2c.transmit(data << 1).unwrap();
124126
rprintln!("SLAVE: Transmitted.");
125127
}

examples/i2c_master_slave_dma.rs

+21-21
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,23 @@ mod app {
1414

1515
const ADDRESS: u8 = 0x24;
1616

17-
#[resources]
18-
struct Resources {
19-
#[lock_free]
17+
#[shared]
18+
struct Shared {}
19+
20+
#[local]
21+
struct Local {
2022
i2c_master:
2123
Option<i2c::Master<I2C0, Enabled<PhantomData<IOSC>>, Enabled>>,
22-
23-
#[lock_free]
2424
i2c_slave: i2c::Slave<I2C0, Enabled<PhantomData<IOSC>>, Enabled>,
25+
i2c_data: Option<u8>,
2526

26-
#[lock_free]
2727
dma_channel:
2828
Option<dma::Channel<<I2C0 as i2c::Instance>::MstChannel, Enabled>>,
29+
dma_rx_buf: [u8; 1],
2930
}
3031

3132
#[init]
32-
fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
33+
fn init(_: init::Context) -> (Shared, Local, init::Monotonics) {
3334
rtt_target::rtt_init_print!();
3435

3536
let p = Peripherals::take().unwrap();
@@ -62,27 +63,27 @@ mod app {
6263
});
6364

6465
(
65-
init::LateResources {
66+
Shared {},
67+
Local {
6668
i2c_master: Some(i2c.master),
6769
i2c_slave: i2c.slave,
70+
i2c_data: None,
6871
dma_channel: Some(dma.channels.channel15),
72+
dma_rx_buf: [0; 1],
6973
},
7074
init::Monotonics(),
7175
)
7276
}
7377

74-
#[idle(resources = [i2c_master, dma_channel])]
78+
#[idle(local = [i2c_master, dma_channel, dma_rx_buf])]
7579
fn idle(context: idle::Context) -> ! {
76-
static mut RX_BUF: [u8; 1] = [0; 1];
77-
78-
let mut rx_buf = &mut RX_BUF[..];
79-
8080
static TX_BUF: [u8; 1] = [0x14];
8181

8282
// The `.take().unwrap()` workaround is required, because RTIC won't
8383
// allow us to move resources in here directly.
84-
let mut i2c = context.resources.i2c_master.take().unwrap();
85-
let mut channel = context.resources.dma_channel.take().unwrap();
84+
let mut i2c = context.local.i2c_master.take().unwrap();
85+
let mut channel = context.local.dma_channel.take().unwrap();
86+
let mut rx_buf = &mut context.local.dma_rx_buf[..];
8687

8788
loop {
8889
rprintln!("MASTER: Starting I2C transaction...");
@@ -122,11 +123,10 @@ mod app {
122123
}
123124
}
124125

125-
#[task(binds = I2C0, resources = [i2c_slave])]
126+
#[task(binds = I2C0, local = [i2c_slave, i2c_data])]
126127
fn i2c0(context: i2c0::Context) {
127-
static mut DATA: Option<u8> = None;
128-
129-
let i2c = context.resources.i2c_slave;
128+
let i2c = context.local.i2c_slave;
129+
let data = context.local.i2c_data;
130130

131131
rprintln!("SLAVE: Handling interrupt...");
132132

@@ -141,15 +141,15 @@ mod app {
141141
Ok(i2c::slave::State::RxReady(i2c)) => {
142142
rprintln!("SLAVE: Ready to receive.");
143143

144-
*DATA = Some(i2c.read().unwrap());
144+
*data = Some(i2c.read().unwrap());
145145
i2c.ack().unwrap();
146146

147147
rprintln!("SLAVE: Received and ack'ed.");
148148
}
149149
Ok(i2c::slave::State::TxReady(i2c)) => {
150150
rprintln!("SLAVE: Ready to transmit.");
151151

152-
if let Some(data) = *DATA {
152+
if let Some(data) = *data {
153153
i2c.transmit(data << 1).unwrap();
154154
rprintln!("SLAVE: Transmitted.");
155155
}

examples/pinint.rs

+10-10
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,17 @@ mod app {
1313
Peripherals,
1414
};
1515

16-
#[resources]
17-
struct Resources {
18-
#[lock_free]
19-
int: pinint::Interrupt<PININT0, PIO0_4, Enabled>,
16+
#[shared]
17+
struct Shared {}
2018

21-
#[lock_free]
19+
#[local]
20+
struct Local {
21+
int: pinint::Interrupt<PININT0, PIO0_4, Enabled>,
2222
led: GpioPin<PIO1_1, Output>,
2323
}
2424

2525
#[init]
26-
fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
26+
fn init(_: init::Context) -> (Shared, Local, init::Monotonics) {
2727
rtt_target::rtt_init_print!();
2828

2929
let p = Peripherals::take().unwrap();
@@ -45,7 +45,7 @@ mod app {
4545
.pio1_1
4646
.into_output_pin(gpio.tokens.pio1_1, Level::High);
4747

48-
(init::LateResources { int, led }, init::Monotonics())
48+
(Shared {}, Local { int, led }, init::Monotonics())
4949
}
5050

5151
#[idle]
@@ -57,10 +57,10 @@ mod app {
5757
}
5858
}
5959

60-
#[task(binds = PIN_INT0, resources = [int, led])]
60+
#[task(binds = PIN_INT0, local = [int, led])]
6161
fn pinint0(context: pinint0::Context) {
62-
let int = context.resources.int;
63-
let led = context.resources.led;
62+
let int = context.local.int;
63+
let led = context.local.led;
6464

6565
led.toggle();
6666

examples/rtic.rs

+10-10
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,17 @@ mod app {
1313
Peripherals,
1414
};
1515

16-
#[resources]
17-
struct Resources {
18-
#[lock_free]
19-
delay: Delay,
16+
#[shared]
17+
struct Shared {}
2018

21-
#[lock_free]
19+
#[local]
20+
struct Local {
21+
delay: Delay,
2222
led: GpioPin<PIO1_1, Output>,
2323
}
2424

2525
#[init]
26-
fn init(cx: init::Context) -> (init::LateResources, init::Monotonics) {
26+
fn init(cx: init::Context) -> (Shared, Local, init::Monotonics) {
2727
rtt_target::rtt_init_print!();
2828

2929
let p = Peripherals::take().unwrap();
@@ -38,13 +38,13 @@ mod app {
3838
.pio1_1
3939
.into_output_pin(gpio.tokens.pio1_1, Level::Low);
4040

41-
(init::LateResources { delay, led }, init::Monotonics())
41+
(Shared {}, Local { delay, led }, init::Monotonics())
4242
}
4343

44-
#[idle(resources = [delay, led])]
44+
#[idle(local = [delay, led])]
4545
fn idle(cx: idle::Context) -> ! {
46-
let delay = cx.resources.delay;
47-
let led = cx.resources.led;
46+
let delay = cx.local.delay;
47+
let led = cx.local.led;
4848

4949
loop {
5050
led.set_high();

0 commit comments

Comments
 (0)