From cbf137ed955b30d8695d881aa8d16f1a723b89b5 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sat, 3 Oct 2009 19:24:16 +0000 Subject: [PATCH] git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1203 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- demos/ARM7-AT91SAM7X-LWIP-GCC/Makefile | 2 +- demos/ARM7-AT91SAM7X-LWIP-GCC/chconf.h | 5 +++-- demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/sys_arch.c | 12 ++++++------ demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.c | 5 +++++ demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.h | 5 ++++- demos/ARM7-AT91SAM7X-LWIP-GCC/lwipopts.h | 2 +- demos/ARM7-AT91SAM7X-LWIP-GCC/main.c | 11 +++++++++-- 7 files changed, 29 insertions(+), 13 deletions(-) diff --git a/demos/ARM7-AT91SAM7X-LWIP-GCC/Makefile b/demos/ARM7-AT91SAM7X-LWIP-GCC/Makefile index e38c35681..80127d948 100644 --- a/demos/ARM7-AT91SAM7X-LWIP-GCC/Makefile +++ b/demos/ARM7-AT91SAM7X-LWIP-GCC/Makefile @@ -5,7 +5,7 @@ # Compiler options here. ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -mabi=apcs-gnu + USE_OPT = -O0 -ggdb -fomit-frame-pointer -mabi=apcs-gnu endif # C++ specific options here (added to USE_OPT). diff --git a/demos/ARM7-AT91SAM7X-LWIP-GCC/chconf.h b/demos/ARM7-AT91SAM7X-LWIP-GCC/chconf.h index 21ad75bde..e6a58ce12 100644 --- a/demos/ARM7-AT91SAM7X-LWIP-GCC/chconf.h +++ b/demos/ARM7-AT91SAM7X-LWIP-GCC/chconf.h @@ -339,7 +339,8 @@ #define THREAD_EXT_FIELDS \ struct { \ /* Add thread custom fields here.*/ \ - void *p_timeouts; \ + /* Space for the LWIP sys_timeouts structure.*/ \ + void *p_lwipspace[1]; \ }; #endif @@ -350,7 +351,7 @@ struct { \ #if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) #define THREAD_EXT_INIT(tp) { \ /* Add thread initialization code here.*/ \ - currp->p_timeouts = NULL; \ + (tp)->p_lwipspace[0] = NULL; \ } #endif diff --git a/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/sys_arch.c b/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/sys_arch.c index df3a97738..329e0f8de 100644 --- a/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/sys_arch.c +++ b/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/arch/sys_arch.c @@ -66,14 +66,14 @@ void sys_init(void) { sys_sem_t sys_sem_new(u8_t count) { - sys_sem_t sem = mem_malloc(sizeof(Semaphore)); + sys_sem_t sem = chHeapAlloc(sizeof(Semaphore)); chSemInit(sem, (cnt_t)count); return sem; } void sys_sem_free(sys_sem_t sem) { - mem_free(sem); + chHeapFree(sem); } void sys_sem_signal(sys_sem_t sem) { @@ -97,14 +97,14 @@ u32_t sys_arch_sem_wait(sys_sem_t sem, u32_t timeout) { sys_mbox_t sys_mbox_new(int size) { sys_mbox_t mbox; - mbox = mem_malloc(sizeof(Mailbox) + sizeof(msg_t) * size); + mbox = chHeapAlloc(sizeof(Mailbox) + sizeof(msg_t) * size); chMBInit(mbox, (void *)(mbox + 1), size); return mbox; } void sys_mbox_free(sys_mbox_t mbox) { - mem_free(mbox); + chHeapFree(mbox); } void sys_mbox_post(sys_mbox_t mbox, void *msg) { @@ -141,13 +141,13 @@ u32_t sys_arch_mbox_tryfetch(sys_mbox_t mbox, void **msg) { struct sys_timeouts *sys_arch_timeouts(void) { - return (struct sys_timeouts *)&currp->p_timeouts; + return (struct sys_timeouts *)currp->p_lwipspace; } sys_thread_t sys_thread_new(char *name, void (* thread)(void *arg), void *arg, int stacksize, int prio) { size_t wsz = THD_WA_SIZE(stacksize); - void *wsp = mem_malloc(wsz); + void *wsp = chHeapAlloc(wsz); if (wsp == NULL) return NULL; return (sys_thread_t)chThdCreateStatic(wsp, wsz, prio, (tfunc_t)thread, arg); diff --git a/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.c b/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.c index 2f4869d36..7b9d483c4 100644 --- a/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.c +++ b/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.c @@ -79,6 +79,11 @@ #define PERIODIC_TIMER_ID 1 #define FRAME_RECEIVED_ID 2 +/** + * Stack area for the LWIP-MAC thread. + */ +WORKING_AREA(wa_lwip_thread, LWIP_THREAD_STACK_SIZE); + /* * Initialization. */ diff --git a/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.h b/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.h index 0e0fd9031..85969bede 100644 --- a/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.h +++ b/demos/ARM7-AT91SAM7X-LWIP-GCC/lwip/lwipthread.h @@ -44,7 +44,7 @@ /** @brief MAC thread stack size. */ #if !defined(LWIP_THREAD_STACK_SIZE) || defined(__DOXYGEN__) -#define LWIP_THREAD_STACK_SIZE 256 +#define LWIP_THREAD_STACK_SIZE 512 #endif /** @brief Transmission timeout. */ @@ -97,9 +97,12 @@ #define LWIP_IFNAME1 's' #endif +extern WORKING_AREA(wa_lwip_thread, LWIP_THREAD_STACK_SIZE); + #ifdef __cplusplus extern "C" { #endif + msg_t lwip_thread(void *p); #ifdef __cplusplus } #endif diff --git a/demos/ARM7-AT91SAM7X-LWIP-GCC/lwipopts.h b/demos/ARM7-AT91SAM7X-LWIP-GCC/lwipopts.h index 28f7c6fd2..318ee6579 100644 --- a/demos/ARM7-AT91SAM7X-LWIP-GCC/lwipopts.h +++ b/demos/ARM7-AT91SAM7X-LWIP-GCC/lwipopts.h @@ -1010,7 +1010,7 @@ * sys_thread_new() when the thread is created. */ #ifndef TCPIP_THREAD_PRIO -#define TCPIP_THREAD_PRIO (LOWPRIO) +#define TCPIP_THREAD_PRIO (LOWPRIO + 1) #endif /** diff --git a/demos/ARM7-AT91SAM7X-LWIP-GCC/main.c b/demos/ARM7-AT91SAM7X-LWIP-GCC/main.c index f6c297a41..098e764a5 100644 --- a/demos/ARM7-AT91SAM7X-LWIP-GCC/main.c +++ b/demos/ARM7-AT91SAM7X-LWIP-GCC/main.c @@ -23,15 +23,16 @@ #include #include "board.h" +#include "lwipthread.h" static WORKING_AREA(waThread1, 64); static msg_t Thread1(void *arg) { while (TRUE) { - palSetPad(IOPORT2, PIOB_LCD_BL); - chThdSleepMilliseconds(100); palClearPad(IOPORT2, PIOB_LCD_BL); chThdSleepMilliseconds(900); + palSetPad(IOPORT2, PIOB_LCD_BL); + chThdSleepMilliseconds(100); } return 0; } @@ -52,6 +53,12 @@ int main(int argc, char **argv) { */ chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); + /* + * Creates the LWIP threads. + */ + chThdCreateStatic(wa_lwip_thread, LWIP_THREAD_STACK_SIZE, LOWPRIO, + lwip_thread, NULL); + /* * Normal main() thread activity. */