From ee7af77ca994a1685462b5dddc524f804f5048e0 Mon Sep 17 00:00:00 2001 From: George Oikonomou Date: Fri, 7 Sep 2012 11:12:31 +0100 Subject: [PATCH] Reworked the cc2530 stack debugging facilities: - Moved to their own file (so we can later copy the entire thing over to cc2430) - Renamed the functions (for naming convention reasons) - The entire thing can be enabled/disabled - Added a couple more macros - Hooked into main() --- cpu/cc253x/Makefile.cc253x | 2 +- cpu/cc253x/soc.c | 31 -------------- cpu/cc253x/soc.h | 3 -- cpu/cc253x/stack.c | 71 ++++++++++++++++++++++++++++++++ cpu/cc253x/stack.h | 69 +++++++++++++++++++++++++++++++ platform/cc2530dk/contiki-conf.h | 4 ++ platform/cc2530dk/contiki-main.c | 3 ++ 7 files changed, 148 insertions(+), 35 deletions(-) create mode 100644 cpu/cc253x/stack.c create mode 100644 cpu/cc253x/stack.h diff --git a/cpu/cc253x/Makefile.cc253x b/cpu/cc253x/Makefile.cc253x index ff499c741..fb7a718dd 100644 --- a/cpu/cc253x/Makefile.cc253x +++ b/cpu/cc253x/Makefile.cc253x @@ -101,7 +101,7 @@ CLEAN += symbols.c symbols.h CONTIKI_CPU_DIRS = . dev ### CPU-dependent source files -CONTIKI_SOURCEFILES += soc.c clock.c +CONTIKI_SOURCEFILES += soc.c clock.c stack.c CONTIKI_SOURCEFILES += uart0.c uart1.c uart-intr.c CONTIKI_SOURCEFILES += dma.c dma_intr.c CONTIKI_SOURCEFILES += cc2530-rf.c diff --git a/cpu/cc253x/soc.c b/cpu/cc253x/soc.c index 94b3935e8..d65bbacb5 100644 --- a/cpu/cc253x/soc.c +++ b/cpu/cc253x/soc.c @@ -51,34 +51,3 @@ soc_init() /* Enable Global Interrupt */ ENABLE_INTERRUPTS(); } - -#ifndef STACK_POISON -#define STACK_POISON 0xAA -#endif - -void -cc253x_stack_poison(void) -{ - __asm - mov r1, _SP -poison_loop: - inc r1 - mov @r1, #STACK_POISON - cjne r1, #0xFF, poison_loop - __endasm; -} - -uint8_t -cc253x_get_max_stack(void) -{ - __data uint8_t * sp = (__data uint8_t *) 0xff; - uint8_t free = 0; - - while(*sp-- == STACK_POISON) { - free++; - } - - return 0xff - free; -} - - diff --git a/cpu/cc253x/soc.h b/cpu/cc253x/soc.h index e4d4c855c..bcf858ba0 100644 --- a/cpu/cc253x/soc.h +++ b/cpu/cc253x/soc.h @@ -61,7 +61,4 @@ void soc_init(); -void cc253x_stack_poison(void); -uint8_t cc253x_get_max_stack(void); - #endif /* __SOC_H__ */ diff --git a/cpu/cc253x/stack.c b/cpu/cc253x/stack.c new file mode 100644 index 000000000..d6daf25a6 --- /dev/null +++ b/cpu/cc253x/stack.c @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2011, George Oikonomou - + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + */ + +/** + * \file + * 8051 stack debugging facilities + * + * \author + * George Oikonomou - + * Philippe Retornaz (EPFL) + */ +#include "contiki.h" + +#ifndef STACK_POISON +#define STACK_POISON 0xAA +#endif + +CC_AT_DATA uint8_t sp; + +void +stack_poison(void) +{ + __asm + mov r1, _SP +poison_loop: + inc r1 + mov @r1, #STACK_POISON + cjne r1, #0xFF, poison_loop + __endasm; +} + +uint8_t +stack_get_max(void) +{ + __data uint8_t * sp = (__data uint8_t *) 0xff; + uint8_t free = 0; + + while(*sp-- == STACK_POISON) { + free++; + } + + return 0xff - free; +} diff --git a/cpu/cc253x/stack.h b/cpu/cc253x/stack.h new file mode 100644 index 000000000..989875da4 --- /dev/null +++ b/cpu/cc253x/stack.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2011, George Oikonomou - + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + */ + +/** + * \file + * Header file for 8051 stack debugging facilities + * + * \author + * George Oikonomou - + * Philippe Retornaz (EPFL) + */ +#ifndef STACK_H_ +#define STACK_H_ + +#if STACK_CONF_DEBUGGING +extern CC_AT_DATA uint8_t sp; + +#define stack_dump(f) do { \ + putstring(f); \ + sp = SP; \ + puthex(sp); \ + putchar('\n'); \ +} while(0) + +#define stack_max_sp_print(f) do { \ + putstring(f); \ + sp = SP; \ + puthex(stack_get_max()); \ + putchar('\n'); \ +} while(0) + +void stack_poison(void); +uint8_t stack_get_max(void); +#else +#define stack_dump(...) +#define stack_max_sp_print(...) +#define stack_poison() +#define stack_get_max() +#endif + +#endif /* STACK_H_ */ diff --git a/platform/cc2530dk/contiki-conf.h b/platform/cc2530dk/contiki-conf.h index 25eac38bf..a5e2406df 100644 --- a/platform/cc2530dk/contiki-conf.h +++ b/platform/cc2530dk/contiki-conf.h @@ -20,6 +20,10 @@ #define CLOCK_CONF_STACK_FRIENDLY 1 #endif +#ifndef STACK_CONF_DEBUGGING +#define STACK_CONF_DEBUGGING 0 +#endif + /* Energest Module */ #ifndef ENERGEST_CONF_ON #define ENERGEST_CONF_ON 0 diff --git a/platform/cc2530dk/contiki-main.c b/platform/cc2530dk/contiki-main.c index 83a6480ed..8c31c97d8 100644 --- a/platform/cc2530dk/contiki-main.c +++ b/platform/cc2530dk/contiki-main.c @@ -1,5 +1,6 @@ #include "contiki.h" #include "soc.h" +#include "stack.h" #include "sys/clock.h" #include "sys/autostart.h" #include "dev/serial-line.h" @@ -146,6 +147,8 @@ main(void) CC_NON_BANKED soc_init(); rtimer_init(); + stack_poison(); + /* Init LEDs here */ leds_init(); leds_off(LEDS_ALL);