X: u32,
Y: u32,
}
};
}
Если ваша программа получала доступ к периферии в #[init] через переменну device, вам нужно будет добавить peripherals = true в атрибут #[rtic::app], чтобы и дальше получать доступ к периферии через поле device структуры init::Context.
Измените это:
#![allow(unused)]
fn main() {
#[rtic::app(/* .. */)]
const APP: () = {
#[init]
fn init() {
device.SOME_PERIPHERAL.write(something);
}
};
}
На это:
#![allow(unused)]
fn main() {
#[rtic::app(/* .. */, peripherals = true)]
const APP: () = {
#[init]
fn init(cx: init::Context) {
cx.device.SOME_PERIPHERAL.write(something);
}
};
}
Атрибуты #[interrupt] и #[exception] были удалены. Чтобы определять аппаратные задачи в v0.5.x используте атрибут #[task] с аргументом binds.
Измените это:
#![allow(unused)]
fn main() {
#[rtic::app(/* .. */)]
const APP: () = {
#[exception]
fn SVCall() {
#[interrupt]
fn UART0() {
#[task]
fn foo() {
};
}
На это:
#![allow(unused)]
fn main() {
#[rtic::app(/* .. */)]
const APP: () = {
#[task(binds = SVCall)]
fn svcall(cx: svcall::Context) {
#[task(binds = UART0)]
fn uart0(cx: uart0::Context) {
#[task]
fn foo(cx: foo::Context) {
};
}
Интерфейс schedule больше не требует cargo опции timer-queue, которая была удалена. Чтобы использовать интерфес schedule, нужно сначала определить монотонный тамер, который будет использоваьт среды выполнения, с помощью аргумента monotonic атрибута #[rtic::app]. Чтобы продолжить использовать счетчик циклов (CYCCNT) в качестве монотонного таймера, как было в версии v0.4.x, добавьте аргумент monotonic = rtic::cyccnt::CYCCNT в атрибут #[rtic::app].
Также были добавлены типы Duration и Instant, а трейт U32Ext был перемещен в модуль rtic::cyccnt. Этот модуль доступен только на устройствах ARMv7-M+. Удаление timer-queue также возвращает периферию DWT в структуру периферии ядра, включить ее в работу можно внутри init.
Измените это:
#![allow(unused)]
fn main() {
use rtic::{Duration, Instant, U32Ext};
#[rtic::app(/* .. */)]
const APP: () = {
#[task(schedule = [b])]
fn a() {
}
};
}
На это:
#![allow(unused)]
fn main() {
use rtic::cyccnt::{Duration, Instant, U32Ext};
#[rtic::app(/* .. */, monotonic = rtic::cyccnt::CYCCNT)]
const APP: () = {
#[init]
fn init(cx: init::Context) {
cx.core.DWT.enable_cycle_counter();
cx.core.DCB.enable_trace();
}
#[task(schedule = [b])]
fn a(cx: a::Context) {
}
};
}
В этом разделе описано, как обновить приложение, написанное на RTFM v0.5.x на RTIC той же версии. Это необходимо из-за переименования фреймворка в соответствии с RFC #33.
Примечание: Между RTFM v0.5.3 и RTIC v0.5.3 нет разниц в коде, это исключительно изменение имен.
Во-первых, зависимость cortex-m-rtfm должна быть изменена на cortex-m-rtic.
[dependencies]