Zephyr API Documentation  2.7.0-rc2
A Scalable Open Source RTOS
arch.h File Reference

ARM AArch32 specific kernel interface header. More...

Go to the source code of this file.

Macros

#define sys_define_gpr_with_alias(name1, name2)   union { uint32_t name1, name2; }
 
#define ARCH_STACK_PTR_ALIGN   4
 Declare the ARCH_STACK_PTR_ALIGN. More...
 
#define MPU_GUARD_ALIGN_AND_SIZE   0
 Declare a minimum MPU guard alignment and size. More...
 
#define MPU_GUARD_ALIGN_AND_SIZE_FLOAT   0
 Declare the MPU guard alignment and size for a thread stack that is using the Floating Point services. More...
 
#define ARCH_THREAD_STACK_OBJ_ALIGN(size)
 
#define ARCH_THREAD_STACK_SIZE_ADJUST(size)    ROUND_UP(size, CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE)
 
#define ARCH_THREAD_STACK_RESERVED   0
 

Detailed Description

ARM AArch32 specific kernel interface header.

This header contains the ARM AArch32 specific kernel interface. It is included by the kernel interface architecture-abstraction header (include/arm/cpu.h)

Macro Definition Documentation

◆ ARCH_STACK_PTR_ALIGN

#define ARCH_STACK_PTR_ALIGN   4

Declare the ARCH_STACK_PTR_ALIGN.

Denotes the required alignment of the stack pointer on public API boundaries

◆ ARCH_THREAD_STACK_OBJ_ALIGN

#define ARCH_THREAD_STACK_OBJ_ALIGN (   size)
Value:
MAX(Z_THREAD_MIN_STACK_ALIGN, \
Z_MPU_GUARD_ALIGN)
#define MAX(a, b)
The larger value between a and b.
Definition: util.h:168

◆ ARCH_THREAD_STACK_RESERVED

#define ARCH_THREAD_STACK_RESERVED   0

◆ ARCH_THREAD_STACK_SIZE_ADJUST

#define ARCH_THREAD_STACK_SIZE_ADJUST (   size)     ROUND_UP(size, CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE)

◆ MPU_GUARD_ALIGN_AND_SIZE

#define MPU_GUARD_ALIGN_AND_SIZE   0

Declare a minimum MPU guard alignment and size.

This specifies the minimum MPU guard alignment/size for the MPU. This will be used to denote the guard section of the stack, if it exists.

One key note is that this guard results in extra bytes being added to the stack. APIs which give the stack ptr and stack size will take this guard size into account.

Stack is allocated, but initial stack pointer is at the end (highest address). Stack grows down to the actual allocation address (lowest address). Stack guard, if present, will comprise the lowest MPU_GUARD_ALIGN_AND_SIZE bytes of the stack.

As the stack grows down, it will reach the end of the stack when it encounters either the stack guard region, or the stack allocation address.

--------------------— <-— Stack allocation address + stack size + | | MPU_GUARD_ALIGN_AND_SIZE | Some thread data | <-— Defined when thread is created | ... | |------------------—| <-— Actual initial stack ptr | Initial Stack Ptr | aligned to ARCH_STACK_PTR_ALIGN | ... | | ... | | ... | | ... | | ... | | ... | | ... | | ... | | Stack Ends | |-------------------— <-— Stack Buffer Ptr from API | MPU Guard, | | if present | --------------------— <-— Stack Allocation address

◆ MPU_GUARD_ALIGN_AND_SIZE_FLOAT

#define MPU_GUARD_ALIGN_AND_SIZE_FLOAT   0

Declare the MPU guard alignment and size for a thread stack that is using the Floating Point services.

For threads that are using the Floating Point services under Shared Registers (CONFIG_FPU_SHARING=y) mode, the exception stack frame may contain both the basic stack frame and the FP caller-saved context, upon exception entry. Therefore, a wide guard region is required to guarantee that stack-overflow detection will always be successful.

◆ sys_define_gpr_with_alias

#define sys_define_gpr_with_alias (   name1,
  name2 
)    union { uint32_t name1, name2; }