C Microkernel Realtime eXecutive
Realtime Operating System for Cortex-M based microcontrollers
 
Loading...
Searching...
No Matches
application.h
1#pragma once
2
3/*
4 * RISC-V HAL application metadata placement.
5 *
6 * The RP2350 RISC-V linker fragment defines .applications and .thread_create
7 * sections and boundary symbols consumed by CMRX startup.
8 */
9#define CMRX_VTABLE_SPECIFIER __attribute__((section(".vtable."))) const
10
11#define CMRX_APPLICATION_INSTANCE_ATTRIBUTES __attribute__((used, section(".applications")))
12#define CMRX_THREAD_AUTOCREATE_ATTRIBUTES __attribute__((used, section(".thread_create")))
13
14#define CMRX_APPLICATION_INSTANCE_CONSTRUCTOR(application) \
15void * __APPL_SYMBOL(application, data_start) = (void *)1; \
16void * __APPL_SYMBOL(application, data_end) = (void *)1; \
17void * __APPL_SYMBOL(application, bss_start) = (void *)1; \
18void * __APPL_SYMBOL(application, bss_end) = (void *)1; \
19void * __APPL_SYMBOL(application, shared_start) = (void *)1; \
20void * __APPL_SYMBOL(application, shared_end) = (void *)1; \
21void * __APPL_SYMBOL(application, vtable_start) = (void *)1; \
22void * __APPL_SYMBOL(application, vtable_end) = (void *)1; \
23CMRX_APPLICATION_INSTANCE_ATTRIBUTES const struct OS_process_definition_t __APPL_SYMBOL(application, instance) = { \
24 { \
25 { &__APPL_SYMBOL(application, data_start), &__APPL_SYMBOL(application, data_end) }, \
26 { &__APPL_SYMBOL(application, bss_start), &__APPL_SYMBOL(application, bss_end) }, \
27 { __APPL_SYMBOL(application, mmio_start), __APPL_SYMBOL(application, mmio_end) }, \
28 { __APPL_SYMBOL(application, mmio_2_start), __APPL_SYMBOL(application, mmio_2_end) }, \
29 { &__APPL_SYMBOL(application, shared_start), &__APPL_SYMBOL(application, shared_end) } \
30 }, \
31 { &__APPL_SYMBOL(application, vtable_start), &__APPL_SYMBOL(application, vtable_end) } \
32}
33
34#define CMRX_THREAD_AUTOCREATE_CONSTRUCTOR(application, entrypoint, data, priority, core) \
35CMRX_THREAD_AUTOCREATE_ATTRIBUTES const struct OS_thread_create_t __APPL_SYMBOL(application, thread_create_ ## entrypoint) = { \
36 &__APPL_SYMBOL(application, instance), \
37 entrypoint, \
38 data, \
39 priority, \
40 core \
41}