Nexus Embedded Platform 1.0.0
Statically assembled reusable embedded mechanisms
Loading...
Searching...
No Matches
memory.h
Go to the documentation of this file.
1
6#ifndef NEXUS_CORE_MEMORY_H
7#define NEXUS_CORE_MEMORY_H
8
9#include "nexus_config.h"
10
28#if !defined(__GNUC__) && !defined(__clang__)
29#error \
30 "Optional memory placement requires the maintained GNU-compatible compiler"
31#endif
32
33#define NX_CORE_MEMORY_STRING_DETAIL(value) #value
34#define NX_CORE_MEMORY_STRING(value) NX_CORE_MEMORY_STRING_DETAIL(value)
35#define NX_CORE_MEMORY_ATTRIBUTE(name) \
36 __attribute__((section(name "." NX_CORE_MEMORY_STRING(__COUNTER__)), \
37 aligned(4), nocommon))
38
39#if defined(NEXUS_MEMORY_ADDSRAM) && NEXUS_MEMORY_ADDSRAM == 1
40#define NX_MEMORY_ADDSRAM_DATA NX_CORE_MEMORY_ATTRIBUTE(".nx_addsram_data")
41#define NX_MEMORY_ADDSRAM_BSS NX_CORE_MEMORY_ATTRIBUTE(".bss.nx_addsram")
42#define NX_MEMORY_ADDSRAM_NOINIT \
43 NX_CORE_MEMORY_ATTRIBUTE(".bss.nx_addsram_noinit")
44#else
45#define NX_MEMORY_ADDSRAM_DATA \
46 _Pragma("GCC error \"ADDSRAM memory region is not selected\"")
47#define NX_MEMORY_ADDSRAM_BSS NX_MEMORY_ADDSRAM_DATA
48#define NX_MEMORY_ADDSRAM_NOINIT NX_MEMORY_ADDSRAM_DATA
49#endif
50
51#if defined(NEXUS_MEMORY_TCM) && NEXUS_MEMORY_TCM == 1
52#define NX_MEMORY_TCM_DATA NX_CORE_MEMORY_ATTRIBUTE(".nx_tcm_data")
53#define NX_MEMORY_TCM_BSS NX_CORE_MEMORY_ATTRIBUTE(".bss.nx_tcm")
54#define NX_MEMORY_TCM_NOINIT NX_CORE_MEMORY_ATTRIBUTE(".bss.nx_tcm_noinit")
55#else
56#define NX_MEMORY_TCM_DATA \
57 _Pragma("GCC error \"TCM memory region is not selected\"")
58#define NX_MEMORY_TCM_BSS NX_MEMORY_TCM_DATA
59#define NX_MEMORY_TCM_NOINIT NX_MEMORY_TCM_DATA
60#endif
61
62#if defined(NEXUS_MEMORY_CCM) && NEXUS_MEMORY_CCM == 1
63#define NX_MEMORY_CCM_DATA NX_CORE_MEMORY_ATTRIBUTE(".nx_ccm_data")
64#define NX_MEMORY_CCM_BSS NX_CORE_MEMORY_ATTRIBUTE(".bss.nx_ccm")
65#define NX_MEMORY_CCM_NOINIT NX_CORE_MEMORY_ATTRIBUTE(".bss.nx_ccm_noinit")
66#else
67#define NX_MEMORY_CCM_DATA \
68 _Pragma("GCC error \"CCM memory region is not selected\"")
69#define NX_MEMORY_CCM_BSS NX_MEMORY_CCM_DATA
70#define NX_MEMORY_CCM_NOINIT NX_MEMORY_CCM_DATA
71#endif
72
73#endif