1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-01-17 05:12:57 +01:00

core: cpu: provide function to acquire ISR stack usage

This commit is contained in:
MohmadAyman 2016-06-01 20:35:00 +02:00 committed by Martine Lenders
parent 720136491a
commit 53df3e8b57
9 changed files with 79 additions and 8 deletions

View File

@ -58,6 +58,11 @@ typedef void *(*thread_task_func_t)(void *arg);
*/
char *thread_arch_stack_init(thread_task_func_t task_func, void *arg, void *stack_start, int stack_size);
/**
* @brief Get the number of bytes used on the ISR stack
*/
int thread_arch_isr_stack_usage(void);
/**
* @brief Print the current stack to stdout
*/

View File

@ -28,6 +28,13 @@ void thread_yield_higher(void)
__asm__("svc 0\n");
}
/* This function calculates the ISR_usage */
int thread_arch_isr_stack_usage(void)
{
/* TODO */
return -1;
}
/*----------------------------------------------------------------------------
* Processor specific routine - here for ARM7
* sizeof(void*) = sizeof(int)

View File

@ -198,6 +198,13 @@ void thread_arch_stack_print(void)
printf("stack size: %u bytes\n", size);
}
/* This function calculates the ISR_usage */
int thread_arch_isr_stack_usage(void)
{
/* TODO */
return -1;
}
void thread_arch_start_threading(void) __attribute__((naked));
void thread_arch_start_threading(void)
{

View File

@ -48,6 +48,15 @@ extern "C" {
#define ARCH_HAS_ATOMIC_COMPARE_AND_SWAP 1
#endif
/**
* @brief Interrupt stack canary value
*
* @note 0xe7fe is the ARM Thumb machine code equivalent of asm("bl #-2\n") or
* 'while (1);', i.e. an infinite loop.
* @internal
*/
#define STACK_CANARY_WORD (0xE7FEE7FEu)
/**
* @brief Initialization of the CPU
*/

View File

@ -100,6 +100,9 @@
#include "irq.h"
#include "cpu.h"
extern uint32_t _estack;
extern uint32_t _sstack;
/**
* @brief Noticeable marker marking the beginning of a stack segment
*
@ -251,6 +254,15 @@ void thread_arch_stack_print(void)
printf("current stack size: %i byte\n", count);
}
/* This function returns the number of bytes used on the ISR stack */
int thread_arch_isr_stack_usage(void)
{
uint32_t *ptr = &_sstack;
while (*(ptr++) == STACK_CANARY_WORD) {}
return (ISR_STACKSIZE - (ptr - &_sstack));
}
__attribute__((naked)) void NORETURN thread_arch_start_threading(void)
{
__asm__ volatile (

View File

@ -31,14 +31,6 @@
#include "panic.h"
#include "vectors_cortexm.h"
/**
* @brief Interrupt stack canary value
*
* @note 0xe7fe is the ARM Thumb machine code equivalent of __asm__("bl #-2\n") or
* 'while (1);', i.e. an infinite loop.
*/
#define STACK_CANARY_WORD 0xE7FEE7FEu
/**
* @brief Memory markers, defined in the linker script
* @{

View File

@ -33,6 +33,13 @@ __attribute__((naked)) void thread_yield_higher(void)
UNREACHABLE();
}
/* This function calculates the ISR_usage */
int thread_arch_isr_stack_usage(void)
{
/* TODO */
return -1;
}
NORETURN void cpu_switch_context_exit(void)
{
sched_active_thread = sched_threads[0];

View File

@ -74,6 +74,13 @@ void thread_print_stack(void)
return;
}
/* This function calculates the ISR_usage */
int thread_arch_isr_stack_usage(void)
{
/* TODO */
return -1;
}
char *thread_stack_init(thread_task_func_t task_func, void *arg, void *stack_start, int stacksize)
{
char *stk;

25
cpu/x86/x86_thread_arch.c Normal file
View File

@ -0,0 +1,25 @@
/*
* Copyright (C) 2016 Freie Universität Berlin
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @{
*
* @file
* @author Martine Lenders <mlenders@inf.fu-berlin.de>
*/
#include "thread_arch.h"
/* This function calculates the ISR_usage */
int thread_arch_isr_stack_usage(void)
{
/* TODO */
return -1;
}
/** @} */