Browse Source

Work on freertos port: added preprocessor sanity checks of freertos configuration;

- renamed LWIP_FREERTOS_PROTECT_USES_MUTEX to LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX;
- sys_jiffies returns ticks, not time in ms
master
goldsimon 8 years ago
parent
commit
c27b222217
  1. 43
      ports/freertos/sys_arch.c

43
ports/freertos/sys_arch.c

@ -40,14 +40,29 @@
#include "semphr.h" #include "semphr.h"
#include "task.h" #include "task.h"
/** Set this to 1 to use a mutex for SYS_ARCH_PROTECT critical regions. /** Set this to 1 to use a mutex for SYS_ARCH_PROTECT() critical regions.
* Default is 0 and locks interrupts. * Default is 0 and locks interrupts/scheduler for SYS_ARCH_PROTECT().
*/ */
#ifndef LWIP_FREERTOS_PROTECT_USES_MUTEX #ifndef LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX
#define LWIP_FREERTOS_PROTECT_USES_MUTEX 0 #define LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX 0
#endif #endif
#if SYS_LIGHTWEIGHT_PROT && LWIP_FREERTOS_PROTECT_USES_MUTEX #if !configSUPPORT_DYNAMIC_ALLOCATION
# error "lwIP FreeRTOS port requires configSUPPORT_DYNAMIC_ALLOCATION"
#endif
#if !INCLUDE_vTaskDelay
# error "lwIP FreeRTOS port requires INCLUDE_vTaskDelay"
#endif
#if !INCLUDE_vTaskSuspend
# error "lwIP FreeRTOS port requires INCLUDE_vTaskSuspend"
#endif
#if LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX || !LWIP_COMPAT_MUTEX
#if !configUSE_MUTEXES
# error "lwIP FreeRTOS port requires configUSE_MUTEXES"
#endif
#endif
#if SYS_LIGHTWEIGHT_PROT && LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX
static SemaphoreHandle_t sys_arch_protect_mutex; static SemaphoreHandle_t sys_arch_protect_mutex;
#endif #endif
@ -55,12 +70,12 @@ static SemaphoreHandle_t sys_arch_protect_mutex;
void void
sys_init(void) sys_init(void)
{ {
#if SYS_LIGHTWEIGHT_PROT && LWIP_FREERTOS_PROTECT_USES_MUTEX #if SYS_LIGHTWEIGHT_PROT && LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX
/* initialize sys_arch_protect global mutex */ /* initialize sys_arch_protect global mutex */
sys_arch_protect_mutex = xSemaphoreCreateRecursiveMutex(); sys_arch_protect_mutex = xSemaphoreCreateRecursiveMutex();
LWIP_ASSERT("failed to create sys_arch_protect mutex", LWIP_ASSERT("failed to create sys_arch_protect mutex",
sys_arch_protect_mutex != NULL); sys_arch_protect_mutex != NULL);
#endif /* SYS_LIGHTWEIGHT_PROT && LWIP_FREERTOS_PROTECT_USES_MUTEX */ #endif /* SYS_LIGHTWEIGHT_PROT && LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX */
} }
#if configUSE_16_BIT_TICKS == 1 #if configUSE_16_BIT_TICKS == 1
@ -76,7 +91,7 @@ sys_now(void)
u32_t u32_t
sys_jiffies(void) sys_jiffies(void)
{ {
return sys_now(); return xTaskGetTickCount();
} }
#if SYS_LIGHTWEIGHT_PROT #if SYS_LIGHTWEIGHT_PROT
@ -84,30 +99,30 @@ sys_jiffies(void)
sys_prot_t sys_prot_t
sys_arch_protect(void) sys_arch_protect(void)
{ {
#if LWIP_FREERTOS_PROTECT_USES_MUTEX #if LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX
BaseType_t ret; BaseType_t ret;
LWIP_ASSERT("sys_arch_protect_mutex != NULL", sys_arch_protect_mutex != NULL); LWIP_ASSERT("sys_arch_protect_mutex != NULL", sys_arch_protect_mutex != NULL);
ret = xSemaphoreTakeRecursive(sys_arch_protect_mutex, portMAX_DELAY); ret = xSemaphoreTakeRecursive(sys_arch_protect_mutex, portMAX_DELAY);
LWIP_ASSERT("sys_arch_protect failed to take the mutex", ret == pdTRUE); LWIP_ASSERT("sys_arch_protect failed to take the mutex", ret == pdTRUE);
#else /* LWIP_FREERTOS_PROTECT_USES_MUTEX */ #else /* LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX */
taskENTER_CRITICAL(); taskENTER_CRITICAL();
#endif /* LWIP_FREERTOS_PROTECT_USES_MUTEX */ #endif /* LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX */
return 1; return 1;
} }
void void
sys_arch_unprotect(sys_prot_t pval) sys_arch_unprotect(sys_prot_t pval)
{ {
#if LWIP_FREERTOS_PROTECT_USES_MUTEX #if LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX
BaseType_t ret; BaseType_t ret;
LWIP_ASSERT("sys_arch_protect_mutex != NULL", sys_arch_protect_mutex != NULL); LWIP_ASSERT("sys_arch_protect_mutex != NULL", sys_arch_protect_mutex != NULL);
ret = xSemaphoreGiveRecursive(sys_arch_protect_mutex); ret = xSemaphoreGiveRecursive(sys_arch_protect_mutex);
LWIP_ASSERT("sys_arch_unprotect failed to give the mutex", ret == pdTRUE); LWIP_ASSERT("sys_arch_unprotect failed to give the mutex", ret == pdTRUE);
#else /* LWIP_FREERTOS_PROTECT_USES_MUTEX */ #else /* LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX */
taskEXIT_CRITICAL(); taskEXIT_CRITICAL();
#endif /* LWIP_FREERTOS_PROTECT_USES_MUTEX */ #endif /* LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX */
LWIP_UNUSED_ARG(pval); LWIP_UNUSED_ARG(pval);
} }

Loading…
Cancel
Save