Skip to content

Unsoundness when using shared resources in exception handlers on ARMv6-M #1088

@FeldrinH

Description

@FeldrinH

According to the RTIC documentation (source):

[...] ARMv6-M/ARMv8-M-base cannot have tasks with shared resources bound to exception handlers, as these cannot be masked in hardware.

This sentence seems to indicate that on ARMv6-M something like this won't work (and indeed on RTIC v1 this produced a compile-time error):

#[task(binds = SysTick, shared = [peripheral])]
fn watchdog(mut ctx: watchdog::Context) {
    ctx.shared.peripheral.lock(|p| p.whatever());
}

However, with RTIC v2 this code compiles just fine on thumbv6m-none-eabi with the thumbv6-backend feature enabled.

What's going on here? Is there a bug in RTIC? Is there outdated info in the documentation? Am I just completely misunderstanding something?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions