Переглянути джерело

Merge pull request #4793 from mysterywolf/lwipcc

[bug][lwip] 修复lwip临界区保护的bug
guo 3 роки тому
батько
коміт
b032f9a6e2

+ 2 - 3
bsp/stm32/libraries/HAL_Drivers/drv_eth.c

@@ -11,11 +11,10 @@
  * 2019-09-03     xiaofan      optimize link change detection process
  */
 
-#include "board.h"
 #include "drv_config.h"
-#include <netif/ethernetif.h>
-#include "lwipopts.h"
 #include "drv_eth.h"
+#include <netif/ethernetif.h>
+#include <lwipopts.h>
 
 /*
 * Emac driver uses CubeMX tool to generate emac and phy's configuration,

+ 5 - 7
components/net/lwip-1.4.1/src/arch/include/arch/cc.h

@@ -37,8 +37,9 @@
 
 #include <rthw.h>
 #include <rtthread.h>
-
+#include <string.h>
 #include <stdint.h>
+
 typedef uint8_t   u8_t;
 typedef int8_t    s8_t;
 typedef uint16_t  u16_t;
@@ -99,11 +100,8 @@ void sys_arch_assert(const char* file, int line);
 #define LWIP_PLATFORM_DIAG(x)   do {rt_kprintf x;} while(0)
 #define LWIP_PLATFORM_ASSERT(x) do {rt_kprintf(x); sys_arch_assert(__FILE__, __LINE__);}while(0)
 
-#include <string.h>
-
-#define SYS_ARCH_DECL_PROTECT(level)
-#define SYS_ARCH_PROTECT(level)     rt_enter_critical()
-#define SYS_ARCH_UNPROTECT(level)   rt_exit_critical()
+#define SYS_ARCH_DECL_PROTECT(level)    register rt_base_t level
+#define SYS_ARCH_PROTECT(level)         do {level = rt_hw_interrupt_disable();} while(0)
+#define SYS_ARCH_UNPROTECT(level)       do {rt_hw_interrupt_enable(level);} while(0)
 
 #endif /* __ARCH_CC_H__ */
-

+ 4 - 6
components/net/lwip-2.0.2/src/arch/include/arch/cc.h

@@ -37,6 +37,7 @@
 
 #include <rthw.h>
 #include <rtthread.h>
+#include <string.h>
 
 #define U16_F "hu"
 #define S16_F "hd"
@@ -90,11 +91,8 @@ void sys_arch_assert(const char* file, int line);
 #define LWIP_PLATFORM_DIAG(x)   do {rt_kprintf x;} while(0)
 #define LWIP_PLATFORM_ASSERT(x) do {rt_kprintf(x); sys_arch_assert(__FILE__, __LINE__);}while(0)
 
-#include <string.h>
-
-#define SYS_ARCH_DECL_PROTECT(level)
-#define SYS_ARCH_PROTECT(level)     rt_enter_critical()
-#define SYS_ARCH_UNPROTECT(level)   rt_exit_critical()
+#define SYS_ARCH_DECL_PROTECT(level)    register rt_base_t level
+#define SYS_ARCH_PROTECT(level)         do {level = rt_hw_interrupt_disable();} while(0)
+#define SYS_ARCH_UNPROTECT(level)       do {rt_hw_interrupt_enable(level);} while(0)
 
 #endif /* __ARCH_CC_H__ */
-

+ 4 - 6
components/net/lwip-2.1.2/src/arch/include/arch/cc.h

@@ -37,6 +37,7 @@
 
 #include <rthw.h>
 #include <rtthread.h>
+#include <string.h>
 
 #define U16_F "hu"
 #define S16_F "hd"
@@ -90,11 +91,8 @@ void sys_arch_assert(const char* file, int line);
 #define LWIP_PLATFORM_DIAG(x)   do {rt_kprintf x;} while(0)
 #define LWIP_PLATFORM_ASSERT(x) do {rt_kprintf(x); sys_arch_assert(__FILE__, __LINE__);}while(0)
 
-#include "string.h"
-
-#define SYS_ARCH_DECL_PROTECT(level)
-#define SYS_ARCH_PROTECT(level)     rt_enter_critical()
-#define SYS_ARCH_UNPROTECT(level)   rt_exit_critical()
+#define SYS_ARCH_DECL_PROTECT(level)    register rt_base_t level
+#define SYS_ARCH_PROTECT(level)         do {level = rt_hw_interrupt_disable();} while(0)
+#define SYS_ARCH_UNPROTECT(level)       do {rt_hw_interrupt_enable(level);} while(0)
 
 #endif /* __ARCH_CC_H__ */
-