解決目前NIOS 8.0無法加載LwIP模塊的可行性方法(基於DE2,DM9000網卡芯片)


因為實際應用需要基於LwIP實現網絡服務器,但目前NIOS 8.0版本已經不建議用戶使用它,直觀的現象是用戶不能直接調用LwIP的庫函數,我結合自己的摸索,總結出建立基於LwIP的軟件工程方法:

通訊板實現和上位機間的網絡通訊,具體建立工程步驟如下:

1、     打開NIOS IDE,點擊file菜單下的switch workplace,將工作空間換至本工程目錄下software文件夾下,點擊OK;

2、     建立新工程,新建NIOS II C/C++ Application,其中PTF文件選擇通訊(TT_COM)工程目錄下的TT_COM.ptf,隨后,選擇歷程模板Hello MicroC/OS-II,點確定。目前新建的軟件工程默認包含了MicroC/OS-II操作系統,在工程System Library屬性里面的RTOS Option里可以進一步配置。硬件工程中已經加載了定時器,頻率100HZ,最高可以設定為1KHZ,在軟件工程里進行相應調整,RTOS Option里將Enable code for Timer選中后,即可在Timer Management里配置時鍾節拍,這里注意與硬件時鍾節拍一致!!

3、     加載軟件工程源代碼文件,將我之前編寫的LwIP實現上位機與DM9000的TCP網絡通訊程序文件夾:main、inc、driver、task、config這五個文件夾直接拖至新建軟件工程下,刪除hello_ucosii.c文件。

4、     加載LwIP單元模塊,因為新版本的NIOS IDE已經不再支持用戶選用LwIP,但是模塊還在,只是用普通方式無法加載。這也是之前困擾我的問題。現在具體解決方法如下,打開新建軟件工程XXXX_syslib下的system.stf文件,我們會發現這是軟件配置文件,里面包含了MicroC/OS-II的設定參數,以<sys_defines>開始,以 </sys_defines>結束,因此從以前找到的包含LwIP舊版本工程里找的system.stf文件里的LwIP設定加載進工程里即可下面是LwIP加載信息,將其復制到system.stf文件中,定義MicroC/OS-II的設定參數結束后</sys_defines>語句下面即可。

<sw_component id="LWIP4UCOS_1" name="Lightweight TCP/IP Stack" sopc_component_dir="altera_lwip">

<sys_defines>

<define name="mem_size" quote="no" value="32768"/>

<define name="memp_num_pbuf" quote="no" value="32"/>

<define name="memp_num_netbuf" quote="no" value="32"/>

<define name="memp_num_udp_pcb" quote="no" value="8"/>

<define name="memp_num_tcp_pcb" quote="no" value="8"/>

<define name="memp_num_tcp_pcb_listen" quote="no" value="2"/>

<define name="memp_num_api_msg" quote="no" value="32"/>

<define name="memp_num_tcpip_msg" quote="no" value="32"/>

<define name="pbuf_pool_size" quote="no" value="16"/>

<define name="pbuf_pool_bufsize" quote="no" value="1536"/>

<define name="arp_table_size" quote="no" value="10"/>

<define name="ip_forward" quote="no" value="0"/>

<define name="icmp_ttl" quote="no" value="255"/>

<define name="lwip_dhcp" quote="no" value="1"/>

<define name="dhcp_does_arp_check" quote="no" value="1"/>

<define name="lwip_udp" quote="no" value="1"/>

<define name="lwip_tcp" quote="no" value="1"/>

<define name="tcp_wnd" quote="no" value="2048"/>

<define name="tcp_maxrtx" quote="no" value="4"/>

<define name="tcp_synmaxrtx" quote="no" value="4"/>

<define name="tcp_mss" quote="no" value="1476"/>

<define name="tcp_snd_buf" quote="no" value="32768"/>

<define name="lwip_stats" quote="no" value="0"/>

<define name="lwip_stack_size" quote="no" value="2048"/>

<define name="lwip_default_if" quote="yes" value="lan91c111"/>

</sys_defines>

</sw_component>

 

其中,關於LwIP的設定可以在這里修改,DHCP如果不需要,可以將<define name="lwip_dhcp" quote="no" value="1"/>改為<define name="lwip_dhcp" quote="no" value="0"/>;

5、     保存工程后,編譯,正常的化能夠編譯通過,並且在System Library屬性里面的Software Components選項卡里的LwIP,里面的選項雖然不能選,但是可以看到灰色的選項已經被我們選中。如果想修改LwIP的設置,可以在步驟4修改修改system.stf文件,或修改生成的system.h文件中關於LwIP的設定即可,相應設定如下:

/*

 * Lightweight TCP/IP Stack (Deprecated) configuration

 *

 */

 

#define MEM_SIZE 32768

#define MEMP_NUM_PBUF 32

#define MEMP_NUM_NETBUF 32

#define MEMP_NUM_UDP_PCB 8

#define MEMP_NUM_TCP_PCB 8

#define MEMP_NUM_TCP_PCB_LISTEN 2

#define MEMP_NUM_API_MSG 32

#define MEMP_NUM_TCPIP_MSG 32

#define PBUF_POOL_SIZE 16

#define PBUF_POOL_BUFSIZE 1536

#define ARP_TABLE_SIZE 10

#define IP_FORWARD 0

#define ICMP_TTL 255

#define LWIP_DHCP 0

#define DHCP_DOES_ARP_CHECK 1

#define LWIP_UDP 1

#define LWIP_TCP 1

#define TCP_WND 2048

#define TCP_MAXRTX 4

#define TCP_SYNMAXRTX 4

#define TCP_MSS 1476

#define TCP_SND_BUF 32768

#define LWIP_STATS 0

#define LWIP_STACK_SIZE 2048

#define LWIP_DEFAULT_IF "lan91c111"

 

這樣便可以加載LwIP,另外直接將DE2中寫好的DM9000驅動拖進來,修改讀取MAC地址的程序段,即可使用~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM