| /* |
| * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| |
| #ifndef _PICO_RUNTIME_H |
| #define _PICO_RUNTIME_H |
| |
| #include "pico.h" |
| |
| /** \file runtime.h |
| * \defgroup pico_runtime pico_runtime |
| * \brief Basic runtime support for running pre-main initializers provided by other libraries |
| * |
| * This library aggregates the following other libraries (if available): |
| * |
| * * \ref hardware_uart |
| * * \ref pico_bit_ops |
| * * \ref pico_divider |
| * * \ref pico_double |
| * * \ref pico_int64_ops |
| * * \ref pico_float |
| * * \ref pico_malloc |
| * * \ref pico_mem_ops |
| * * \ref pico_atomic |
| * * \ref pico_cxx_options |
| * * \ref pico_standard_binary_info |
| * * \ref pico_standard_link |
| * * \ref pico_sync |
| * * \ref pico_printf |
| * * \ref pico_crt0 |
| * * \ref pico_clib_interface |
| * * \ref pico_stdio |
| */ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #ifndef __ASSEMBLER__ |
| /*! \brief Run all the initializations that are usually called by crt0.S before entering main |
| * \ingroup pico_runtime |
| * |
| * This method is useful to set up the runtime after performing a watchdog or powman reboot |
| * via scratch vector. |
| */ |
| void runtime_init(void); |
| |
| void runtime_run_initializers(void); |
| void runtime_run_per_core_initializers(void); |
| |
| #ifndef PICO_RUNTIME_INIT_FUNC |
| #define PICO_RUNTIME_INIT_FUNC(func, priority_string) uintptr_t __used __attribute__((section(".preinit_array." priority_string))) __pre_init_ ## func = (uintptr_t)(void (*)(void)) (func) |
| #endif |
| #else |
| #ifndef PICO_RUNTIME_INIT_FUNC |
| #define PICO_RUNTIME_INIT_FUNC(func, priority_string) __pre_init func, priority_string |
| #endif |
| #endif |
| #define PICO_RUNTIME_INIT_FUNC_HW(func, priority_string) PICO_RUNTIME_INIT_FUNC(func, priority_string) |
| #define PICO_RUNTIME_INIT_FUNC_RUNTIME(func, priority_string) PICO_RUNTIME_INIT_FUNC(func, priority_string) |
| // priority strings are of the form 00000->99999; we want the per core stuff all at the end, so prefix with ZZZZZ which is clearly after 99999 |
| #define PICO_RUNTIME_INIT_FUNC_PER_CORE(func, priority_string) PICO_RUNTIME_INIT_FUNC(func, "ZZZZZ." priority_string) |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif |