fix sys_arch.c

This commit is contained in:
lr 2024-05-29 18:34:37 +08:00
parent 2f4a29860c
commit 67f6b4641c
2 changed files with 45 additions and 48 deletions

View File

@ -235,6 +235,7 @@
#define LWIP_NETIF_DEBUG #define LWIP_NETIF_DEBUG
#define LWIP_ETHARP_DEBUG #define LWIP_ETHARP_DEBUG
#define LWIP_API_MSG_DEBUG #define LWIP_API_MSG_DEBUG
#define LWIP_SYS_DEBUG
#endif #endif
#ifdef LWIP_DEBUG #ifdef LWIP_DEBUG

View File

@ -9,7 +9,6 @@
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details. * See the Mulan PSL v2 for more details.
*/ */
#include "debug.h"
#include <lwip/arch.h> #include <lwip/arch.h>
#include <lwip/opt.h> #include <lwip/opt.h>
@ -85,6 +84,7 @@ err_t sys_sem_new(sys_sem_t* sem, u8_t count)
void sys_sem_free(sys_sem_t* sem) void sys_sem_free(sys_sem_t* sem)
{ {
LWIP_ASSERT("invalid sem", sem != NULL);
#if SYS_STATS #if SYS_STATS
--lwip_stats.sys.sem.used; --lwip_stats.sys.sem.used;
#endif /* SYS_STATS */ #endif /* SYS_STATS */
@ -93,17 +93,19 @@ void sys_sem_free(sys_sem_t* sem)
int sys_sem_valid(sys_sem_t* sem) int sys_sem_valid(sys_sem_t* sem)
{ {
LWIP_ASSERT("invalid sem", sem != NULL);
return (*sem > 0); return (*sem > 0);
} }
void sys_sem_set_invalid(sys_sem_t* sem) void sys_sem_set_invalid(sys_sem_t* sem)
{ {
LWIP_ASSERT("invalid sem", sem != NULL);
*sem = -1; *sem = -1;
} }
u32_t sys_arch_sem_wait(sys_sem_t* sem, u32_t timeout) u32_t sys_arch_sem_wait(sys_sem_t* sem, u32_t timeout)
{ {
s32_t wait_time = 0; LWIP_ASSERT("invalid sem", sem != NULL);
if (*sem <= 0) if (*sem <= 0)
return SYS_ARCH_TIMEOUT; return SYS_ARCH_TIMEOUT;
@ -114,6 +116,7 @@ u32_t sys_arch_sem_wait(sys_sem_t* sem, u32_t timeout)
void sys_sem_signal(sys_sem_t* sem) void sys_sem_signal(sys_sem_t* sem)
{ {
LWIP_ASSERT("invalid sem", sem != NULL);
semaphore_signal(*sem); semaphore_signal(*sem);
} }
@ -151,7 +154,12 @@ sys_thread_t sys_thread_new(const char* name, lwip_thread_fn function, void* arg
err_t sys_mbox_new(sys_mbox_t* mbox, int size) err_t sys_mbox_new(sys_mbox_t* mbox, int size)
{ {
// if (mbox == SYS_MBOX_NULL) {
// printf("lw: [%s] alloc %d mbox %p failed\n", __func__, size, mbox);
// return ERR_MEM;
// }
LWIP_UNUSED_ARG(size);
mbox->first = mbox->last = 0; mbox->first = mbox->last = 0;
sys_sem_new(&mbox->not_empty, 0); sys_sem_new(&mbox->not_empty, 0);
sys_sem_new(&mbox->not_full, 0); sys_sem_new(&mbox->not_full, 0);
@ -159,50 +167,40 @@ err_t sys_mbox_new(sys_mbox_t* mbox, int size)
mbox->wait_send = 0; mbox->wait_send = 0;
mbox->valid = 1; mbox->valid = 1;
#if SYS_STATS
++lwip_stats.sys.mbox.used;
if (lwip_stats.sys.mbox.max < lwip_stats.sys.mbox.used) {
lwip_stats.sys.mbox.max = lwip_stats.sys.mbox.used;
}
#endif /* SYS_STATS */
if (mbox == SYS_MBOX_NULL) {
printf("lw: [%s] alloc %d mbox %p failed\n", __func__, size, mbox);
return ERR_MEM;
}
printf("lw: [%s] alloc %d mbox %p ok!\n", __func__, size, mbox); printf("lw: [%s] alloc %d mbox %p ok!\n", __func__, size, mbox);
return ERR_OK; return ERR_OK;
} }
void sys_mbox_free(sys_mbox_t* mbox) void sys_mbox_free(sys_mbox_t* mbox)
{ {
if (mbox != SYS_MBOX_NULL){ LWIP_ASSERT("invalid mbox", mbox != NULL);
sys_arch_sem_wait(&mbox->mutex, 0); sys_arch_sem_wait(&mbox->mutex, 0);
sys_sem_free(&mbox->not_empty); sys_sem_free(&mbox->not_empty);
sys_sem_free(&mbox->not_full); sys_sem_free(&mbox->not_full);
sys_sem_free(&mbox->mutex); sys_sem_free(&mbox->mutex);
free(mbox); free(mbox);
}
} }
int sys_mbox_valid(sys_mbox_t* mbox) int sys_mbox_valid(sys_mbox_t* mbox)
{ {
LWIP_ASSERT("invalid mbox", mbox != NULL);
return (mbox->valid == 1); return (mbox->valid == 1);
} }
void sys_mbox_set_invalid(sys_mbox_t* mbox) void sys_mbox_set_invalid(sys_mbox_t* mbox)
{ {
LWIP_ASSERT("invalid mbox", mbox != NULL);
mbox->valid = 0; mbox->valid = 0;
} }
void sys_mbox_post(sys_mbox_t* q, void* msg) void sys_mbox_post(sys_mbox_t* q, void* msg)
{ {
u8_t first; u8_t first;
if (q == NULL) LWIP_ASSERT("invalid mbox", q != NULL);
printf("lw: [%s] alloc %d mbox %p failed\n", __func__, q);
sys_arch_sem_wait(&q->mutex, 0); sys_arch_sem_wait(&q->mutex, 0);
printf("sys_mbox_post: mbox %p msg %p\n", (void *)q, (void *)msg); LWIP_DEBUGF(SYS_DEBUG, ("sys_mbox_post: mbox %p msg %p\n", (void *)q, (void *)msg));
// (q->last + 1) >= (q->first + SYS_MBOX_SIZE) means mbox is full // (q->last + 1) >= (q->first + SYS_MBOX_SIZE) means mbox is full
while ((q->last + 1) >= (q->first + SYS_MBOX_SIZE)) { while ((q->last + 1) >= (q->first + SYS_MBOX_SIZE)) {
@ -233,12 +231,12 @@ void sys_mbox_post(sys_mbox_t* q, void* msg)
err_t sys_mbox_trypost(sys_mbox_t* q, void* msg) err_t sys_mbox_trypost(sys_mbox_t* q, void* msg)
{ {
u8_t first; u8_t first;
if (q == NULL) LWIP_ASSERT("invalid mbox", q != NULL);
printf("lw: [%s] alloc %d mbox %p failed\n", __func__, q);
sys_arch_sem_wait(&q->mutex, 0); sys_arch_sem_wait(&q->mutex, 0);
printf("sys_mbox_trypost: mbox %p msg %p\n",(void *)q, (void *)msg); LWIP_DEBUGF(SYS_DEBUG, ("sys_mbox_trypost: mbox %p msg %p\n",
(void *)q, (void *)msg));
if ((q->last + 1) >= (q->first + SYS_MBOX_SIZE)) { if ((q->last + 1) >= (q->first + SYS_MBOX_SIZE)) {
sys_sem_signal(&q->mutex); sys_sem_signal(&q->mutex);
@ -271,8 +269,7 @@ err_t sys_mbox_trypost_fromisr(sys_mbox_t* q, void* msg)
u32_t sys_arch_mbox_fetch(sys_mbox_t* q, void** msg, u32_t timeout) u32_t sys_arch_mbox_fetch(sys_mbox_t* q, void** msg, u32_t timeout)
{ {
if (q == NULL) LWIP_ASSERT("invalid mbox", q != NULL);
printf("lw: [%s] alloc %d mbox %p failed\n", __func__, q);
sys_arch_sem_wait(&q->mutex, 0); sys_arch_sem_wait(&q->mutex, 0);
@ -284,11 +281,11 @@ u32_t sys_arch_mbox_fetch(sys_mbox_t* q, void** msg, u32_t timeout)
} }
if (msg != NULL) { if (msg != NULL) {
printf("sys_mbox_fetch: mbox %p msg %p\n", (void *)q, *msg); LWIP_DEBUGF(SYS_DEBUG,("sys_mbox_fetch: mbox %p msg %p\n", (void *)q, *msg));
*msg = q->msgs[q->first % SYS_MBOX_SIZE]; *msg = q->msgs[q->first % SYS_MBOX_SIZE];
} }
else{ else{
printf("sys_mbox_fetch: mbox %p, null msg\n", (void *)q); LWIP_DEBUGF(SYS_DEBUG,("sys_mbox_fetch: mbox %p, null msg\n", (void *)q));
} }
q->first++; q->first++;
@ -303,9 +300,8 @@ u32_t sys_arch_mbox_fetch(sys_mbox_t* q, void** msg, u32_t timeout)
} }
u32_t sys_arch_mbox_tryfetch(sys_mbox_t* q, void** msg) u32_t sys_arch_mbox_tryfetch(sys_mbox_t* q, void** msg)
{ {
if (q == NULL) LWIP_ASSERT("invalid mbox", q != NULL);
printf("lw: [%s] alloc %d mbox %p failed\n", __func__, q);
sys_arch_sem_wait(&q->mutex, 0); sys_arch_sem_wait(&q->mutex, 0);
if (q->first == q->last) { if (q->first == q->last) {
@ -314,11 +310,11 @@ u32_t sys_arch_mbox_tryfetch(sys_mbox_t* q, void** msg)
} }
if (msg != NULL) { if (msg != NULL) {
printf("sys_mbox_tryfetch: mbox %p msg %p\n", (void *)q, *msg); LWIP_DEBUGF(SYS_DEBUG,("sys_mbox_tryfetch: mbox %p msg %p\n", (void *)q, *msg));
*msg = q->msgs[q->first % SYS_MBOX_SIZE]; *msg = q->msgs[q->first % SYS_MBOX_SIZE];
} }
else{ else{
printf("sys_mbox_tryfetch: mbox %p, null msg\n", (void *)q); LWIP_DEBUGF(SYS_DEBUG,("sys_mbox_tryfetch: mbox %p, null msg\n", (void *)q));
} }
q->first++; q->first++;
@ -346,7 +342,7 @@ struct netif gnetif;
int lwip_config_tcp(char* ip, char* mask, char* gw) int lwip_config_tcp(char* ip, char* mask, char* gw)
{ {
printf("lw: [%s] start ...\n", __func__); LWIP_DEBUGF(SYS_DEBUG,("lw: [%s] start ...\n", __func__));
IP4_ADDR(&net_ipaddr, ip[0], ip[1], ip[2], ip[3]); IP4_ADDR(&net_ipaddr, ip[0], ip[1], ip[2], ip[3]);
IP4_ADDR(&net_netmask, mask[0], mask[1], mask[2], mask[3]); IP4_ADDR(&net_netmask, mask[0], mask[1], mask[2], mask[3]);
IP4_ADDR(&net_gw, gw[0], gw[1], gw[2], gw[3]); IP4_ADDR(&net_gw, gw[0], gw[1], gw[2], gw[3]);
@ -354,7 +350,7 @@ int lwip_config_tcp(char* ip, char* mask, char* gw)
tcpip_init(NULL, NULL); tcpip_init(NULL, NULL);
#ifndef NETIF_ENET_INIT_FUNC #ifndef NETIF_ENET_INIT_FUNC
printf("Not Netif driver for Eport 0\n"); LWIP_DEBUGF(SYS_DEBUG,("Not Netif driver for Eport 0\n"));
return 0; return 0;
#endif #endif
@ -376,16 +372,16 @@ int lwip_config_tcp(char* ip, char* mask, char* gw)
netif_set_down(&gnetif); netif_set_down(&gnetif);
return -1; return -1;
} }
printf("\r\n************************************************\r\n"); LWIP_DEBUGF(SYS_DEBUG,("\r\n************************************************\r\n"));
printf(" Network Configuration\r\n"); LWIP_DEBUGF(SYS_DEBUG,(" Network Configuration\r\n"));
printf("************************************************\r\n"); LWIP_DEBUGF(SYS_DEBUG,("************************************************\r\n"));
printf(" IPv4 Address : %u.%u.%u.%u\r\n", ((u8_t*)&net_ipaddr)[0], ((u8_t*)&net_ipaddr)[1], LWIP_DEBUGF(SYS_DEBUG,(" IPv4 Address : %u.%u.%u.%u\r\n", ((u8_t*)&net_ipaddr)[0], ((u8_t*)&net_ipaddr)[1],
((u8_t*)&net_ipaddr)[2], ((u8_t*)&net_ipaddr)[3]); ((u8_t*)&net_ipaddr)[2], ((u8_t*)&net_ipaddr)[3]));
printf(" IPv4 Subnet mask : %u.%u.%u.%u\r\n", ((u8_t*)&net_netmask)[0], ((u8_t*)&net_netmask)[1], LWIP_DEBUGF(SYS_DEBUG,(" IPv4 Subnet mask : %u.%u.%u.%u\r\n", ((u8_t*)&net_netmask)[0], ((u8_t*)&net_netmask)[1],
((u8_t*)&net_netmask)[2], ((u8_t*)&net_netmask)[3]); ((u8_t*)&net_netmask)[2], ((u8_t*)&net_netmask)[3]));
printf(" IPv4 Gateway : %u.%u.%u.%u\r\n", ((u8_t*)&net_gw)[0], ((u8_t*)&net_gw)[1], LWIP_DEBUGF(SYS_DEBUG,(" IPv4 Gateway : %u.%u.%u.%u\r\n", ((u8_t*)&net_gw)[0], ((u8_t*)&net_gw)[1],
((u8_t*)&net_gw)[2], ((u8_t*)&net_gw)[3]); ((u8_t*)&net_gw)[2], ((u8_t*)&net_gw)[3]));
printf("************************************************\r\n"); LWIP_DEBUGF(SYS_DEBUG,("************************************************\r\n"));
return 0; return 0;
#endif #endif
} }