移植/熟悉过microchip TCP/IP的大虾进来帮我看看呀,求助中...
客户端使用嵌入式开发的设备(PIC18F66J60),想移植microchip TCP/IP的协议。客户端很简单,就是向服务器IP地址为目的IP打包数据发送和接收服务器往本IP地址的数据,一切以IP地址为唯一沟通身份,不使用DHCP。
如果想达到这样的目的,需要加载哪些TCPIP的协议呀?
Announce.c
ARP.c
DHCP.c
DNS.c
Helpers.c
ICMP.c
IP.c
MPFS.c
SPIRAM.c
StackTsk.c
TCP.c
Tick.c
UDP.c
SSL.c
FTP.c
HTTP2
NBNS.c
……
对TCPIP不了解呀,大侠指点一二吧。。。。 你读一下每个文件的说明,在最前面都有讲到,要实现什么功能才需要将相应的头文件include进去。
按照你的要求,TCP、IP、ARP是跑不了的
Announce.c是声明,必须。然后StackTsk.c是最主要的程序调度,必须有。
最后楼主你想使用什么协议(应用层的)需要自行编写或者使用标准的协议,常见的有HTTP,邮件、ftp等,我用过MODBUS TCP。
如果要加入ping支持,还需要把ICMP.C添加进去。
然后建议你看看官方文档AN833. kevin_me 发表于 2012-10-24 15:37 static/image/common/back.gif
你读一下每个文件的说明,在最前面都有讲到,要实现什么功能才需要将相应的头文件include进去。
按照你的要 ...
嗯嗯,说得很好,基本上现在都是这么样做。AN833文档已经看过了,里面详细描述了各协议之间的关系与功能,但我本身对TCP/IP网络没什么概念,比如我知道传输层有三种方式:TCP,UDP,ICMP,我会选择用TCP方式来传输,为什么,不知道。
你说的Announce.c我有点疑问:
这个是原协议栈里面的注释,看红色标识行。
=================================================================
* FileName: Announce.c
* Dependencies: UDP
* Processor: PIC18, PIC24F, PIC24H, dsPIC30F, dsPIC33F, PIC32
* Compiler: Microchip C32 v1.05 or higher
* Microchip C30 v3.12 or higher
* Microchip C18 v3.30 or higher
* HI-TECH PICC-18 PRO 9.63PL2 or higher
* Company: Microchip Technology, Inc.
*
* Software License Agreement
==================================================================
// Microchip Embedded Ethernet Device Discoverer server/client
如果我不使用UDP作为传输方式的话,是不是就不需要加入这个协议了呢? 本帖最后由 worksnfkpynn99 于 2012-10-24 16:05 编辑
kevin_me 发表于 2012-10-24 15:37 static/image/common/back.gif
你读一下每个文件的说明,在最前面都有讲到,要实现什么功能才需要将相应的头文件include进去。
按照你的要 ...
好像挺少人讨论这个问题的。。。。 “如果更看中的是实时性,而不是准确性的的话,当然要选择udp了,tcp的连续性好,但是实时性差。比如视频会议都会选择udp协议来传输,因为视频里丢几帧数据对于整个图像来说没有什么大碍。”
这是我的一个工程:
你可以从上图看出来,很多头文件都是不必要的,官方的工程做的大而全。我的工程对于TCP/IP这块非常简单,就是TCP、ARP、ICMP、和MODBUS TCP的应用层,而且只做服务器端。
如果你想做客户端,则需要做更多额外的工作,比如主动发送ARP、创建MAC地址池等;如果你的客户端与服务器不在一个网段,需用通过路由来转发,则要注意整个通信链路对你控制器端口的影响,做好过滤无效包、广播包什么的。
老兄你用的是ENC28J60这个片子还是ENC424 or624? 28j60这片子有bug,编程阶段你要读一读勘误表,有bug修复的指导。 这么难, mark,下次用 kevin_me 发表于 2012-10-26 15:13 static/image/common/back.gif
你可以从上图看出来,很多头文件都是不必要的,官方的工程做的大而全。我的工程对于TCP/IP这块非常简单,就 ...
我是直接使用PIC18F97J60(MCU+28J60)系列的单片机(客户端设备),现在已经完成初步的调试了,并实现了UDP的通讯方式(局域网)。使用了ARP、ICMP、UDP……等协议,支持PING响应。
谢谢你的指导。 worksnfkpynn99 发表于 2012-11-15 10:15 static/image/common/back.gif
我是直接使用PIC18F97J60(MCU+28J60)系列的单片机(客户端设备),现在已经完成初步的调试了,并实现了 ...
好贴,我也在搞这个,想做个WIFI电子标签的。还是个新手,多指点啊 记忆中是5年前流行过一段时间,官方出个DEMO,当时仿照外围电路软件直接烧进去,然后慢慢裁剪软件,其他就没什么了,挺简单的。 peter_yu 发表于 2012-11-17 11:21 static/image/common/back.gif
记忆中是5年前流行过一段时间,官方出个DEMO,当时仿照外围电路软件直接烧进去,然后慢慢裁剪软件,其他就 ...
我也差不多是这么样做的,可以很讯速地装载TCPIP协议。
但之后修改的时候会出现这样那样的问题。感觉暂时官方论坛才有人讨论,所以遇到问题的时候,寻求帮助也是件痛苦的事。 建议先了解一下有关以太网及TCPIP协议的基础文档,应用中选择对自己有用的部分就可以了,他就像WORD软件,相当部分的功能可能这辈子你也不会去用。TCPIP协议栈是很复杂的,如果是工业应用,建议选择硬件协议栈芯片,或者买标准模块,研华、MOSA等,对价格敏感的话选国内的。 官方的东西不允许商业化的吧 ........ 你们这么用也属于盗版了 ...... 大家说的都这么简单,哎对我打击很大。一个产品领导说要实现以太网(我感觉可以不实现,意义不大),时间也不充裕,现在我根本不知道怎么办。CPU用PIC32mx575,网络芯片用ENC424J600,菜鸟我还是第一次用PIC32,智商又低{:dizzy:} Wxy8030 发表于 2012-11-19 17:20 static/image/common/back.gif
官方的东西不允许商业化的吧 ........ 你们这么用也属于盗版了 ......
好像是使用他家的器件就OK的。 Wxy8030 发表于 2012-11-19 17:20 static/image/common/back.gif
官方的东西不允许商业化的吧 ........ 你们这么用也属于盗版了 ......
人家都公开下载,如果你不是做到跨国公司跑去美国抢microchip的饭碗,就一沧海一粟的小公司,谁有那闲功夫去查你是不是用的他家的microchip TCPIP ?更何况这还是在中国?
苹果为什么老找三星打官司,但中国高仿的苹果的,周街都是,明目张胆在柜台摆卖,为什么苹果找他们的茬?一个道理。
只是题外话,仅代表个人看法。 本帖最后由 worksnfkpynn99 于 2013-2-4 17:02 编辑
问题:最近使用Microchip TCP/IP协议栈,在应用UDP通讯的时候,偶尔会出现读不到数据的情况。(感觉每次出现这种情况都是在当:设备发送数据,服务器立马(100ms内)回复的时候设备就一直读不到了。)
平台:MPLAB V8.86
编译器:MPLAB C18 V3.44
设备硬件:PIC18F66J60
工作方式是:设备通过UDP的方式与远端服务器进行数据交换。指定收发端口号为:8889/8890,指定服务器的IP地址和MAC地址。
不知道有没有研究过Microchip TCP/IP协议栈的大侠,下面是我的UDP收发代码,参考的是Announce.c 文件里"void DiscoveryTask(void );" 程序结构:void MyUDPTask(void)
{
static enum {
MyUDP_HOME = 0,
MyUDP_READ,
MyUDP_SEND,
MyUDP_DISABLED
} MyUDPSM = MyUDP_HOME;
static UDP_SOCKET MySocket;
NODE_INFO Remote;
switch(MyUDPSM)
{
case MyUDP_HOME:
if(!MACIsLinked())
return;
if(ServerIPAddress==0xFF || ServerIPAddress==0x00)
{
memset(&Remote, 0xFF, sizeof(Remote));
}
else
{
//only read from or send to my server.
Remote.MACAddr.v=ServerMACAddress;
Remote.MACAddr.v=ServerMACAddress;
Remote.MACAddr.v=ServerMACAddress;
Remote.MACAddr.v=ServerMACAddress;
Remote.MACAddr.v=ServerMACAddress;
Remote.MACAddr.v=ServerMACAddress;
Remote.IPAddr.Val = ServerIPAddress;
Remote.IPAddr.Val = Remote.IPAddr.Val<<8 | ServerIPAddress;
Remote.IPAddr.Val = Remote.IPAddr.Val<<8 | ServerIPAddress;
Remote.IPAddr.Val = Remote.IPAddr.Val<<8 | ServerIPAddress;
}
MySocket = UDPOpenEx((DWORD)&Remote,UDP_OPEN_NODE_INFO,UDPREAD_PORT,UDPSEND_PORT);
if(MySocket == INVALID_UDP_SOCKET)
return;
else
MyUDPSM = MyUDP_READ;
break;
case MyUDP_READ:
if(!UDPIsGetReady(MySocket))
{
if(RXTimes>30)
MyUDPSM = MyUDP_SEND;
else
RXTimes++;
return;
}
UDPGetArray(ReadBuffer,64);
UDPDiscard();
//Here is my read app.
for(i=0;i<64;i++)
{
ReadBuffer = 0x00;
}
MyUDPSM = MyUDP_SEND;
case MyUDP_SEND:
if(!UDPIsPutReady(MySocket))
{
return;
}
//Here is my send app
UDPPutArray((BYTE*)&SendBuffer,64);
UDPFlush();
for(i=0;i<64;i++)
{
SendBuffer = 0x00;
}
MyUDPSM = MyUDP_DISABLED;
break;
case MyUDP_DISABLED:
RXTimes = 0;
UDPClose(MySocket);
MyUDPSM = MyUDP_HOME;
break;
}
} 有知晓的友友帮我看看,貌似不知道哪里不对,一头雾水。。。。 shjw 发表于 2012-11-22 09:56 static/image/common/back.gif
大家说的都这么简单,哎对我打击很大。一个产品领导说要实现以太网(我感觉可以不实现,意义不大),时间也 ...
不太会PIC32,不过PIC32有带网络接口的开发板,买块来调通了,再照猫画虎搬到自己板子上,成功就容易些。 官方开发板的程序都是能保证好用的。 kevin_me 发表于 2012-10-26 15:06
“如果更看中的是实时性,而不是准确性的的话,当然要选择udp了,tcp的连续性好,但是实时性差。比如视频会 ...
本人是菜鸟,想用PIC Explorer 16和 Wi-Fi PICtail MRF24WB0MA 做一个 mudbus rtu的无线传输。
请教一下您的这个软件,是和这个相关吗?
mudbus tcp是每个frame每个frame 的传输还是多个frame 包在一起呢!
十分感激!
页:
[1]