1use crate::base::*;
2use crate::utils::*;
3use crate::prelude::v1::String;
4
5type Callback = fn();
6
7pub struct FreeRtosHooks {
8 on_assert: Callback,
9}
10
11impl FreeRtosHooks {
12 pub fn set_on_assert(&mut self, c: Callback) {
13 self.on_assert = c;
14 }
15
16 fn do_on_assert(&self) {
17 (self.on_assert)();
18 }
19}
20
21pub static mut FREERTOS_HOOKS: FreeRtosHooks = FreeRtosHooks {
23 on_assert: || {}
24};
25
26#[allow(unused_doc_comments)]
27#[no_mangle]
28pub extern "C" fn vAssertCalled(file_name_ptr: FreeRtosCharPtr, line: FreeRtosUBaseType) {
29 let file_name: String;
30 unsafe {
31 file_name = str_from_c_string(file_name_ptr).unwrap();
32 }
33
34 unsafe { FREERTOS_HOOKS.do_on_assert(); }
35
36 panic!("FreeRTOS ASSERT: {}:{}", file_name, line);
40 }