目前共有30篇帖子。
![]() |
最近在開發lwip,可以ping通。但是通過列印,看到單片機端已經發送成功,但是網頁沒有顯示。三次握手成功了,網頁發起請求之後,提示tcp Retransmission
|
![]() |
你的硬體用的是stm32原生的eth外設嗎?如果是的話要注意,lwip默認的網頁內容是存在flash裡面的,eth無法通過dma訪問flash裡面的內容,必須要先拷貝到sram裡面再用dma傳出去。
|
![]() |
還有就是,lwip裡面的網頁是分成幾段,組合成一個鍊表傳給ethernetif.c的low_level_output函數的。在用for循環memcpy拷貝到一個數組的時候一定要注意拷貝的目的地址的下標是不是總是0。
211.95.58.*:您說的是對的,我看了,雖然不是總是零,但是在發送正常數據之前,會有幾次亂碼數據發出去
![]()
[查看詳情]
|
![]() |
在哪裡拷貝網頁數據呢,還有是生成的fsdata.c中的數組是在哪裡調用的呢?
|
![]() |
![]() |
![]() |
試試看這個代碼行不行:
https://zh.purasbar.com/post.php?t=24569 |
![]() |
![]() ![]() ![]() static uint8_t sram_buffer[1024]; 只要發現q->payload是在flash裡面,馬上就複製到sram_buffer的某個下標處,再傳給Txbuffer[i].buffer。 ![]() 第一個節點 10位元組,位於sram 第二個節點 8位元組,位於flash 第三個節點 16位元組,位於sram 第四個節點 20位元組,位於flash 那就把第二個節點的8位元組複製到sram_buffer[0~7] 第四個節點的20位元組複製到sram_buffer[8-27] 然後把&sram_buffer[0]賦給Txbuffer[0].buffer 把&sram_buffer[8]賦給Txbuffer[2].buffer ![]() ![]()
[查看詳情]
|
![]() |
![]() |
![]() |
![]() |
![]() |
實在不行,也可以試一下把p鍊表的所有內容複製到一個數組中,然後只用Txbuffer[0]一整個發出去,不分段。
|