У меня есть оценочная плата PIC32 Ethernet , и я пытаюсь заставить ее отправлять простой пакет UDP.
Вот мой код:
/*
* This macro uniquely defines this file as the main entry point.
* There should only be one such definition in the entire project,
* and this file must define the AppConfig variable as described below.
*/
#define THIS_IS_STACK_APPLICATION
// Include all headers for any enabled TCPIP Stack functions
#include "TCPIP Stack/TCPIP.h"
#include "TCPIPConfig.h"
#include <plib.h>
#include <p32xxxx.h>
// Declare AppConfig structure and some other supporting stack variables
APP_CONFIG AppConfig;
BYTE AN0String[8];
int main()
{
static enum
{
SM_OPEN,
SM_BROADCAST,
} smState = SM_OPEN;
typedef BYTE UDPSocket;
UDP_SOCKET s;
NODE_INFO myRemoteNode;
myRemoteNode.IPAddr.v[0]=169;
myRemoteNode.IPAddr.v[1]=254;
myRemoteNode.IPAddr.v[2]=2;
myRemoteNode.IPAddr.v[3]=2;
myRemoteNode.MACAddr.v[0]=0x01;
myRemoteNode.MACAddr.v[1]=0xA0;
myRemoteNode.MACAddr.v[2]=0xF0;
myRemoteNode.MACAddr.v[3]=0x7B;
myRemoteNode.MACAddr.v[4]=0xE5;
myRemoteNode.MACAddr.v[5]=0x45;
TRISD = 0xff00; // tri-state register for the LED ports
// Initialize UDP
UDPInit();
while(1)
{
switch(smState)
{
case SM_OPEN:
// Talk to a remote DHCP server.
s = UDPOpen(68, &myRemoteNode, 67);
if ( s == INVALID_UDP_SOCKET )
{
PORTD = 0x01; // Switch on the red LED on PIC32 ethernet starter kit to indicate an error
// Socket is not available
// Return error.
}
else
// Broadcast DHCP Broadcast message.
smState = SM_BROADCAST;
break;
case SM_BROADCAST:
PORTD = 0x02; // Switch on the yellow LED to indicate the connection
if ( UDPIsPutReady(s) )
{
// Turn on yellow and green LED to indicate UDP is put ready
PORTD = 0x06;
// Socket is ready to transmit. Transmit the data...
// Note that there is DHCPSocket parameter in UDPPut.
// This UDPPut call will use active socket
// as set by UDPIsPutReady() - that is DHCPSocket.
UDPPut(0x55);
// Now transmit it.
UDPFlush();
}
UDPClose(s);
break;
}
}
}
Когда я компилирую и запускаю код в MPLAB IDE, похоже, что плата отправляет два пакета, а затем ничего. Я подключил плату непосредственно к ноутбуку с Wireshark, но Wireshark не смог обнаружить ни одного полученного пакета.
Мне удалось успешно получить плату для запуска демонстрации http-сервера, использующего TCP, поэтому я знаю, что это не проблема с оборудованием.