13#pragma clang diagnostic ignored "-Wempty-translation-unit"
18#if defined(__ARM_EABI__)
22#if defined(OS_USE_OS_APP_CONFIG_H)
23#include <cmsis-plus/os-app-config.h>
30#include <cmsis_device.h>
62#if !defined(OS_INCLUDE_STARTUP_GUARD_CHECKS)
63#define OS_BOOL_STARTUP_GUARD_CHECKS (true)
68#if !defined(OS_INCLUDE_STARTUP_INIT_MULTIPLE_RAM_SECTIONS)
88extern unsigned int __data_regions_array_start;
89extern unsigned int __data_regions_array_end;
90extern unsigned int __bss_regions_array_start;
91extern unsigned int __bss_regions_array_end;
96extern unsigned long int __stack;
99main (
int argc,
char* argv[]);
113 unsigned int* region_end);
128inline __attribute__ ((always_inline))
void
130 unsigned int* region_end)
134 unsigned int* p = region_begin;
135 while (p < region_end)
141inline __attribute__ ((always_inline))
void
146 unsigned int* p = region_begin;
147 while (p < region_end)
162inline __attribute__ ((always_inline))
void
168 for (
int i = 0; i < count; i++)
179 for (
int i = 0; i < count; i++)
192 for (
int i = count; i > 0; i--)
203#if defined(DEBUG) && (OS_BOOL_STARTUP_GUARD_CHECKS)
208#define BSS_GUARD_BAD_VALUE (0xCADEBABA)
210static uint32_t
volatile
211 __attribute__ ((section (
".bss_begin"))) __bss_begin_guard;
212static uint32_t volatile
213 __attribute__ ((section (".bss_end"))) __bss_end_guard;
215#define DATA_GUARD_BAD_VALUE (0xCADEBABA)
216#define DATA_BEGIN_GUARD_VALUE (0x12345678)
217#define DATA_END_GUARD_VALUE (0x98765432)
219static uint32_t
volatile
220 __attribute__ ((section (
".data_begin"))) __data_begin_guard
221 = DATA_BEGIN_GUARD_VALUE;
223static uint32_t volatile
224 __attribute__ ((section (".data_end"))) __data_end_guard
225 = DATA_END_GUARD_VALUE;
240void __attribute__ ((section (
".after_vectors"), noreturn, weak))
262#if defined(DEBUG) && (OS_BOOL_STARTUP_GUARD_CHECKS)
264 __data_begin_guard = DATA_GUARD_BAD_VALUE;
265 __data_end_guard = DATA_GUARD_BAD_VALUE;
269#if !defined(OS_INCLUDE_STARTUP_INIT_MULTIPLE_RAM_SECTIONS)
277 for (
unsigned int* p = &__data_regions_array_start;
278 p < &__data_regions_array_end;)
280 unsigned int* from = (
unsigned int*)(*p++);
281 unsigned int* region_begin = (
unsigned int*)(*p++);
282 unsigned int* region_end = (
unsigned int*)(*p++);
289#if defined(DEBUG) && (OS_BOOL_STARTUP_GUARD_CHECKS)
291 if ((__data_begin_guard != DATA_BEGIN_GUARD_VALUE)
292 || (__data_end_guard != DATA_END_GUARD_VALUE))
302#if defined(DEBUG) && (OS_BOOL_STARTUP_GUARD_CHECKS)
304 __bss_begin_guard = BSS_GUARD_BAD_VALUE;
305 __bss_end_guard = BSS_GUARD_BAD_VALUE;
309#if !defined(OS_INCLUDE_STARTUP_INIT_MULTIPLE_RAM_SECTIONS)
317 for (
unsigned int* p = &__bss_regions_array_start;
318 p < &__bss_regions_array_end;)
320 unsigned int* region_begin = (
unsigned int*)(*p++);
321 unsigned int* region_end = (
unsigned int*)(*p++);
327#if defined(DEBUG) && (OS_BOOL_STARTUP_GUARD_CHECKS)
329 if ((__bss_begin_guard != 0) || (__bss_end_guard != 0))
354 static_cast<size_t> (
reinterpret_cast<char*
> (&
_Heap_Limit)
367#if defined(OS_HAS_INTERRUPTS_STACK)
370 static_cast<size_t> (
reinterpret_cast<char*
> (&
__stack)
375 int code =
main (argc, argv);
385#if !defined(OS_USE_SEMIHOSTING_SYSCALLS)
390#pragma GCC diagnostic push
391#if defined(__clang__)
392#elif defined(__GNUC__)
393#pragma GCC diagnostic ignored "-Wunused-parameter"
405void __attribute__ ((weak))
413 static char name[] =
"";
419 static char* argv[2] = { name, NULL };
427#pragma GCC diagnostic pop
void set(stack::element_t *address, std::size_t size_bytes)
Set the stack address and size.
void os_startup_initialize_free_store(void *heap_address, size_t heap_size_bytes)
Initialise free store.
void os_startup_initialize_hardware_early(void)
Initialise hardware early.
void _start(void)
The standard C application entry point.
void os_startup_initialize_args(int *p_argc, char ***p_argv)
Initialise arguments.
void os_startup_initialize_hardware(void)
Initialise hardware.
class thread::stack * stack(void)
Get the interrupts stack.
Single file µOS++ RTOS definitions.
unsigned long int _Heap_Limit
int main(int argc, char *argv[])
Default implementation of main().
static void os_run_init_array(void)
unsigned int __bss_start__
void(* __fini_array_start[])(void)
static void os_initialize_data(unsigned int *from, unsigned int *region_begin, unsigned int *region_end)
void(* __init_array_start[])(void)
void(* __init_array_end[])(void)
void os_run_fini_array(void)
void(* __fini_array_end[])(void)
static void os_initialize_bss(unsigned int *region_begin, unsigned int *region_end)
void(* __preinit_array_start[])(void)
unsigned long int __stack
void(* __preinit_array_end[])(void)
void trace_initialize(void)
int trace_printf(const char *format,...)
int trace_puts(const char *s)