나는 스텔라리스 ® LM3S6965 평가 보드 인 Cortex M3와 협력하고있다. NTP 서버에 UDP 패킷을 보내려고합니다. 나는 며칠이나 며칠을 찾고 있었다.UDP 패키지 (lwip, Cortex M3, 스텔라리스 LM3S6965 평가 보드) 보내기
하지만 작동하지 않습니다. 누군가 나를 도울 수 있습니까? callback 함수가 호출되지 않는 것 같아요. 프로그램의
int main(void){
sendUDP();
}
void sendUDP(void){
//UDP
struct ip_addr dstaddr;
struct ip_addr srcaddr;
struct udp_pcb * pcb;
u16_t * dst_port;
struct pbuf * pb;
char str[512]="Test Sander";
IP4_ADDR(&dstaddr,65,55,21,24); // time.windows.com
IP4_ADDR(&srcaddr,192,168,1,10); // cortex
dst_port = 123;
pcb = udp_new();
RIT128x96x4Enable(1000000);
RIT128x96x4StringDraw("UDP CONNECT", 45, 45, 15);
udp_bind(pcb,&srcaddr,&dst_port);
udp_connect(pcb,&dstaddr,&dst_port);
pb = pbuf_alloc(PBUF_TRANSPORT, 512, PBUF_REF);
pb->payload = str;
pb->len = pb->tot_len = 512;
udp_sendto(pcb, &pb,&dstaddr,dst_port);
//udp_send(pcb, &pb);
udp_recv(pcb, RecvUTPCallBack, NULL);
pbuf_free(pb);
udp_remove(pcb);
}
// Function gets called when we recieve data
err_t RecvUTPCallBack(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port){
RIT128x96x4Enable(1000000);
RIT128x96x4StringDraw("ENTERING CALLBACK", 40, 40, 11);
volatile int totaal_lengte=0;
totaal_lengte = p->tot_len;
volatile int line=40;
while(1){
RIT128x96x4Enable(1000000);
RIT128x96x4StringDraw(p->payload+1, 0, line, 15);
line+=8;
if(p->len != p->tot_len){
p=p->next;
}
else break;
}
pbuf_free(p);
}
전체 코드 : http://codepaste.net/uuy8sg
당신이 LwIP있는 contrib 페이지에서 NTP 코드를 시도 했습니까 -> http://git.savannah.gnu.org/cgit/lwip /lwip-contrib.git/tree/apps/sntp – Ishmeet