当前位置:首页 > 单片机 > 单片机
[导读] 于lwIP协议中的UDP协议,用单片机做一个服务器,接受电脑的指令然后返回数据。以下是我的代码/*****************************************************函数功能:初始化udp,选定通信端口,建立连接机制

于lwIP协议中的UDP协议,用单片机做一个服务器,接受电脑的指令然后返回数据。以下是我的代码
/****************************************************
*函数功能:初始化udp,选定通信端口,建立连接机制
****************************************************/
void Udp_Api_init(void)
{
err_t err;
struct udp_pcb *UDPpcb;

/* create a new UDP PCB structure */
UDPpcb = udp_new();
if (!UDPpcb)
{ /* Error creating PCB. Out of Memory */
return;
}

/* Bind this PCB to port 99 */
err = udp_bind(UDPpcb, IP_ADDR_ANY, service_port);
if (err != ERR_OK)
{ /* Unable to bind to port */
return;
}

//通知协议栈当99端口有连接请求时调用recv_callback_udp
udp_recv(UDPpcb, recv_callback_udp, NULL);
}

void recv_callback_udp(void *arg,struct udp_pcb *upcb, struct pbuf *pkt_buf,
struct ip_addr *addr,u16_t port)
{
struct ip_addr dAddr = *addr;
u8 data[5]={1,2,3,4,5};
u8 *pValiData;

struct pbuf *p ;
struct ip_addr ipaddr;
struct udp_pcb *UDPpcb1;

pValiData=pkt_buf->payload;

if( pkt_buf != NULL )
{
if(*pValiData > 0x05) //接收到的指令码大于5,返回原指令
udp_sendto( upcb , pkt_buf , &dAddr , port ) ;
else
{
p = pbuf_alloc(PBUF_RAW,sizeof(data),PBUF_RAM); //根据将要发送的数据大小开辟pbuf
p->payload=(void *)data;

IP4_ADDR(&ipaddr,192,168,1,2);
UDPpcb1 = udp_new();
udp_bind(UDPpcb1,IP_ADDR_ANY,service_port); //绑定本地IP 地址
udp_connect(UDPpcb1,&ipaddr,1000);
udp_send(UDPpcb1,p);
//udp_remove(upcb);
//udp_sendto( upcb , pkt_buf , &dAddr , port ) ;
}
}
pbuf_free(pkt_buf);
}
实验结果:在发送指令大于5时,单片机返回数据5;但是当指令小于5时,没有返回值,且串口显示“HardFault_Handler”
这是为什么呢???????????

void UDPceshi_recv(void *arg,struct udp_pcb *upcb, struct pbuf *pkt_buf,
struct ip_addr *addr,u16_t port)
{
struct ip_addr dAddr = *addr;
//u8 data[5]={1,2,3,4,5};
u8 *pValiData;
//
//struct pbuf *p ;
struct ip_addr ipaddr;
struct udp_pcb *UDPpcb;

pValiData=pkt_buf->payload;

if( pkt_buf != NULL )
{

//if(*pValiData > 0x05) //接收到的指令码大于5,返回原指令
// udp_sendto( upcb ,pValiData , &ipaddr , 70 ) ;
// else
// {
// p = pbuf_alloc(PBUF_RAW,sizeof(data),PBUF_RAM); //根据将要发送的数据大小开辟pbuf
// p->payload=(void *)data;

// IP4_ADDR(&ipaddr,192,168,1,125);
UDPpcb= udp_new();
udp_bind(UDPpcb,IP_ADDR_ANY,60); //绑定本地IP 地址
udp_connect(UDPpcb,&ipaddr,1000);
// udp_send(UDPpcb1,p);
//udp_remove(upcb);
udp_sendto( upcb , pkt_buf , &dAddr , port ) ;
}

pbuf_free(pkt_buf);
// else
// {
// udp_remove(upcb);
// }
}

{
// uint8_t i=0;
struct ip_addr destAddr = *addr;
if(p != NULL) /* 如果收到的数据不为空 */
{

//pbuf_copy_partial(p, UDPData, p->len, 0);
udp_sendto(upcb,p,&destAddr,port); /* 将收到的数据再发送出去 */
pbuf_free(p); /* 释放缓冲区数据 */
}
}

我用PC机周期性地通过UDP给lm3s8962发数据,lm3s8962处理完后,再通过UDP发送给PC机。

无论PC机的周期设为多大,发现lm3s8962只能收到一半pc机发送的数据。

假如我分别创建两个UDP socket,一个用于UDP数据接收,一个用于UDP数据发送。接收和发送都正常。

请问下各位大侠,这是什么原因?先谢过了。

代码如下:

void UDPNetInit(void)
{
struct ip_addr ipaddr1;
IP4_ADDR(&ipaddr1,192,168,0,125);
//
// Start listening for incoming TFTP requests.
//
UDPpcb = udp_new();
udp_recv(UDPpcb, UDPDataRecv, NULL);
udp_bind(UDPpcb,IP_ADDR_ANY,UDPPRO_PORT); /* 绑定本地IP地址 */
udp_connect(UDPpcb,&ipaddr1,UDPPRO_PORT); /* 连接远程主机 */

}

UDPDataRecv函数用于UDP数据接收,在另外一个地方调用udp_send()作为UDP数据发送。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

北京——2024年4月30日 亚马逊云科技持续引领云上数据服务创新,助力企业构建全面的数据基座以充分发挥数据潜力,加速生成式AI技术落地。在生成式AI时代,数据是企业脱颖而出的关键——基础模型依赖于大规模高质量数据集,生...

关键字: 生成式AI 数据 模型

全新的专有模型导入功能让客户更轻松地将其专属模型导入到Amazon Bedrock中,从而充分利用Amazon Bedrock的强大功能。全新的模型评估功能使客户能够广泛且便捷地选择完全托管模型,包括RAG优化的新版Am...

关键字: 生成式AI 基础模型 数据

2024年4月17日,中国 – 服务多重电子应用领域、全球排名前列的半导体公司意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)将在2024年4月25日欧洲证券交易所开盘前公布202...

关键字: 半导体 数据

数据占满我们的电子设备已成常态,为了满足广大用户的需求,NAS应运而生。然而,对于许多普通用户来说,NAS设备的设置和使用却常常令人望而却步。不过,铁威马TOS 6的出现,不仅功能强大,而且操作简便,即使是初次接触NAS...

关键字: 数据 电子设备 NAS

机器学习作为人工智能领域的重要组成部分,其过程涉及到多个核心环节。本文将详细阐述机器学习的四个主要步骤:数据准备、模型选择、模型训练与评估,以及模型部署与应用,以揭示机器学习从数据到应用的完整流程。

关键字: 数据 人工智能 机器学习

机器学习算法是人工智能领域中的核心技术之一,它通过对大量数据进行学习,自动发现数据中的规律和模式,从而实现对新数据的预测、分类、聚类等任务。本文将深入探讨机器学习算法的基本过程,包括数据准备、模型选择、训练与评估等关键步...

关键字: 数据 人工智能 机器学习

随着人工智能(AI)技术的迅速发展,人们对于通用人工智能(AGI,即Artificial General Intelligence)的期待也日益高涨。通用人工智能指的是具备像人类一样全面智能的计算机系统,能够执行各种复杂...

关键字: 人工智能 计算机 数据

在数字化时代,数据的数量和价值飞速增长,如何安全、有效地存储和管理这些数据成为了一个重要的问题。刻录机,作为一种同时具有数据存储和备份功能的设备,在这方面发挥着越来越重要的作用。本文将向大家介绍刻录机的定义、工作原理以及...

关键字: 刻录机 数据

在数字时代,数据已经成为企业的重要资产。随着云计算技术的快速发展,云服务器已成为企业和个人存储数据的重要平台。然而,数据的存储和处理也面临着多种安全威胁。本文将探讨如何使用云服务器确保存储数据的安全性。

关键字: 数据 云服务

北京——2023年9月21日,近期,亚马逊云科技作为参展商参与了久负盛名的IBC 2023 (欧洲广播电视展)并宣布推出一系列聚焦营收增长的媒体与娱乐(Amazon Web Services for M&E)行业解决方案...

关键字: 亚马逊 数据
关闭
关闭