diff --git a/cpu/cc2430/Makefile.cc2430 b/cpu/cc2430/Makefile.cc2430 index fab1fbfd1..0f67e880b 100644 --- a/cpu/cc2430/Makefile.cc2430 +++ b/cpu/cc2430/Makefile.cc2430 @@ -89,7 +89,7 @@ CONTIKI_CPU_DIRS = . dev ### CPU-dependent source files CONTIKI_SOURCEFILES += bus.c clock.c uart0.c uart1.c cc2430_rf.c dma.c CONTIKI_SOURCEFILES += uart_intr.c cc2430_rf_intr.c dma_intr.c -CONTIKI_SOURCEFILES += watchdog-cc2430.c rtimer-arch.c +CONTIKI_SOURCEFILES += watchdog-cc2430.c rtimer-arch.c stack.c CONTIKI_ASMFILES += CONTIKI_ASMOBJECTFILES = $(addprefix $(OBJECTDIR)/,$(CONTIKI_ASMFILES:.S=.rel)) diff --git a/cpu/cc2430/stack.c b/cpu/cc2430/stack.c new file mode 100644 index 000000000..0a26330fa --- /dev/null +++ b/cpu/cc2430/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 AUTHOR 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/cc2430/stack.h b/cpu/cc2430/stack.h new file mode 100644 index 000000000..18caccd9c --- /dev/null +++ b/cpu/cc2430/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 AUTHOR 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/sensinode/contiki-conf.h b/platform/sensinode/contiki-conf.h index ea11008d8..610c3cf54 100644 --- a/platform/sensinode/contiki-conf.h +++ b/platform/sensinode/contiki-conf.h @@ -24,6 +24,10 @@ /* Logging.. */ #define LOG_CONF_ENABLED 0 +#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/sensinode/contiki-sensinode-main.c b/platform/sensinode/contiki-sensinode-main.c index 6899de9e8..27cc1a1ae 100644 --- a/platform/sensinode/contiki-sensinode-main.c +++ b/platform/sensinode/contiki-sensinode-main.c @@ -16,6 +16,7 @@ #include "net/netstack.h" #include "net/mac/frame802154.h" #include "debug.h" +#include "stack.h" #include "dev/watchdog-cc2430.h" #include "dev/sensinode-sensors.h" #include "disco.h" @@ -164,6 +165,8 @@ main(void) bus_init(); rtimer_init(); + stack_poison(); + /* model-specific h/w init. */ model_init();