Browse Source

fix socket compile error

liuzhifu 9 năm trước cách đây
mục cha
commit
6f122928f0

+ 4 - 0
components/freertos/include/freertos/FreeRTOS.h

@@ -783,6 +783,10 @@ V8 if desired. */
 	#define xList List_t
 	#define xList List_t
 #endif /* configENABLE_BACKWARD_COMPATIBILITY */
 #endif /* configENABLE_BACKWARD_COMPATIBILITY */
 
 
+#ifndef configESP32_PER_TASK_DATA
+	#define configESP32_PER_TASK_DATA 1
+#endif
+
 #ifdef __cplusplus
 #ifdef __cplusplus
 }
 }
 #endif
 #endif

+ 27 - 0
components/freertos/tasks.c

@@ -84,6 +84,7 @@ task.h is included from an application file. */
 #include "timers.h"
 #include "timers.h"
 #include "StackMacros.h"
 #include "StackMacros.h"
 #include "portmacro.h"
 #include "portmacro.h"
+#include "semphr.h"
 
 
 /* Lint e961 and e750 are suppressed as a MISRA exception justified because the
 /* Lint e961 and e750 are suppressed as a MISRA exception justified because the
 MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined for the
 MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined for the
@@ -205,6 +206,10 @@ typedef struct tskTaskControlBlock
 		volatile eNotifyValue eNotifyState;
 		volatile eNotifyValue eNotifyState;
 	#endif
 	#endif
 
 
+#if (configESP32_PER_TASK_DATA == 1)
+	void *data;
+#endif
+
 } tskTCB;
 } tskTCB;
 
 
 /* The old tskTCB name is maintained above then typedefed to the new TCB_t name
 /* The old tskTCB name is maintained above then typedefed to the new TCB_t name
@@ -606,6 +611,9 @@ BaseType_t i;
 
 
 	if( pxNewTCB != NULL )
 	if( pxNewTCB != NULL )
 	{
 	{
+#if (configESP32_PER_TASK_DATA == 1)
+		pxNewTCB->data = NULL;
+#endif
 		#if( portUSING_MPU_WRAPPERS == 1 )
 		#if( portUSING_MPU_WRAPPERS == 1 )
 			/* Should the task be created in privileged mode? */
 			/* Should the task be created in privileged mode? */
 			BaseType_t xRunPrivileged;
 			BaseType_t xRunPrivileged;
@@ -791,6 +799,11 @@ BaseType_t i;
 			being deleted. */
 			being deleted. */
 			pxTCB = prvGetTCBFromHandle( xTaskToDelete );
 			pxTCB = prvGetTCBFromHandle( xTaskToDelete );
 
 
+#if (configESP32_PER_TASK_DATA == 1)
+			if (pxTCB->data){
+				vSemaphoreDelete( pxTCB->data );
+			}
+#endif
 			/* Remove task from the ready list and place in the	termination list.
 			/* Remove task from the ready list and place in the	termination list.
 			This will stop the task from be scheduled.  The idle task will check
 			This will stop the task from be scheduled.  The idle task will check
 			the termination list and free up any memory allocated by the
 			the termination list and free up any memory allocated by the
@@ -4580,7 +4593,21 @@ TickType_t uxReturn;
 #endif /* configUSE_TASK_NOTIFICATIONS */
 #endif /* configUSE_TASK_NOTIFICATIONS */
 
 
 /*-----------------------------------------------------------*/
 /*-----------------------------------------------------------*/
+#if (configESP32_PER_TASK_DATA == 1)
+void* xTaskGetPerTaskData(void)
+{
+	TCB_t *pxTCB = (TCB_t*)(xTaskGetCurrentTaskHandle());
+	if (pxTCB){
+		if (!pxTCB->data){
+			vSemaphoreCreateBinary(pxTCB->data);
+		}
+		return (void*)(&pxTCB->data);
+        }
 
 
+	return NULL;
+}
+#endif /* configESP32_PER_TASK_DATA */
+/*-----------------------------------------------------------*/
 
 
 #ifdef FREERTOS_MODULE_TEST
 #ifdef FREERTOS_MODULE_TEST
 	#include "tasks_test_access_functions.h"
 	#include "tasks_test_access_functions.h"

+ 1 - 1
components/lwip/api/sockets.c

@@ -405,7 +405,7 @@ do{\
 
 
 /** The global array of available sockets */
 /** The global array of available sockets */
 static struct lwip_sock sockets[NUM_SOCKETS];
 static struct lwip_sock sockets[NUM_SOCKETS];
-#ifdef LWIP_THREAD_SAFE
+#if LWIP_THREAD_SAFE
 static bool sockets_init_flag = false;
 static bool sockets_init_flag = false;
 #endif
 #endif
 /** The global list of tasks waiting for select */
 /** The global list of tasks waiting for select */

+ 1 - 0
components/lwip/include/lwip/port/arch/sys_arch.h

@@ -66,6 +66,7 @@ void sys_arch_assert(const char *file, int line);
 uint32_t system_get_time(void);
 uint32_t system_get_time(void);
 sys_sem_t* sys_thread_sem(void);
 sys_sem_t* sys_thread_sem(void);
 void sys_delay_ms(uint32_t ms);
 void sys_delay_ms(uint32_t ms);
+void* xTaskGetPerTaskData(void);
 
 
 
 
 
 

+ 2 - 2
components/lwip/port/freertos/sys_arch.c

@@ -482,8 +482,8 @@ sys_arch_assert(const char *file, int line)
 */
 */
 sys_sem_t* sys_thread_sem(void)
 sys_sem_t* sys_thread_sem(void)
 {
 {
-  extern void* xTaskGetLwipSem(void);
-  return (sys_sem_t*)(xTaskGetLwipSem());
+  sys_sem_t *sem = (sys_sem_t*)xTaskGetPerTaskData();
+  return sem;
 }
 }
 
 
 void sys_delay_ms(uint32_t ms)
 void sys_delay_ms(uint32_t ms)