diff options
author | 2022-01-21 21:49:45 +0100 | |
---|---|---|
committer | 2022-03-02 13:23:47 +0100 | |
commit | f86dab5ff3e9c35e9e68b798b5c4faa08d390085 (patch) | |
tree | 29fb04ead5d62bf1409729d06611dcf8a08b849f /macros/src/codegen/assertions.rs | |
parent | 790b074e18e13370aaab698587d6f0fa262aad1d (diff) | |
download | rtic-f86dab5ff3e9c35e9e68b798b5c4faa08d390085.tar.gz rtic-f86dab5ff3e9c35e9e68b798b5c4faa08d390085.tar.zst rtic-f86dab5ff3e9c35e9e68b798b5c4faa08d390085.zip |
Added support for SRP based scheduling for armv6m
Diffstat (limited to 'macros/src/codegen/assertions.rs')
-rw-r--r-- | macros/src/codegen/assertions.rs | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/macros/src/codegen/assertions.rs b/macros/src/codegen/assertions.rs index a8a4491b..36ab0364 100644 --- a/macros/src/codegen/assertions.rs +++ b/macros/src/codegen/assertions.rs @@ -1,11 +1,11 @@ use proc_macro2::TokenStream as TokenStream2; use quote::quote; -use crate::analyze::Analysis; +use crate::{analyze::Analysis, check::Extra, codegen::util}; use rtic_syntax::ast::App; /// Generates compile-time assertions that check that types implement the `Send` / `Sync` traits -pub fn codegen(app: &App, analysis: &Analysis) -> Vec<TokenStream2> { +pub fn codegen(app: &App, analysis: &Analysis, extra: &Extra) -> Vec<TokenStream2> { let mut stmts = vec![]; for ty in &analysis.send_types { @@ -21,5 +21,33 @@ pub fn codegen(app: &App, analysis: &Analysis) -> Vec<TokenStream2> { stmts.push(quote!(rtic::export::assert_monotonic::<#ty>();)); } + let device = &extra.device; + let arm_v6_checks: Vec<_> = app + .hardware_tasks + .iter() + .filter_map(|(_, task)| { + if !util::is_exception(&task.args.binds) { + let interrupt_name = &task.args.binds; + Some(quote!(assert!((#device::Interrupt::#interrupt_name as u32) < 32);)) + } else { + None + } + }) + .collect(); + + let const_check = quote! { + const _CONST_CHECK: () = { + if rtic::export::is_armv6() { + #(#arm_v6_checks)* + } else { + // TODO: Add armv7 checks here + } + }; + + let _ = _CONST_CHECK; + }; + + stmts.push(const_check); + stmts } |