1 #ifndef __SYS_ARCH_H__ 2 #define __SYS_ARCH_H__ 3 #include "cmsis_os.h" 4 #include "net_defs.h" 5 #include "lwip/err.h" 6 #include "hal_trace.h" 7 8 extern void *rt_malloc(size_t size); 9 extern void rt_free(void *rmem); 10 #if 1 11 #define lwip_sys_malloc(size)({\ 12 unsigned char * ret = NULL;\ 13 ret = rt_malloc(size);\ 14 TRACE("sys_malloc:%s %d\n", __func__, __LINE__);\ 15 ret;\ 16 }) 17 18 #else 19 #define lwip_sys_malloc(size)({\ 20 unsigned char * ret = NULL;\ 21 ret = rt_malloc(size);\ 22 uart_printf("sys_malloc:%s %d\n", __func__, __LINE__);\ 23 ret;\ 24 }) 25 #endif 26 #define lwip_sys_free rt_free 27 #define MAX_MSG_IN_LWIP_MBOX 50 28 29 struct lwip_sem{ 30 osSemaphoreId sem_id; 31 #if defined(CMSIS_OS_RTX) && (osCMSIS < 0x20000U) 32 uint32_t os_semaphore_name[2]; 33 #endif 34 }; 35 typedef struct lwip_sem sys_sem_t; 36 37 struct lwip_message_queue{ 38 osMessageQDef_t queue_def; 39 osMessageQId msg_id; 40 uint32_t queue_sz; ///< number of elements in the queue 41 #if (osCMSIS < 0x20000U) 42 void *pool; ///< memory array for messages 43 #endif 44 }; 45 typedef struct lwip_message_queue* sys_mbox_t; 46 47 struct lwip_mutex{ 48 osMutexId mutex_id; 49 uint32_t os_mutex_cb[3]; 50 }; 51 typedef struct lwip_mutex sys_mutex_t; 52 53 #ifdef CMSIS_OS_RTX 54 struct lwip_sys_thread{ 55 osThreadDef_t thread_def; 56 void * stack; 57 }; 58 //typedef struct lwip_sys_thread *sys_thread_t; 59 #endif 60 61 //#ifdef osCMSIS_FreeRTOS 62 //typedef osThreadId sys_thread_t; 63 //#endif 64 typedef osThreadId sys_thread_t; 65 66 67 #ifndef NULL 68 #define NULL 0 69 #endif 70 71 #ifndef offsetof 72 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 73 #endif 74 75 #define SYS_MBOX_NULL (sys_mbox_t)NULL 76 #define SYS_SEM_NULL (sys_sem_t)NULL 77 #define SYS_MUTEX_NULL (sys_mutex_t)NULL 78 79 err_t sys_sem_new(sys_sem_t *sem,u8_t count); 80 void sys_sem_free(sys_sem_t *sem); 81 void sys_sem_signal(sys_sem_t *sem); 82 83 #endif /* __SYS_ARCH_H__ */ 84 85 86