win ping源程序

三菱PLC与HMI程序读取全攻略:从硬件连接到软件操作与故障排查 在工业自动化领域,可编程逻辑控制器(PLC)和人机界面(HMI)是核心控制设备。其工作原理是通过编写并下载控制程序,实现对生产设备的逻辑与顺序控制。掌握程序读取技术,对于设备维护、故障诊断、程序备份与技术学习具有重要价值。尤其在设备维护与故障排查场景中,当生产线设备突发停机时,快速读取PLC中的现行程序是分析传感器信号、定时器逻辑或通讯中断问题的关键第一步。本文聚焦于三菱FX、Q、L、FX5U等主流系列PLC及配套HMI,详细解析通过USB、422编程口及以太网等多种连接方式,利用GX Works2、GX 阅读详情
编写自己的一个ping程序,可以说是许多人迈出网络编程的第一步吧!!这个ping程序的源代码经过我的修改和调试,基本上可以取代windows中自带的ping程序. 各个模块后都有我的详细注释和修改日志,希望能够对大家的学习有所帮助!!

/* 本程序的主要源代码来自MSDN网站, 笔者只是做了一些改进和注释! 另外需要注意的是在Build之前,必须加入ws2_32.lib库文件,否则会提示"error LNK2001:"的错误!*/ 
Version 1.1 修改记录:
     <1> 解决了socket阻塞的问题,从而能够正确地处理超时的请求! 
     <2> 增加了由用户控制发送ICMP包的数目的功能(即命令的第二个参数)
     <3> 增加了对ping结果的统计功能.  
                                                          

#pragma pack(4) 
#include   "winsock2.h"
#include   "stdlib.h"
#include   "stdio.h"
#define ICMP_ECHO 8 
#define ICMP_ECHOREPLY 0 
#define ICMP_MIN 8 // minimum 8 byte icmp packet (just header) 
/* The IP header */ 
typedef struct iphdr { 
unsigned int h_len:4; // length of the header 
unsigned int version:4; // Version of IP 
unsigned char tos; // Type of service 
unsigned short total_len; // total length of the packet 
unsigned short ident; // unique identifier 
unsigned short frag_and_flags; // flags 
unsigned char ttl; 
unsigned char proto; // protocol (TCP, UDP etc) 
unsigned short checksum; // IP checksum 
unsigned int sourceIP; 
unsigned int destIP; 
}IpHeader; 
// 
// ICMP header 
// 
typedef struct icmphdr { 
BYTE i_type; 
BYTE i_code; /* type sub code */ 
USHORT i_cksum; 
USHORT i_id; 
USHORT i_seq; 
/* This is not the std header, but we reserve space for time */ 
ULONG timestamp; 
}IcmpHeader; 
#define STATUS_FAILED 0xFFFF 
#define DEF_PACKET_SIZE    32
#define DEF_PACKET_NUMBER  4    /* 发送数据报的个数 */
#define MAX_PACKET 1024 
#define xmalloc(s) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(s)) 
#define xfree(p) HeapFree (GetProcessHeap(),0,(p)) 
void fill_icmp_data(char *, int); 
USHORT checksum(USHORT *, int); 
int decode_resp(char *,int ,struct sockaddr_in *); 
void Usage(char *progname){ 
fprintf(stderr,"Usage:\n"); 
fprintf(stderr,"%s [number of packets] [data_size]\n",progname); 
fprintf(stderr,"datasize can be up to 1Kb\n"); 
ExitProcess(STATUS_FAILED); 
} 
int main(int argc, char **argv){ 
WSADATA wsaData; 
SOCKET sockRaw; 
struct sockaddr_in dest,from; 
struct hostent * hp; 
int bread,datasize,times; 
int fromlen = sizeof(from); 
int timeout = 1000;
int statistic = 0;  /* 用于统计结果 */  
char *dest_ip; 
char *icmp_data; 
char *recvbuf; 
unsigned int addr=0; 
USHORT seq_no = 0; 
if (WSAStartup(MAKEWORD(2,1),&wsaData) != 0){ 
fprintf(stderr,"WSAStartup failed: %d\n",GetLastError()); 
ExitProcess(STATUS_FAILED); 
} 
if (argc <2 ) { 
Usage(argv[0]); 
} 
sockRaw = WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL, 0,WSA_FLAG_OVERLAPPED);
//
//注:为了使用发送接收超时设置(即设置SO_RCVTIMEO, SO_SNDTIMEO),
//    必须将标志位设为WSA_FLAG_OVERLAPPED !
// 
if (sockRaw == INVALID_SOCKET) { 
fprintf(stderr,"WSASocket() failed: %d\n",WSAGetLastError()); 
ExitProcess(STATUS_FAILED); 
} 
bread = setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout, 
sizeof(timeout)); 
if(bread == SOCKET_ERROR) { 
fprintf(stderr,"failed to set recv timeout: %d\n",WSAGetLastError()); 
ExitProcess(STATUS_FAILED); 
} 
timeout = 1000; 
bread = setsockopt(sockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout, 
sizeof(timeout)); 
if(bread == SOCKET_ERROR) { 
fprintf(stderr,"failed to set send timeout: %d\n",WSAGetLastError()); 
ExitProcess(STATUS_FAILED); 
} 
memset(&dest,0,sizeof(dest)); 
hp = gethostbyname(argv[1]); 
if (!hp){ 
addr = inet_addr(argv[1]); 
} 
if ((!hp) && (addr == INADDR_NONE) ) { 
fprintf(stderr,"Unable to resolve %s\n",argv[1]); 
ExitProcess(STATUS_FAILED); 
} 
if (hp != NULL) 
memcpy(&(dest.sin_addr),hp->h_addr,hp->h_length); 
else 
dest.sin_addr.s_addr = addr; 
if (hp) 
dest.sin_family = hp->h_addrtype; 
else 
dest.sin_family = AF_INET; 
dest_ip = inet_ntoa(dest.sin_addr); 
// 
//  atoi函数原型是: int atoi( const char *string );
//  The return value is 0 if the input cannot be converted to an integer !
//
if(argc>2)
{
times=atoi(argv[2]);
if(times == 0)
  times=DEF_PACKET_NUMBER;
}
else
    times=DEF_PACKET_NUMBER;
if (argc >3) 
{ 
datasize = atoi(argv[3]); 
    if (datasize == 0) 
        datasize = DEF_PACKET_SIZE;
if (datasize >1024)   /* 用户给出的数据包大小太大 */
{
  fprintf(stderr,"WARNING : data_size is too large !\n");
  datasize = DEF_PACKET_SIZE; 
}
} 
else 
    datasize = DEF_PACKET_SIZE; 
datasize += sizeof(IcmpHeader); 
icmp_data = (char*)xmalloc(MAX_PACKET); 
recvbuf = (char*)xmalloc(MAX_PACKET); 
if (!icmp_data) { 
fprintf(stderr,"HeapAlloc failed %d\n",GetLastError()); 
ExitProcess(STATUS_FAILED); 
} 

memset(icmp_data,0,MAX_PACKET); 
fill_icmp_data(icmp_data,datasize); 
//
//显示提示信息
//
fprintf(stdout,"\nPinging %s ....\n\n",dest_ip);

for(int i=0;i{ 
int bwrote; 
((IcmpHeader*)icmp_data)->i_cksum = 0; 
((IcmpHeader*)icmp_data)->timestamp = GetTickCount(); 
((IcmpHeader*)icmp_data)->i_seq = seq_no++; 
((IcmpHeader*)icmp_data)->i_cksum = checksum((USHORT*)icmp_data,datasize);
bwrote = sendto(sockRaw,icmp_data,datasize,0,(struct sockaddr*)&dest,sizeof(dest)); 
if (bwrote == SOCKET_ERROR){ 
if (WSAGetLastError() == WSAETIMEDOUT) { 
printf("Request timed out.\n"); 
continue; 
} 
fprintf(stderr,"sendto failed: %d\n",WSAGetLastError()); 
ExitProcess(STATUS_FAILED); 
} 
if (bwrote < datasize ) { 
fprintf(stdout,"Wrote %d bytes\n",bwrote); 
} 
bread = recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(struct sockaddr*)&from,&fromlen); 
if (bread == SOCKET_ERROR){ 
if (WSAGetLastError() == WSAETIMEDOUT) { 
printf("Request timed out.\n"); 
continue; 
} 
fprintf(stderr,"recvfrom failed: %d\n",WSAGetLastError()); 
ExitProcess(STATUS_FAILED); 
} 
if(!decode_resp(recvbuf,bread,&from))
statistic++; /* 成功接收的数目++ */
Sleep(1000); 
}

/*
Display the statistic result
*/
fprintf(stdout,"\nPing statistics for %s \n",dest_ip);
fprintf(stdout,"    Packets: Sent = %d,Received = %d, Lost = %d (%2.0f%% loss)\n",times,
     statistic,(times-statistic),(float)(times-statistic)/times*100);

WSACleanup();
return 0; 
} 
/* 
The response is an IP packet. We must decode the IP header to locate 
the ICMP data 
*/ 
int decode_resp(char *buf, int bytes,struct sockaddr_in *from) { 
IpHeader *iphdr; 
IcmpHeader *icmphdr; 
unsigned short iphdrlen; 
iphdr = (IpHeader *)buf; 
iphdrlen = (iphdr->h_len) * 4 ; // number of 32-bit words *4 = bytes 
if (bytes < iphdrlen + ICMP_MIN) { 
printf("Too few bytes from %s\n",inet_ntoa(from->sin_addr)); 
} 
icmphdr = (IcmpHeader*)(buf + iphdrlen); 
if (icmphdr->i_type != ICMP_ECHOREPLY) { 
fprintf(stderr,"non-echo type %d recvd\n",icmphdr->i_type); 
return 1; 
} 
if (icmphdr->i_id != (USHORT)GetCurrentProcessId()) { 
fprintf(stderr,"someone else''s packet!\n"); 
return 1; 
} 
printf("%d bytes from %s:",bytes, inet_ntoa(from->sin_addr)); 
printf(" icmp_seq = %d. ",icmphdr->i_seq); 
printf(" time: %d ms ",GetTickCount()-icmphdr->timestamp); 
printf("\n");
return 0; 
} 

USHORT checksum(USHORT *buffer, int size) { 
unsigned long cksum=0; 
while(size >1) { 
cksum+=*buffer++; 
size -=sizeof(USHORT); 
} 
if(size) { 
cksum += *(UCHAR*)buffer; 
} 
cksum = (cksum >> 16) + (cksum & 0xffff); 
cksum += (cksum >>16); 
return (USHORT)(~cksum); 
} 
/* 
Helper function to fill in various stuff in our ICMP request. 
*/ 
void fill_icmp_data(char * icmp_data, int datasize){ 
IcmpHeader *icmp_hdr; 
char *datapart; 
icmp_hdr = (IcmpHeader*)icmp_data; 
icmp_hdr->i_type = ICMP_ECHO; 
icmp_hdr->i_code = 0; 
icmp_hdr->i_id = (USHORT)GetCurrentProcessId(); 
icmp_hdr->i_cksum = 0; 
icmp_hdr->i_seq = 0; 
datapart = icmp_data + sizeof(IcmpHeader); 
// 
// Place some junk in the buffer. 
// 
memset(datapart,''E'', datasize - sizeof(IcmpHeader)); 
} 
/******************* 附: ping命令执行时显示的画面 ****************\
*  C:\Documents and settings\houzhijiang>ping   236.56.54.12                              * *                                                                                                                          *
*  Pinging 236.56.54.12 with 32 bytes of data:                                                      *
*                                                                                                                          * 
*  Request timed out.                                                                                            *
*  Request timed out.                                                                                            *
*  Request timed out.                                                                                            *
*  Request timed out.                                                                                            * 
*                                                                                                                          *
*  Ping statistics for 236.56.54.12:                                                                        *
*     Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),                                *
*                                                                                                                         *
\**************************************************************/
/**************************************************************\
*  C:\Documents and Settings\houzhijiang>ping 127.0.0.1                                    *
*                                                                                                                         *
*  Pinging 127.0.0.1 with 32 bytes of data:                                                           *
*                                                                                                                         *
*  Reply from 127.0.0.1: bytes=32 time<1ms TTL=128                                      *
*  Reply from 127.0.0.1: bytes=32 time<1ms TTL=128                                      *
*  Reply from 127.0.0.1: bytes=32 time<1ms TTL=128                                      *
*  Reply from 127.0.0.1: bytes=32 time<1ms TTL=128                                      *
*                                                                                                                         *
*  Ping statistics for 127.0.0.1:                                                                             *
*     Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),                                   *
*  Approximate round trip times in milli-seconds:                                                  *
*     Minimum = 0ms, Maximum = 0ms, Average = 0ms                                       *
*                                                                                                                         *
\**************************************************************/
API钩取技术:逆向分析中的核心原理与实战应用 在软件逆向工程与安全分析领域,理解程序与操作系统交互的底层机制至关重要。动态链接和导入地址表(IAT)是程序调用外部函数的核心原理,它们决定了函数在内存中的寻址方式。基于此原理,API钩取技术通过拦截和重定向函数调用,实现了对程序行为的动态监控与修改,具有极高的技术价值。这项技术广泛应用于恶意软件行为分析、软件漏洞挖掘、性能剖析等关键场景。本文聚焦于IAT钩取这一经典方法,通过一个修改MessageBoxA的实战案例,详细解析了其实现步骤与避坑指南,为深入掌握逆向分析提供了扎实的工程实践路径。 阅读详情

相关推荐

C#实现轻量级P2P文件直传系统(绕过服务器)

P2P文件传输指两终端不依赖中心服务器、直接建立网络连接进行数据交换的技术,其核心原理在于NAT穿透与端到端连接协商。在企业内网、跨局域网或移动热点等受限网络环境下,传统HTTP/FTP或云盘方案常因防火墙、权限管控或上传延迟而失效;而基于C#原生Socket构建的轻量级P2P模型,通过STUN/TURN辅助、自定义二进制协议与分层架构设计,实现了可控、可审计、低延迟的直连传输能力。该技术已广泛应用于固件协同、研发资料秒传、离线AI参数同步等场景,尤其适合Windows桌面环境下的安全合规部署。本文详解C#

dianlu5775的博客 436

Ping的原代码

#pragma pack(4)   #define WIN32_LEAN_AND_MEAN   #include   #include   #include     #define ICMP_ECHO 8   #define ICMP_ECHOREPLY 0     #define ICMP_MIN 8 // minimum 8 byte icmp packet (just header)    

葉落堂 605

Screenshot_2026-11-03-16-23-09-34.jpg

Screenshot_2026-11-03-16-23-09-34.jpg

学习ARM开发(2)

学习ARM开发(2)今天是星期天,刚好在家里休息。又是学习ARM的大好时机了。早上起得很早,因为都想着怎么样搞好这个ARM开发环境,总是心急的。搞得睡觉,也睡不好。立即把电脑打开,为了更加快点,把家里两台电脑都打开,用一台比较快的电脑装LINUX。目前因为两台电脑都已经安装WINDOWS系统,又装了很多软件。为了没有什么风险,就装了VMWARE软件,就是虚拟机软件,这个软件的虚拟速度确实快很多,它

大坡3D软件开发 5270

研发流程后端开发工具,提示功能开发效率

后端开发工具

机器人具有扰动抑制功能的有限时间基于方位角的领航者-跟随者编队控制(Matlab代码实现)

内容概要:本文档标题为《Plecs全桥LLC谐振变换器仿真模型.txt》,但实际内容并未涉及该主题的具体技术细节或仿真建模过程。相反,文档实质是一份由科研服务团队发布的跨学科资源目录,集中展示了大量基于Matlab、Simulink、Python、PSCAD等平台实现的科研项目与算法开发案例,涵盖电力系统、无人机路径规划、微电网优化、状态估计、信号处理、车间调度、图像处理、通信技术、雷达追踪、智能优化算法等多个工程技术领域。每个条目以“【】”标注研究主题,并注明“Matlab代码实现”“Python代码实现”等形式,表明其为可提供技术支持与代码资源的服务项目。文档末尾频繁出现“完整资源下载:公众号——荔枝科研社”及百度网盘链接,明确体现出其作为科研辅助服务推广与引流工具的功能属性。; 适合人群:面向电气工程、自动化、控制科学与工程、计算机科学、智能制造、新能源、航空航天、通信工程及相关交叉学科的研究生、高校教师、科研人员及企业研发工程师。; 使用场景及目标:①为科研人员提供课题选题、技术路线设计与算法实现的参考范例;②辅助学生或研究人员完成课程设计、毕业论文、项目仿真与算法复现任务;③作为第三方技术服务团队的能力展示目录,便于潜在客户快速了解其在多领域提供的定制化仿真与算法开发服务范围。; 阅读建议:此文档并非传统意义上的学术论文或技术教程,而是一份高度碎片化、广告性质浓厚的资源索引清单。读者应忽略其误导性的文件名,将其视为一个综合性科研技术服务目录,重点关注自身研究方向相关的条目,并通过文末提供的公众号或网盘链接进一步获取具体代码与资料。同时,需注意甄别资源的技术质量、原创性与适用性,避免盲目依赖外部服务。

[C#搜片神器] 之P2P中DHT网络爬虫原理

继续接着上一篇写:使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)[搜片神器] 昨天由于开源的时候没有注意运行环境,直接没有考虑下载BT种子文件时生成子文件夹,可能导致有的朋友运行没有结果,在此表示对支持开源的朋友道谦.另外也对源程序增加了一些说明,已经提交. 开源地址:https://github.com/h31h31/H31DHTMgr 程序下载:H31D...

weixin_30674525的博客 382

科技中介服务机构如何打造高效、可复制的技术交易服务流程?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

ROS与Matlab协同进行运动控制

Matlab拥有强大的数据处理、可视化绘图能力以及众多成熟的算法函数,非常适合算法开发;在控制系统设计中,Simulink也是普遍使用的设计和仿真工具。而ROS系统,则是一种新的标准化机器人系统软件框架。通过ROS,你可以使用大量的示例代码和开源程序轻松地完成机器人编程和控制任务。 如何利用matlat和ROS不同的优势,协同进行机器人设计与仿真? 如何用matlat程序通过ROS

祝 枫 9352

高校技术转移办公室人员如何提升科研成果的市场推广与转化成功率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

基于LSTM神经网络的风电功率预测研究(Matlab代码实现)

内容概要:本文档名为《Plecs全桥LLC谐振变换器仿真模型.txt》,但其实际内容并未包含与Plecs或全桥LLC谐振变换器相关的具体仿真模型,而是汇集了大量来自优快云博客平台的技术文章标题和片段,内容涉及基于MATLAB的电力系统动态分析、风储VSG系统仿真、多无人机路径规划、最优潮流计算、卡尔曼滤波状态估计、车间调度算法、无线电力传输、抽水蓄能电站调度等多个领域。这些内容主要围绕Matlab/Simulink或Python代码实现展开,覆盖电力电子、电力系统、自动化控制、优化算法、信号处理、深度学习等方向,具有较强的科研仿真属性。然而,文档整体缺乏统一主题与逻辑结构,信息呈现高度碎片化,更像是多个独立技术资源的罗列而非系统性论述。; 适合人群:适用于从事电力系统、电力电子、自动化控制、智能制造、人工智能、信号处理及相关交叉学科的研究生、高校科研人员及企业研发工程师。; 使用场景及目标:①作为科研选题与技术调研的灵感来源,快速掌握当前热门研究方向与方法论;②获取多种仿真模型的设计思路与实现框架,辅助完成课程设计、学位论文或科研项目的建模仿真任务;③结合文中提及的算法(如PSO、NSGA-II、EKF、CNN、LSTM等)与工具(如Matlab/Simulink、PSCAD等),开展系统性学习与二次开发。; 阅读建议:此文档内容杂乱无章,不具备连贯阅读价值,建议仅将其作为索引线索,从中提取感兴趣的主题后,进一步查找原始完整文献或配套代码资源进行深入研究,避免陷入无效信息泛滥的困境。

学习ARM开发01-09

   /*********************************** *作者:蔡军生  *出处:http://blog.youkuaiyun.com/caimouse/ ************************************/  #1  学习ARM开发(1)做任何事情之前,一定要想好目标。没有目标的事情是做不好的,也做不成。我的目标就是学习ARM开发,当然是深入的学习。目标如下

zheng80037的专栏 1368

产业园区运营负责人如何精准匹配企业与高校科研资源?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

matlab运动控制算法教程,ROS与Matlab系列:一个简单的运动控制

Matlab拥有强大的数据处理、可视化绘图能力以及众多成熟的算法函数,非常适合算法开发;在控制系统设计中,Simulink也是普遍使用的设计和仿真工具。而ROS系统,则是一种新的标准化机器人系统软件框架。通过ROS,你可以使用大量的示例代码和开源程序轻松地完成机器人编程和控制任务。如何利用matlat和ROS不同的优势,协同进行机器人设计与仿真?如何用matlat程序通过ROS直接控制物理世界中的...

weixin_36098128的博客 1535

ESP32-CAM与Thonny的完美搭配:从烧录到通信的完整流程

本文详细介绍了如何将ESP32-CAM与Thonny IDE完美结合,从固件烧录到通信测试的完整流程。通过硬件连接、MicroPython固件烧录、Thonny环境配置以及摄像头功能开发等步骤,帮助开发者快速搭建高效的物联网开发环境,实现图像采集与无线通信功能。

tomato的博客 1125

光电系统光轴校准与偏差控制实战指南

光轴作为光电系统的空间基准坐标系,直接影响多光谱传感器的协同工作精度。在包含可见光、红外与激光测距的复合系统中,光轴偏差会导致目标识别误差与打击精度下降。通过机械基准建立、光学通道粗调和多光谱协同校准等工厂级标定流程,结合千米靶标法、星点校准法等野战应急方案,可有效控制光轴偏差。典型应用场景中,温度补偿与振动抑制技术能维持光轴稳定性,如某舰载系统通过500Hz高频视觉伺服实现0.3mrad振动补偿。掌握这些光轴标定与保持策略,对提升光电系统在侦察、测距等场景的实战性能具有关键价值。

weixin_36149538的博客 275

ROS与Matlab系列:一个简单的运动控制

ROS与Matlab系列:一个简单的运动控制 转自:http://blog.exbot.net/archives/2594 Matlab拥有强大的数据处理、可视化绘图能力以及众多成熟的算法函数,非常适合算法开发;在控制系统设计中,Simulink也是普遍使用的设计和仿真工具。而ROS系统,则是一种新的标准化机器人系统软件框架。通过ROS,你可以使用大量的示例代码和开源程序轻松地完成机器...

weixin_34226182的博客 463

全志 mipi屏幕和触摸驱动调试记录

mipi屏幕与触摸调试记录

u011996684的博客 3220

西门子PLC常见问题

总结了西门子PLC开发、仿真与调试过程中的常见问题及解决方案,通过具体案例和操作步骤,为工程人员提供了实用的故障排查参考。

GesLuck的博客 2007

一种基于OpenPose和DNN的跌倒检测软件系统(中文&英文)

学习并实现一种跌倒检测模型,此模型基于OpenPose实现逐帧人体姿态检测,使用DNN识别人体动作。检测方式有在线与离线两种,本文主要测试了离线模式,测试效果较好。

Tongzhou_Li的博客 2645

手把手教你编写I2C读写EEPROM代码(驱动层实现)

从底层寄存器配置到时序控制,详解如何编写可移植的I2C读写EEPROM代码,覆盖起始信号、地址帧、数据收发及ACK应答等关键环节,确保在STM32、ESP32等主流平台稳定运行,真正落地i2c读写eeprom代码需求。

weixin_35756130的博客 508
上一篇: 网狐棋牌游戏服务端架构设计原理
下一篇: ping源代码完全解析
hover_online
博客等级 码龄25年 8粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值