被神奇的printf搞到頭暈了。

使用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í)行的問題。


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频