diff --git a/cortex-m-rt/CHANGELOG.md b/cortex-m-rt/CHANGELOG.md index b85dcb9c..fe639fb8 100644 --- a/cortex-m-rt/CHANGELOG.md +++ b/cortex-m-rt/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +- Mark `pre_init` as deprecated - Add `set_msplim` feature to conditionally set the MSPLIM register at device reset ([#580]). diff --git a/cortex-m-rt/examples/pre_init.rs b/cortex-m-rt/examples/pre_init.rs index 2c931bbd..935db547 100644 --- a/cortex-m-rt/examples/pre_init.rs +++ b/cortex-m-rt/examples/pre_init.rs @@ -7,11 +7,16 @@ extern crate cortex_m_rt as rt; extern crate panic_halt; -use rt::{entry, pre_init}; +use rt::entry; -#[pre_init] -unsafe fn disable_watchdog() { - // Do what you need to disable the watchdog. +// This function is called before the RAM is initialized. +// For example, it can be used to disable the watchdog. +core::arch::global_asm! { + r#" +__pre_init: + // Do what you need to do before RAM is initialized. + bx lr + "# } #[entry] diff --git a/cortex-m-rt/macros/src/lib.rs b/cortex-m-rt/macros/src/lib.rs index 4962552c..18b3f595 100644 --- a/cortex-m-rt/macros/src/lib.rs +++ b/cortex-m-rt/macros/src/lib.rs @@ -628,6 +628,7 @@ pub fn interrupt(args: TokenStream, input: TokenStream) -> TokenStream { } #[proc_macro_attribute] +#[deprecated(note = "Use core::arch::global_asm! to define the __pre_init function instead")] pub fn pre_init(args: TokenStream, input: TokenStream) -> TokenStream { let f = parse_macro_input!(input as ItemFn); diff --git a/cortex-m-rt/tests/compile-fail/pre-init-args.rs b/cortex-m-rt/tests/compile-fail/pre-init-args.rs index 97325897..c35472e6 100644 --- a/cortex-m-rt/tests/compile-fail/pre-init-args.rs +++ b/cortex-m-rt/tests/compile-fail/pre-init-args.rs @@ -7,6 +7,7 @@ extern crate panic_halt; use cortex_m_rt::{entry, pre_init}; #[pre_init(foo)] //~ ERROR This attribute accepts no arguments + //~^ WARNING Use core::arch::global_asm! to define the __pre_init function instead unsafe fn foo() {} #[entry] diff --git a/cortex-m-rt/tests/compile-fail/pre-init-bad-signature-1.rs b/cortex-m-rt/tests/compile-fail/pre-init-bad-signature-1.rs index 0c3c4768..5ca919ac 100644 --- a/cortex-m-rt/tests/compile-fail/pre-init-bad-signature-1.rs +++ b/cortex-m-rt/tests/compile-fail/pre-init-bad-signature-1.rs @@ -6,7 +6,7 @@ extern crate panic_halt; use cortex_m_rt::{entry, pre_init}; -#[pre_init] +#[pre_init] //~ WARNING Use core::arch::global_asm! to define the __pre_init function instead fn foo() {} //~^ ERROR `#[pre_init]` function must have signature `unsafe fn()` diff --git a/cortex-m-rt/tests/compile-fail/pre-init-bad-signature-2.rs b/cortex-m-rt/tests/compile-fail/pre-init-bad-signature-2.rs index f41d0329..7a830d20 100644 --- a/cortex-m-rt/tests/compile-fail/pre-init-bad-signature-2.rs +++ b/cortex-m-rt/tests/compile-fail/pre-init-bad-signature-2.rs @@ -6,7 +6,7 @@ extern crate panic_halt; use cortex_m_rt::{entry, pre_init}; -#[pre_init] +#[pre_init] //~ WARNING Use core::arch::global_asm! to define the __pre_init function instead unsafe fn foo(undef: i32) {} //~^ ERROR `#[pre_init]` function must have signature `unsafe fn()` diff --git a/cortex-m-rt/tests/compile-fail/pre-init-twice.rs b/cortex-m-rt/tests/compile-fail/pre-init-twice.rs index 74a3f6bd..b6e2326d 100644 --- a/cortex-m-rt/tests/compile-fail/pre-init-twice.rs +++ b/cortex-m-rt/tests/compile-fail/pre-init-twice.rs @@ -6,10 +6,11 @@ extern crate panic_halt; use cortex_m_rt::{entry, pre_init}; -#[pre_init] +#[pre_init] //~ WARNING Use core::arch::global_asm! to define the __pre_init function instead unsafe fn foo() {} #[pre_init] //~ ERROR symbol `__pre_init` is already defined + //~^ WARNING Use core::arch::global_asm! to define the __pre_init function instead unsafe fn bar() {} #[entry]