使用CH32V307,用WCHNET,弄著弄著,有時候程序改動一下。在庫初始化之后printf就沒輸出了,根本就沒調(diào)用底層的_write,后來拿ETH_IAP例程,把基本功能給刪了,就出現(xiàn)這樣的情況。最后定位到把
u8?SocketRecvBuf[WCHNET_MAX_SOCKET_NUM][RECE_BUF_LEN];
注釋掉就出問題(實際上已經(jīng)沒有代碼使用這個變量,只是占了空間)。真搞不懂是哪里的問題。真是服了。
使用CH32V307,用WCHNET,弄著弄著,有時候程序改動一下。在庫初始化之后printf就沒輸出了,根本就沒調(diào)用底層的_write,后來拿ETH_IAP例程,把基本功能給刪了,就出現(xiàn)這樣的情況。最后定位到把
u8?SocketRecvBuf[WCHNET_MAX_SOCKET_NUM][RECE_BUF_LEN];
注釋掉就出問題(實際上已經(jīng)沒有代碼使用這個變量,只是占了空間)。真搞不懂是哪里的問題。真是服了。
再仔細(xì)試了一下,這個變量換個名字也不行??戳艘幌耺ap文件,好像在
__attribute__((__aligned__(4))) SOCK_INF SocketInf[WCHNET_MAX_SOCKET_NUM]; 后面占用位置的才生效。然后我把這個大小改為
__attribute__((__aligned__(4))) SOCK_INF SocketInf[WCHNET_MAX_SOCKET_NUM*4];才正常。所以,是不是庫0x10例子里面定義的庫需要的變量大小有問題。
__attribute__((__aligned__(4)))?ETH_DMADESCTypeDef?DMARxDscrTab[ETH_RXBUFNB];????????????????????????/*?MAC接收描述符?,4字節(jié)對齊*/ __attribute__((__aligned__(4)))?ETH_DMADESCTypeDef?DMATxDscrTab[ETH_TXBUFNB];????????????????????????/*?MAC發(fā)送描述符,4字節(jié)對齊?*/ __attribute__((__aligned__(4)))?u8??MACRxBuf[ETH_RXBUFNB*ETH_MAX_PACKET_SIZE];???????????????????????/*?MAC接收緩沖區(qū),4字節(jié)對齊?*/ __attribute__((__aligned__(4)))?u8??MACTxBuf[ETH_TXBUFNB*ETH_MAX_PACKET_SIZE];???????????????????????/*?MAC發(fā)送緩沖區(qū),4字節(jié)對齊?*/ __attribute__((__aligned__(4)))?SOCK_INF?SocketInf[WCHNET_MAX_SOCKET_NUM];???????????????????????????/*?Socket信息表,4字節(jié)對齊?*/ const?u16?MemNum[8]?=?{WCHNET_NUM_IPRAW, ???????????????????????WCHNET_NUM_UDP, ???????????????????????WCHNET_NUM_TCP, ???????????????????????WCHNET_NUM_TCP_LISTEN, ???????????????????????WCHNET_NUM_TCP_SEG, ???????????????????????WCHNET_NUM_IP_REASSDATA, ???????????????????????WCHNET_NUM_PBUF, ???????????????????????WCHNET_NUM_POOL_BUF ???????????????????????}; const?u16?MemSize[8]?=?{WCHNET_MEM_ALIGN_SIZE(WCHNET_SIZE_IPRAW_PCB), ????????????????????????WCHNET_MEM_ALIGN_SIZE(WCHNET_SIZE_UDP_PCB), ????????????????????????WCHNET_MEM_ALIGN_SIZE(WCHNET_SIZE_TCP_PCB), ????????????????????????WCHNET_MEM_ALIGN_SIZE(WCHNET_SIZE_TCP_PCB_LISTEN), ????????????????????????WCHNET_MEM_ALIGN_SIZE(WCHNET_SIZE_TCP_SEG), ????????????????????????WCHNET_MEM_ALIGN_SIZE(WCHNET_SIZE_IP_REASSDATA), ????????????????????????WCHNET_MEM_ALIGN_SIZE(WCHNET_SIZE_PBUF)?+?WCHNET_MEM_ALIGN_SIZE(0), ????????????????????????WCHNET_MEM_ALIGN_SIZE(WCHNET_SIZE_PBUF)?+?WCHNET_MEM_ALIGN_SIZE(WCHNET_SIZE_POOL_BUF) ???????????????????????}; __attribute__((__aligned__(4)))u8?Memp_Memory[WCHNET_MEMP_SIZE]; __attribute__((__aligned__(4)))u8?Mem_Heap_Memory[WCHNET_RAM_HEAP_SIZE]; __attribute__((__aligned__(4)))u8?Mem_ArpTable[WCHNET_RAM_ARP_TABLE_SIZE];
您好,SocketRecvBuf是定義的協(xié)議棧的接收緩沖區(qū),這個使用是在協(xié)議棧內(nèi)部調(diào)用的。eth_driver.c下面的__attribute__定義的一些變量名稱不建議修改,否則會出現(xiàn)Lib庫里面一些變量未定義的編譯錯誤或者無法執(zhí)行的問題。