Commit graph

256 commits

Author SHA1 Message Date
bors[bot]
b87fca3d21
Merge #652
652: Remove use of basepri register on thumbv8m.base r=AfoHT a=neonquill

The basepri register appears to be aviable on thumbv8m.main but not thumbv8m.base. At the very least, attempting to compile against a Cortex-M23 based Microchip ATSAML10E16A generates an error:

```
error[E0432]: unresolved import `cortex_m::register::basepri`
  --> /Users/dwatson/.cargo/registry/src/github.com-1ecc6299db9ec823/cortex-m-rtic-1.1.3/src/export.rs:25:5
   |
25 | use cortex_m::register::basepri;
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^ no `basepri` in `register`
```

I wasn't sure if it made more sense to replace the `armv7m` config flag with something related to basepri availability or to get closer to matching the cortex-m use of several architecture specific flags. In the end i chose to make the minimal change possible and just narrowed the existing `thumbv8m` check.

Context:
[cortex-m:src/register/mod.rs](4e90862520/src/register/mod.rs (L33)):
```
#[cfg(all(not(armv6m), not(armv8m_base)))]
pub mod basepri;
```

[cortex-m:build.rs](4e90862520/build.rs (L21)):
```
    } else if target.starts_with("thumbv8m.base") {
        println!("cargo:rustc-cfg=cortex_m");
        println!("cargo:rustc-cfg=armv8m");
        println!("cargo:rustc-cfg=armv8m_base");
```

Co-authored-by: David Watson <david@neonquill.com>
2022-07-27 19:15:09 +00:00
David Watson
368ab1d4fb Remove use of basepri register on thumbv8m.base
The basepri register appears to be aviable on thumbv8m.main but not
thumbv8m.base. At the very least, attempting to compile against a
Cortex-M23 based Microchip ATSAML10E16A generates an error:

```
error[E0432]: unresolved import `cortex_m::register::basepri`
  --> /Users/dwatson/.cargo/registry/src/github.com-1ecc6299db9ec823/cortex-m-rtic-1.1.3/src/export.rs:25:5
   |
25 | use cortex_m::register::basepri;
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^ no `basepri` in `register`
```

This is an attempt to account for the fact that thumbv8m.base (M23)
MCUs don't have the BASEPRI register but have more than 32
interrupts. This moves away from the architecture specific config
flags and switches to a more functional flag.

Make the mask size depend on the max interrupt id

Rather than assuming a fixed interrupt count of 32 this code uses an
array of u32 bitmasks to calculate the priority mask. The size of this
array is calculated at compile time based on the size of the largest
interrupt id being used in the target code. For thumbv6m this should
be equivalent to the previous version that used a single u32 mask. For
thumbv8m.base it will be larger depending on the interrupts used.

Don't write 0s to the ISER and ICER registers

Writing 0s to these registers is a no-op. Since these masks should be
calculated at compile time, this conditional should result in writes
being optimized out of the code.

Prevent panic on non-arm targets

Panicking on unknown targets was breaking things like the doc build on
linux. This change should only panic when building on unknown arm
targets.
2022-07-27 21:04:24 +02:00
Gabriel Górski
b4cfc4db84 Fix missing formatting 2022-07-27 20:25:34 +02:00
Gabriel Górski
c6fd3cdd0a Allow custom link_section attributes for late resources
This commit makes RTIC aware of user-provided `link_section` attributes,
letting user override default section mapping.
2022-07-06 17:43:38 +02:00
Emil Fresk
b15bda2d39 Fix clash with defmt 2022-05-24 08:31:31 +02:00
Emil Fresk
cd445165c5 More ergonomic error from static asserts messages 2022-05-17 20:20:59 +02:00
Emil Fresk
e5643ee94e Fixed warning from Rust Analyzer 2022-05-10 13:38:23 +02:00
Emil Fresk
0f8bdbdd3f Added check for resource usage and to generate an compile error for thumbv6 exceptions 2022-04-20 13:05:22 +02:00
Emil Fresk
9f38a39377 Masks take 3 2022-04-20 10:56:13 +02:00
Per Lindgren
f86dab5ff3 Added support for SRP based scheduling for armv6m 2022-03-02 13:23:47 +01:00
Henrik Tjäder
5ed93bd1bf Clippy with pedantic suggestions 2022-02-22 18:56:21 +01:00
Henrik Tjäder
2c14c9bce3 rtic::mutex::prelude::* fixes glob import lint
rtic-core Mutex, Exclusive and multi-lock retained in
old location to not be backwards breaking
2022-02-18 18:42:19 +01:00
Henrik Tjäder
099544f655 Fix/mute clippy errors 2022-02-09 18:58:50 +01:00
Henrik Tjäder
9f54b4aca8 RTIC macro expansion: Try to find target-dir 2022-01-28 21:21:06 +01:00
Henrik Tjäder
c297b4ee8d Clippy lints 2021-12-25 13:17:16 +01:00
Henrik Tjäder
8c8f7f12c3 Idle: Switch to NOP instead of WFI
Add example how to get old WFI behaviour
2021-12-14 22:18:17 +01:00
Henrik Tjäder
3741d431be Remove #[deny(warnings)], but deny warnings for CI 2021-11-25 10:46:29 +01:00
Henrik Tjäder
2e5c6f8e36 Docs: add RTIC logo 2021-11-25 10:06:58 +01:00
Emil Fresk
6f2aa08910 Better errors on when missing to lock shared resources 2021-11-11 14:22:47 +01:00
bors[bot]
b4929032d5
Merge #547
547: New monotonic trait r=AfoHT a=korken89



Co-authored-by: Emil Fresk <emil.fresk@gmail.com>
2021-11-09 10:15:11 +00:00
bors[bot]
4f3c5baf49
Merge #549
549: fix #543 r=korken89 a=andrewgazelka

The remaining PR to fix #543 alongside https://github.com/rtic-rs/rtic-syntax/pull/58

Co-authored-by: Andrew Gazelka <andrew.gazelka@gmail.com>
2021-11-09 09:52:28 +00:00
Emil Fresk
0dcb0c4e49 New monotonic trait working 2021-11-09 10:20:43 +01:00
Henrik Tjäder
03af9b1994 Match new rtic-syntax naming of shared and local 2021-11-07 00:42:57 +01:00
Andrew Gazelka
fb092aa65a
fix #543 2021-11-03 13:01:53 -07:00
Emil Fresk
50017b96f0 Fixed aliasing in lock impl 2021-11-03 08:27:05 +01:00
Emil Fresk
d3d66c97ae Cleanup of resource initialization, no need to dereference 2021-11-03 08:26:45 +01:00
Emil Fresk
8065d741ac Fixed aliasing issue due to RacyCell implementation 2021-11-02 13:41:12 +01:00
Emil Fresk
7c6588e6bd Fix export of SYST 2021-09-28 10:38:22 +02:00
Emil Fresk
9a0d27a91e Updated codegen for the updated syntax (default monotonic priority) 2021-09-27 12:10:42 +02:00
Emil Fresk
b71df58f2f The great docs update 2021-09-23 16:11:04 +02:00
bors[bot]
bf9df9fe73
Merge #525
525: Cleanup export and actually use rtic::export, made fn init inline r=perlindgren a=korken89



Co-authored-by: Emil Fresk <emil.fresk@gmail.com>
2021-09-14 17:17:33 +00:00
Emil Fresk
addb086070 Cleanup export and actually use rtic::export, made fn init inline 2021-09-14 16:13:28 +02:00
Jorge Aparicio
38bd29779e style fix 2021-08-31 19:53:55 +02:00
Jorge Aparicio
1a49d67490 validate unused dispatchers
closes #521
2021-08-31 19:50:50 +02:00
bors[bot]
22ec841ee1
Merge #516
516: More rustanalyzer lint fixes r=korken89 a=korken89

Found some more

Co-authored-by: Emil Fresk <emil.fresk@gmail.com>
2021-08-20 07:27:07 +00:00
Emil Fresk
52dc324aa7 More rustanalyzer lint fixes 2021-08-20 09:21:02 +02:00
datdenkikniet
cdbd8a2ced Use mark_internal_name by default for methods in util to make usage of these functions more straightforward.
fq_ident is always internal

rq_ident is always internal

monotonic_ident is always internal

inputs_ident is always internal

local_resources_ident is always internal

shared_resources_ident is always internal

monotonic_instants_ident is always internal

tq_ident is always internal

timer_queue_marker_ident is always internal

static_shared_resource_ident is always internal

static_local_resource_ident is always internal

declared_static_local_resource_ident is always internal

Only names, not idents, are now marked as internal

Use same rtic internal everywhere
2021-08-20 08:12:13 +02:00
Henrik Tjäder
018e4a121f Silence rust-analyzer warnings on internal types 2021-08-19 13:02:17 +02:00
Emil Fresk
13f7516a4d Fixed some lints from Rust Analyzer with experimental proc-macros 2021-08-19 09:49:00 +02:00
Emil Fresk
bc3eb5c547 Remove linked list impl - use heapless, linked list init now const fn 2021-08-16 15:38:31 +02:00
Alex Crawford
5f395658f0 Propogate the task attributes to the spawn handles
This allows tasks to be gated by `cfg` attributes when also using
monotonics. For example:

```rust
#[cfg(feature = "logging")]
#[task(shared = [logger])]
fn logger_init(mut cx: logger_init::Context) {
    /* ... */
}
```

Without this change, the reschedule_at() implementation is
unconditionally included even though it references the SpawnHandle from
its task module, which is _conditionally_ included. This resulted in
compiler errors like the following:

```
error[E0433]: failed to resolve: use of undeclared crate or module `logger_init`
   --> src/main.rs:243:8
    |
243 |     fn logger_init(mut cx: logger_init::Context) {
    |        ^^^^^^^^^^^ use of undeclared crate or module `logger_init`
```
2021-07-22 01:00:57 -07:00
Jorge Aparicio
18880406cb use tuple struct syntax for Monotonics everywhere 2021-07-21 10:14:00 +02:00
Andrey Zgarbul
e4319de3d5 const generics 2021-07-09 18:44:19 +03:00
Emil Fresk
8f37043782 Cleanup from review (needs releases to compile) 2021-07-08 23:18:44 +02:00
Emil Fresk
98d2af9d73 Fixing tests 2021-07-07 23:07:09 +02:00
Emil Fresk
d7393c5b27 Full local resource syntax working 2021-07-07 21:04:31 +02:00
Emil Fresk
ef5307d83a Minimal app now compiles 2021-07-06 22:47:48 +02:00
Emil Fresk
3f85cb5caf Started work 2021-07-05 21:40:01 +02:00
Emil Fresk
c17348d290 Prepare release alpha.4 2021-05-27 18:10:24 +02:00
Emil Fresk
b4509bdbfe Flattened the _ out of it 2021-05-06 19:40:37 +02:00