Zephyr API Documentation 4.0.0
A Scalable Open Source RTOS
|
ARM AArch32 specific kernel interface header. More...
#include <zephyr/devicetree.h>
#include <zephyr/arch/arm/thread.h>
#include <zephyr/arch/arm/exception.h>
#include <zephyr/arch/arm/irq.h>
#include <zephyr/arch/arm/error.h>
#include <zephyr/arch/arm/misc.h>
#include <zephyr/arch/common/addr_types.h>
#include <zephyr/arch/common/ffs.h>
#include <zephyr/arch/arm/nmi.h>
#include <zephyr/arch/arm/asm_inline.h>
#include <zephyr/arch/common/sys_bitops.h>
#include <zephyr/arch/arm/gdbstub.h>
#include <zephyr/fatal_types.h>
Go to the source code of this file.
Macros | |
#define | ARCH_STACK_PTR_ALIGN 4 |
Declare the ARCH_STACK_PTR_ALIGN. | |
#define | MPU_GUARD_ALIGN_AND_SIZE 0 |
Declare a minimum MPU guard alignment and size. | |
#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. | |
#define | ARCH_THREAD_STACK_OBJ_ALIGN(size) |
#define | ARCH_THREAD_STACK_SIZE_ADJUST(size) |
#define | ARCH_THREAD_STACK_RESERVED 0 |
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)
#define ARCH_STACK_PTR_ALIGN 4 |
Declare the ARCH_STACK_PTR_ALIGN.
Denotes the required alignment of the stack pointer on public API boundaries
#define ARCH_THREAD_STACK_OBJ_ALIGN | ( | size | ) |
#define ARCH_THREAD_STACK_RESERVED 0 |
#define ARCH_THREAD_STACK_SIZE_ADJUST | ( | 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.
The guard region must include enough space for an exception frame below the trapping region as a stack fault will end up storing the exception data (0x20 bytes) onto the stack below wherever the stack pointer refers, even if that is within the guard region, so we make sure the region is strictly larger than this size by setting it to 0x40 (to respect any power-of-two requirements).
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
#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.