用DMTimer定时为5ms,每次发一个以太包。
初始化一块全局变量用来当做buf,调用lwip的初始化buf的函数,和发ip包的函数,由于是自己申请的全局变量,也不会释放。
初始时显示有203个bd,也就是0xcc,发过233个包后,显示cpsw的bd耗尽,发不出去了
看了下,bd增加是在以cpsw发包的中断中。
DMTimer的定时中断优先级是0,cpsw的发包的中断的优先级也是0。把前者优先级降低,改为1后也无效。
lei lu1:
用jtag跟踪后,发展是cpsw的dma操作后,eoq字段没有设置为1造成的bd耗尽,而这个设置是emac也就是硬件来设置的。请问在什么情况下会导致硬件不设置eoq字段了呢,而且是在正常发送19包以后?
lei lu1:
回复 lei lu1:
或者说,想把一块静态存储区的内容用ip包发包发出去,有什么简单高效的方法?
lei lu1:
回复 lei lu1:
我试了下原有的函数etharp_raw它的参数除了netif的指针,其他都是协议中的字段,不涉及任何buf或bd的参数,因为都在在内部完成的。结果发了一百多个包后,现象和上面一样。没有设置eoq字段而导致bd耗尽。