gpt4 book ai didi

c - 发送UDP包到NTP服务器并接收时间(lwip、Cortex M3、Stellaris LM3S6965评估板)

转载 作者:行者123 更新时间:2023-11-30 15:52:47 25 4
gpt4 key购买 nike

我正在使用 Cortex M3、Stellaris® LM3S6965 评估板。我想在我的 oled 屏幕上显示 NTP 服务器的时间。首先我想得到 NTP 服务器的回复。我查了一下服务器是用UDP协议(protocol)工作的。它给了我一个时间戳。我正在使用 LWIP 库。

我正在尝试向服务器发送 UDP 数据包,并且我想在显示屏上显示收到的数据包数据(时间戳)..

所以我想我必须向TNP服务器发送一个udp包并接收时间戳。

但不知何故它不起作用。希望大家能帮我找到解决办法。

编辑:

我还找到了一些有关 NTP 的更多信息 here

更新的程序:

// 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);
}

int main(void){
//UDP
struct udp_pcb * udp_con_new;
struct ip_addr ntp_server;
udp_con_new = udp_new();
IP4_ADDR(&ntp_server,65,55,21,13); // time.windows.com
udp_connect(udp_con_new,&ntp_server,123);

struct pbuf * p;
p = 0;

udp_send(udp_con_new, p);

//udp_recv(upcb,RecvUTPCallBack, recv_arg);

}

最佳答案

您没有发送任何数据。 UDP 是无连接的,并且 these random docs对于udp_connect()函数(似乎确实与您正在使用的相匹配)说:

This function does not generate any network traffic, but only sets the remote address of the pcb.

您必须构造一个有效的 NTP 请求数据包,然后使用 <a href="http://www.ecoscentric.com/ecospro/doc/html/ref/lwip-api-raw-udp-send.html" rel="noreferrer noopener nofollow">udp_send()</a> 发送它。 。有关如何执行此操作的详细信息,以及您似乎需要的有关 NTP 的大量信息,请阅读 current IEEE specification 。享受吧。

关于c - 发送UDP包到NTP服务器并接收时间(lwip、Cortex M3、Stellaris LM3S6965评估板),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14156972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com