目前共有30篇帖子。 字體大小:較小 - 100% (默認)▼  內容轉換:台灣正體▼
 
點擊 回復
1330 29
lwip網頁顯示問題
kk
魔法學徒 一級
1樓 發表于:2024-5-10 15:31
最近在開發lwip,可以ping通。但是通過列印,看到單片機端已經發送成功,但是網頁沒有顯示。三次握手成功了,網頁發起請求之後,提示tcp Retransmission
一派掌門 二十級
2樓 發表于:2024-5-10 15:38
你的硬體用的是stm32原生的eth外設嗎?如果是的話要注意,lwip默認的網頁內容是存在flash裡面的,eth無法通過dma訪問flash裡面的內容,必須要先拷貝到sram裡面再用dma傳出去。
 
一派掌門 二十級
3樓 發表于:2024-5-10 15:41
還有就是,lwip裡面的網頁是分成幾段,組合成一個鍊表傳給ethernetif.c的low_level_output函數的。在用for循環memcpy拷貝到一個數組的時候一定要注意拷貝的目的地址的下標是不是總是0。
 
211.95.58.*:您說的是對的,我看了,雖然不是總是零,但是在發送正常數據之前,會有幾次亂碼數據發出去,圖貼在下面了
  2024-5-11 10:18 回復
kk
魔法學徒 一級
4樓 發表于:2024-5-11 09:25
在哪裡拷貝網頁數據呢,還有是生成的fsdata.c中的數組是在哪裡調用的呢?
 
巨大八爪鱼:fsdata.c裡面的數據屬於應用層。lwip在前面加上tcp層,ip層和ethernet層的頭部欄位後,再發出去,直接printf列印這些頭部欄位的內容肯定會亂碼。
  2024-5-11 11:12 回復
巨大八爪鱼:lwip給fsdata.c裡面的數據加了頭部欄位,形成鍊表後,才傳給ethernetif.c的low_level_output發送函數。
  2024-5-11 11:14 回復
kk
魔法學徒 一級
5樓 發表于:2024-5-11 10:20
 
巨大八爪鱼:可以截圖一下low_level_output函數的代碼嗎?
還有就是你用的是什麼網口?是dp83848還是lan8720?還是enc28j60?
  2024-5-11 11:16 回復
kk:回復 @巨大八爪魚:lan8720
  2024-5-11 11:25 回復
一派掌門 二十級
6樓 發表于:2024-5-11 11:17
試試看這個代碼行不行:
https://zh.purasbar.com/post.php?t=24569
 
巨大八爪鱼:這個代碼可以用不?
  2024-5-11 11:56 回復
kk
魔法學徒 一級
7樓 發表于:2024-5-11 11:25
 
巨大八爪鱼:printf %p列印一下q->payload地址,如果是0x08000000開頭的flash地址,那肯定發不出去,發送前必須複製到0x20000000開頭的sram裡面。
  2024-5-11 11:29 回復
巨大八爪鱼:你可以準備一個大數組:
static uint8_t sram_buffer[1024];
只要發現q->payload是在flash裡面,馬上就複製到sram_buffer的某個下標處,再傳給Txbuffer[i].buffer。
  2024-5-11 11:32 回復
巨大八爪鱼:假設p鍊表有四個節點:
第一個節點 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
  2024-5-11 11:37 回復
kk:回復 @巨大八爪魚:這個我看了,都是在0x20000000開頭的sram里
  2024-5-11 11:40 回復
巨大八爪鱼:回復 @kk:列印出來看看。貼出來。
  2024-5-11 11:46 回復
kk:回復 @巨大八爪魚
  2024-5-11 11:50 回復
巨大八爪鱼:printf("%p: %.*s", q->payload, q->len, q->payload);
  2024-5-11 11:51 回復
kk:回復 @巨大八爪魚:好像不能直接回復圖片,在樓下了
  2024-5-11 11:51 回復
kk:回復 @巨大八爪魚:這裡沒有列印 q->len
  2024-5-11 11:53 回復
巨大八爪鱼:一定要用%.*s列印指定長度的字符串,長度是q->len。
  2024-5-11 11:54 回復
kk
魔法學徒 一級
8樓 發表于:2024-5-11 11:50
 
巨大八爪鱼:列印一下q->len
  2024-5-11 11:53 回復
kk:回復 @巨大八爪魚:嗯,第二位就是len
  2024-5-11 11:57 回復
kk
魔法學徒 一級
9樓 發表于:2024-5-11 11:56
 
巨大八爪鱼:那這張圖看起來沒啥問題了。。。
試試10樓和6樓的方法呢
  2024-5-11 12:13 回復
kk:回復 @巨大八爪魚:好
  2024-5-11 12:23 回復
一派掌門 二十級
10樓 發表于:2024-5-11 11:59
實在不行,也可以試一下把p鍊表的所有內容複製到一個數組中,然後只用Txbuffer[0]一整個發出去,不分段。
 

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:1330 回複數:29
評論數: ?
作者:kk
最後回復:kk
最後回復時間:2024-5-11 12:23
 
©2010-2025 Purasbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。