]> rtime.felk.cvut.cz Git - pes-rpp/rpp-lwip.git/commitdiff
HALCoGen+LwIP Demo for TMS570 (BE) - only files coppied
authorJan Dolezal <pm.jenik@gmail.com>
Mon, 29 Jul 2013 15:47:56 +0000 (17:47 +0200)
committerJan Dolezal <pm.jenik@gmail.com>
Mon, 5 Aug 2013 15:24:47 +0000 (17:24 +0200)
src/arch/sys_arch.c
src/include/arch/cc.h
src/include/arch/lwipopts.h
src/include/arch/sys_arch.h
src/include/lwip/opt.h

index 3724d0b787b5bf3f8395e9af7c244362e3e6c424..efa3464f507e25282240cc7877b833c2157254a7 100644 (file)
 
 /* For mutexes you can just set option in opt.h/lwipopts.h LWIP_COMPAT_MUTEX,
  * which is using defined semaphores. This is basicaly doing the same thing. */
+#if !LWIP_COMPAT_MUTEX
 /* Create a new mutex */
 err_t sys_mutex_new(sys_mutex_t *mutex)
 {
        *mutex = xSemaphoreCreateMutex();
-       if(mutex != NULL)return ERR_OK;
+       if(*mutex != NULL)return ERR_OK;
     return ERR_MEM;
 }
 /* locks a mutex */
 void inline sys_mutex_lock(sys_mutex_t *mutex)
 {
-       xSemaphoreTake(*mutex,0);
+       xSemaphoreTake(*mutex,portMAX_DELAY); /* block time changed from 0 to portMAX_DELAY -- it might break timers! - just testing stability */
 }
 /* unlocks a mutex */
 void inline sys_mutex_unlock(sys_mutex_t *mutex)
@@ -71,12 +72,13 @@ void inline sys_mutex_free(sys_mutex_t *mutex)
 {
        vSemaphoreDelete(*mutex);
 }
+#endif
 
 /* creates a new semaphore */
 err_t sys_sem_new(sys_sem_t *sem, u8_t count)
 {
     *sem = xSemaphoreCreateCounting( SEMPHR_MAX_CNT, count); /* it's supposedly possible to use vSemaphoreCreateBinary */
-    if(sem != NULL)return ERR_OK;
+    if(*sem != NULL)return ERR_OK;
     return ERR_MEM;
 }
 /* signals a semaphore */
@@ -88,8 +90,15 @@ void inline sys_sem_signal(sys_sem_t *sem)
 u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout)
 {
        portTickType ticksBeforeSemphr = xTaskGetTickCount();
-    if(xSemaphoreTake( *sem, timeout / portTICK_RATE_MS ) == pdFALSE) /* note that it is important for the semaphores to return an accurate count of elapsed milliseconds, since they are used to schedule timers in lwIP */
-       return SYS_ARCH_TIMEOUT;
+       if(timeout == 0)
+       {
+               xSemaphoreTake( *sem, portMAX_DELAY );
+       }
+       else
+       {
+               if(xSemaphoreTake( *sem, timeout / portTICK_RATE_MS ) == pdFALSE) /* note that it is important for the semaphores to return an accurate count of elapsed milliseconds, since they are used to schedule timers in lwIP */
+                       return SYS_ARCH_TIMEOUT;
+       }
     return ( (xTaskGetTickCount() - ticksBeforeSemphr) / portTICK_RATE_MS ); /* return time spent waiting for the semaphore - u can use xTaskGetTickCount() */
 }
 /* deletes a semaphore */
@@ -102,22 +111,22 @@ void inline sys_sem_free(sys_sem_t *sem)
 err_t sys_mbox_new(sys_mbox_t *mbox, int size)
 {
        *mbox = xQueueCreate( size, sizeof( MBOX_PTR_TYPE ) );
-       if(mbox == 0)return ERR_MEM;
+       if(*mbox == NULL)return ERR_MEM;
        return ERR_OK;
 }
 /* posts the "msg" to the mailbox, blocks if mbox full */
 void inline sys_mbox_post(sys_mbox_t *mbox, void *msg)
 {
-       while(xQueueSendToBack(*mbox, msg, portMAX_DELAY) == errQUEUE_FULL);
+       while(xQueueSendToBack(*mbox, &msg, portMAX_DELAY) == errQUEUE_FULL);
 }
 /* returns ERR_MEM if mailbox is full, ERR_OK if "msg" is posted */
 err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg)
 {
 #if TRYPOST_ISR_SAFE
        signed portBASE_TYPE *pxHigherPriorityTaskWoken;
-       if(xQueueSendToBackFromISR( *mbox, msg, pxHigherPriorityTaskWoken ) == errQUEUE_FULL)
+       if(xQueueSendToBackFromISR( *mbox, &msg, pxHigherPriorityTaskWoken ) == errQUEUE_FULL)
 #else
-    if(xQueueSendToBack(*mbox, msg, 0) == errQUEUE_FULL)
+    if(xQueueSendToBack(*mbox, &msg, 0) == errQUEUE_FULL)
 #endif
                return ERR_MEM;
        return ERR_OK;
@@ -138,7 +147,7 @@ u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout)
        }
        return ( (xTaskGetTickCount() - ticksBeforeFetch) / portTICK_RATE_MS ); /* return time spent waiting for the space in the mailbox */
 }
-/* if message is not present immediately returns SYS_MBOX_EMPTY, on success returns 0 */
+/* if message is not present immediately returns SYS_MBOX_EMPTY, on success returns 0 ms */
 u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg)
 {
 #if TRYFETCH_ISR_SAFE
@@ -203,7 +212,7 @@ u32_t sys_now(void)
 
 unsigned int IntMasterStatusGet        (void)
 {
-    return 0;//(unsigned int)(0xC0 & _get_CPSR());
+    return (unsigned int)(0xC0 & _get_CPSR());
 }
 /**
  * This function is used to lock access to critical sections when lwipopt.h
index e027ef4e47a843355d5f46951128bbb7ba2aeabd..b22709caa5f2533df257f12bdb7295a8dcba94d4 100644 (file)
@@ -64,12 +64,12 @@ typedef u32_t               mem_ptr_t;
 /*#endif*/
 
 /* Define (sn)printf formatters for these lwIP types */
-/*#define U16_F "hu"
+#define U16_F "hu"
 #define S16_F "hd"
 #define X16_F "hx"
 #define U32_F "u"
 #define S32_F "d"
-#define X32_F "x"*/
+#define X32_F "x"
 
 
 #if defined(__arm__) && defined(__ARMCC_VERSION)
@@ -117,6 +117,7 @@ typedef u32_t               mem_ptr_t;
 
 
 /* TODO: make the debug work */
+//#define DEBUG
 #ifdef DEBUG
 
 #define LWIP_PLATFORM_DIAG(expr)
index 392369d095c74b6076cc37db013a1097400cc99e..4ffd93fccb72e164951563132ab48cdf23a48e66 100644 (file)
@@ -49,7 +49,7 @@
 ** For Example, for IP Address 192.168.247.1, use the corresponding hex
 ** value 0xC0A8F701.
 */
-#define STATIC_IP_ADDRESS               0
+#define STATIC_IP_ADDRESS               1
 
 /*****************************************************************************
 **            lwIP SPECIFIC DEFINITIONS - To be used by lwIP stack
 /*****************************************************************************
 **                          Memory Options
 *****************************************************************************/
-#define MEM_ALIGNMENT                   4
-#define MEM_SIZE                        (30 * 1024) /* 30K */
-#define MEMP_NUM_PBUF                   48
-#define MEMP_NUM_TCP_PCB                16
-#define PBUF_POOL_SIZE                  96
+#define MEM_ALIGNMENT                   4 /* dflt 1 */
+#define MEM_SIZE                        1600 // (30 * 1024) /* 30K */ /* dflt 1600 */
+#define MEMP_NUM_PBUF                   16 // 48 /* dflt 16 */
+#define MEMP_NUM_TCP_PCB                5 // 16 /* dflt 5 */
+#define PBUF_POOL_SIZE                  16 // 96 /* dflt 16 */
 
 /*****************************************************************************
 **                           IP Options
@@ -87,7 +87,7 @@
 /*****************************************************************************
 **                           DHCP Options
 *****************************************************************************/
-#define LWIP_DHCP                       1
+#define LWIP_DHCP                       0
 #define DHCP_DOES_ARP_CHECK             0
 
 /*****************************************************************************
 /*****************************************************************************
 **                           TCP  Options
 *****************************************************************************/
-#define TCP_WND                         4096   /* default is 2048 */
-#define TCP_MSS                         1500        /* default is 128 */
+#define TCP_WND                         2048 // 4096   /* default is 2048 */
+#define TCP_MSS                         128 // 1500        /* default is 128 */
 #define TCP_SND_BUF                     (4 * TCP_MSS)
 
 /*****************************************************************************
 #define PBUF_POOL_BUFSIZE               256
                                            /* default is LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN)*/
 #define ETH_PAD_SIZE                    0
-#define LWIP_NETCONN                    0          /*default is 1*/
+#define MEMP_NUM_NETCONN                10
+#define LWIP_NETCONN                    1          /*default is 1*/
 
 /*****************************************************************************
 **                           Socket  Options
 /*****************************************************************************
 **                          Mbox options
 *****************************************************************************/
-#define TCPIP_MBOX_SIZE                 20
-#define DEFAULT_RAW_RECVMBOX_SIZE       20
-#define DEFAULT_UDP_RECVMBOX_SIZE       20
-#define DEFAULT_TCP_RECVMBOX_SIZE       20
-#define DEFAULT_ACCEPTMBOX_SIZE         20
+#define TCPIP_MBOX_SIZE                 10
+#define DEFAULT_RAW_RECVMBOX_SIZE       10
+#define DEFAULT_UDP_RECVMBOX_SIZE       10
+#define DEFAULT_TCP_RECVMBOX_SIZE       10
+#define DEFAULT_ACCEPTMBOX_SIZE         10
 
 
 #endif /* __LWIPOPTS_H__ */
index 8615c20549fa6d9125bd32640537a08d7c9bf5b1..d49f6c2f302ff6bc380c125817129fe00720b40e 100644 (file)
@@ -63,22 +63,22 @@ typedef u8_t sys_prot_t;
 
 /* Typedefs for the various port-specific types. */
 #if !NO_SYS
-typedef xQueueHandle sys_mbox_t;
-typedef xSemaphoreHandle sys_sem_t;
-typedef xTaskHandle sys_thread_t;
+typedef xQueueHandle sys_mbox_t; /* *xQUEUE */
+typedef xSemaphoreHandle sys_sem_t; /* *xQUEUE */
+typedef xTaskHandle sys_thread_t; /* *void */
 #if !LWIP_COMPAT_MUTEX
-typedef xSemaphoreHandle sys_mutex_t;
+typedef xSemaphoreHandle sys_mutex_t; /* *xQUEUE */
 /* For mutexes you can just set option in opt.h/lwipopts.h LWIP_COMPAT_MUTEX,
  * which is using defined semaphores. This is basicaly doing the same thing. */
 #define sys_mutex_valid(mutex)        sys_sem_valid(mutex)
 #define sys_mutex_set_invalid(mutex)  sys_sem_set_invalid(mutex)
+#endif /* LWIP_COMPAT_MUTEX */
 
-#define sys_sem_valid(sem)            (*sem != SYS_SEM_NULL)
+#define sys_sem_valid(sem)            ((*sem != SYS_SEM_NULL) ? 1 : 0)
 #define sys_sem_set_invalid(sem)      (*sem = SYS_SEM_NULL)
 
-#define sys_mbox_valid(mbox)          (*mbox != SYS_MBOX_NULL)
+#define sys_mbox_valid(mbox)          ((*mbox != SYS_MBOX_NULL) ? 1 : 0)
 #define sys_mbox_set_invalid(mbox)    (*mbox = SYS_MBOX_NULL)
-#endif
 
 #define SEMPHR_MAX_CNT             1
 #define MBOX_PTR_TYPE              void *
@@ -87,10 +87,18 @@ typedef xSemaphoreHandle sys_mutex_t;
 
 #endif /* !NO_SYS */
 
-/* TODO: try with SYS_ARCH_PROTECT defined and without it */
-/* DETAILS in sys.h */
-/* #define SYS_ARCH_PROTECT */
-#ifndef SYS_ARCH_PROTECT
+#ifdef SYS_TEST_PROT_SEM
+
+#define SYS_ARCH_DECL_PROTECT(lev) xSemaphoreHandle lev; lev = xSemaphoreCreateCounting(5,0)
+
+#define SYS_ARCH_PROTECT(lev) sys_sem_wait(&lev)
+
+#define SYS_ARCH_UNPROTECT(lev) sys_sem_signal(&lev)
+
+#endif
+
+/* when used SYS_ARCH_PROTECT from sys.h, then it might cause instability of the system */
+#ifdef SYS_ARCH_PROTECT
 
 #if SYS_LIGHTWEIGHT_PROT
 
@@ -99,10 +107,10 @@ typedef xSemaphoreHandle sys_mutex_t;
 #define SYS_ARCH_PROTECT(lev) portENTER_CRITICAL() /* consider putting here taskENTER_CRITICAL() ... freeRTOS */
 
 #define SYS_ARCH_UNPROTECT(lev) portEXIT_CRITICAL() /* consider putting here taskEXIT_CRITICAL() ... freeRTOS */
-sys_prot_t sys_arch_protect(void);
-void sys_arch_unprotect(sys_prot_t pval);
+//sys_prot_t sys_arch_protect(void);
+//void sys_arch_unprotect(sys_prot_t pval);
 
-#else
+#else /* SYS_LIGHTWEIGHT_PROT */
 
 #define SYS_ARCH_DECL_PROTECT(lev)
 #define SYS_ARCH_PROTECT(lev)
@@ -113,6 +121,5 @@ void sys_arch_unprotect(sys_prot_t pval);
 #endif /* SYS_ARCH_PROTECT */
 
 
-
 #endif /* __ARCH_SYS_ARCH_H__ */
 
index e51f8e55642edd63743a2935218ce8c4fe84932f..3b07b0416a4eb4367c086c1e524bcda7dd66cf6c 100644 (file)
@@ -42,7 +42,7 @@
  * Include user defined options first. Anything not defined in these files
  * will be set to standard values. Override anything you dont like!
  */
-#include "lwipopts.h"
+#include "arch/lwipopts.h"
 #include "lwip/debug.h"
 
 /*