大文件操作(eg:4G)

4G低功耗模组Air780EG硬件设计手册(一) 下图为模块功能框:Air780EG是一款基于移芯EC618平台设计的LTE Cat 1+GNSSS定位二合一无线通信模组。支持FDD-LTE/TDD- LTE的4G远距离无线传输技术,同时支持北斗/GPS双模卫星定位,满足户外位置,资产管理,人员位置管理等 应用需求。另外,模组提供了USB/UART/I2C等通用接口满足IoT行业的各种应用诉求。 阅读详情

大文件指的是超过4G的文件。在32bit机器上操作这样的大文件时,会出现问题。具体的,下面会具体讲解。

 

大文件问题

首先32位机器用fopen/fclose打开大文件没有问题,顺序读写操作while(!feof(fp)){ fread / fgets / fscanf }或while(1){ fwrite / fputs / fprintf} 也没有问题。由于32位机器下long是32位,故fseek (FILE *stream,longoffset, int whence)和long ftell(FILE *stream) 不能访问4G以上文件。另外,要用 fseeko(FILE *stream,off_toffset, int whence)和off_tftello(FILE *stream);代替fseek和ftell。这样,只要你用64bit的类型(off_t,long(64位机器),和longlong(32位机器) 或int64_t/uint64_t)声明offset作为fseeko的参数输入,就可以操作4G以上的文件了。

fseeko和ftello的具体说明见本文《ftello&fseeko》,在文章最后面。

 

注:文件open操作返回的是文件描述符,并没有将文件读入内存。文件内容只有通过read调用时才读才将相应的内容读入内存。

 

解决方法

类型off_t 的定义在 <sys/types.h>里面:

# ifndef __USE_FILE_OFFSET64
typedef __off_t off_t;
# else
typedef __off64_t off_t;
# endif

off_t在32位机器中是32bit,64位机器中是64bit。那么,在32位机器中,在include之前加入宏定义:#define _FILE_OFFSET_BITS 64,或者编译是加入-D_FILE_OFFSET_BITS 64告诉系统在文件内部使用64位的偏移地址,使off_t变成__off64_t类型。然后,将ftell、fseek换成对应的ftello、fseeko就可以操作大文件了。

另外看到一些英文说法,和上述解决方法差不多,为了便于理解,粘贴如下:

In a nutshell for using LFS you can choose either of the following:

  • Compile your programs with "gcc -D_FILE_OFFSET_BITS=64". This forces all file access calls to use the 64 bit variants. Several types change also, e.g.off_tbecomesoff64_t. It's therefore important to always use the correct types and to not use e.g.intinstead of off_t. For portability with other platforms you should use getconf LFS_CFLAGS which will return -D_FILE_OFFSET_BITS=64on Linux platforms but might return something else on e.g. Solaris. For linking, you should use the link flags that are reported viagetconf LFS_LDFLAGS. On Linux systems, you do not need special link flags.
  • Define _LARGEFILE_SOURCEand_LARGEFILE64_SOURCE. With these defines you can use the LFS functions like open64directly.
  • Use the O_LARGEFILEflag with opento operate on large files.

 

构造大文件

dd if=/dev/zero of=tt bs=1G seek=100 count=0

bs=1G表示每一次读写1G数据,count=0表示读写0次,seek=100表示略过100个Block不写,前面block size是1G,所以共略过100G!
 

获得系统参数

为了更好的进行测试,你需要知道自己的系统是32位还是64位,下面给出了四种方法。
在64bit机器上的运行结果:
[root@SPA c]# uname -a
Linux SPA 2.6.18-194.17.1.b1.05 #3 SMP Fri Jan 25 15:14:45 CST 2013x86_64 x86_64 x86_64 GNU/Linux
[root@SPA c]# getconf LONG_BIT
64
[root@SPA c]# /lib
lib/  lib64/
最后,可以用编程的方法,sizeof( long 或 size_t )就是系统的位数
 

测试程序

测试程序一:
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <assert.h>

#define FILENAME "tt"
#define READBUFSIZE 100

	int
main ()
{

	struct stat buf;
	FILE *stream = fopen (FILENAME, "rw");
	char readbuf[READBUFSIZE];
	size_t ret = 0;

	printf ("\nfollowing messages present system info.\n");
	printf ("sizeof(size_t) = %d, sizeof(off_t) = %d\n", sizeof (size_t),
			sizeof (off_t));
	system ("getconf LONG_BIT");
	system ("uname -a");

	printf ("\nfollowing messages present file info.\n\n");
	if (stat (FILENAME, &buf) != 0)
	{
		perror ("stat:");
		return -1;
	}
	printf ("file size is %lld Byte\n", buf.st_size);
	if (!stream)
	{
		perror ("fopen:");
		return -1;
	}
	{
		ret = fread (readbuf, READBUFSIZE, 1, stream);
		printf ("fread:%u Byte\n", ret * READBUFSIZE);
		assert (ret == 1);
	}
	printf ("current pos is %lld Byte\n", ftello (stream));
	if (fseeko (stream, -READBUFSIZE, SEEK_END) != 0)
	{
		perror ("fseeko:");
		return -1;
	}
	{
		ret = fread (readbuf, READBUFSIZE, 1, stream);
		printf ("fread:%u Byte\n", ret * READBUFSIZE);
		assert (ret == 1);
	}
	printf ("after read last %d Byte ,cur pos is %lld Byte\n", READBUFSIZE,
			ftello (stream));
	return 0;
}
测试程序二:
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <assert.h>

#define FILENAME "tt"
#define READBUFSIZE 100

	int
main ()
{

	struct stat buf;
	FILE *stream = fopen (FILENAME, "rw");
	char readbuf[READBUFSIZE];
	size_t ret = 0;

	printf ("\nfollowing messages present system info.\n");
	printf ("sizeof(size_t) = %d, sizeof(off_t) = %d\n", sizeof (size_t),
			sizeof (off_t));
	system ("getconf LONG_BIT");
	system ("uname -a");

	printf ("\nfollowing messages present file info.\n\n");
	if (stat (FILENAME, &buf) != 0)
	{
		perror ("stat:");
		return -1;
	}
	printf ("file size is %lld Byte\n", buf.st_size);
	if (!stream)
	{
		perror ("fopen:");
		return -1;
	}
	{
		ret = fread (readbuf, READBUFSIZE, 1, stream);
		printf ("fread:%u Byte\n", ret * READBUFSIZE);
		assert (ret == 1);
	}
	printf ("current pos is %lld Byte\n", ftell(stream));
	if (fseek(stream, -READBUFSIZE, SEEK_END) != 0)
	{
		perror ("fseeko:");
		return -1;
	}
	{
		ret = fread (readbuf, READBUFSIZE, 1, stream);
		printf ("fread:%u Byte\n", ret * READBUFSIZE);
		assert (ret == 1);
	}
	printf ("after read last %d Byte ,cur pos is %lld Byte\n", READBUFSIZE,
			ftell (stream));
	return 0;
}

 

测试结果

在64bit虚拟机中,上面的程序测试结果一致,如下:
构造100G的文件:dd if=/dev/zero of=tt bs=1G seek=100 count=0
编译程序:gcc -g -o bigfile bigfile.c
运行程序,得结果:

following messages present system info.
sizeof(size_t) = 8, sizeof(off_t) = 8
64
Linux SPA 2.6.18-194.17.1.b1.05 #3 SMP Fri Jan 25 15:14:45 CST 2013 x86_64 x86_64 x86_64 GNU/Linux

following messages present file info.

file size is 107374182400 Byte
fread:100 Byte
current pos is 100 Byte
fread:100 Byte
after read last 100 Byte ,cur pos is 107374182400 Byte

在32bit虚拟机中,有着不同的测试结果,现罗列如下:
对于测试程序一:
构造100G的文件:dd if=/dev/zero of=tt bs=1G seek=100 count=0
编译程序:gcc -g -o bigfile bigfile.c
运行程序,得结果:

following messages present system info.
sizeof(size_t) = 4, sizeof(off_t) = 4
32
Linux localhost.localdomain 2.6.32-220.el6.i686 #1 SMP Tue Dec 6 16:15:40 GMT 2011 i686 i686 i386 GNU/Linux

following messages present file info.

stat:: Value too large for defined data type

构造100G的文件:dd if=/dev/zero of=tt bs=1G seek=100 count=0
编译程序:gcc -D_FILE_OFFSET_BITS=64 -g -o bigfile bigfile.c
运行程序,得结果:

following messages present system info.
sizeof(size_t) = 4, sizeof(off_t) = 8
32
Linux localhost.localdomain 2.6.32-220.el6.i686 #1 SMP Tue Dec 6 16:15:40 GMT 2011 i686 i686 i386 GNU/Linux

following messages present file info.

file size is 107374182400 Byte
fread:100 Byte
current pos is 100 Byte
fread:100 Byte
after read last 100 Byte ,cur pos is 107374182400 Byte

对于测试程序二:

有着和测试程序一同样的结果。

疑问

从测试结果并没有发现ftell和ftello之间的差别,只要加上-D_FILE_OFFSET_BITS=64 选项,程序都可以正确运行。可,为什么最后ftell返回的long型返回值,可以输出那么大的数值呢?

也许问题就出在你这里,我们在打印ftell的返回值时,使用的是%lld格式。为此,我将程序中ftell打印的地方,都换成%ld进行输出,然而,程序依然可以运行,只是,ftell的输出值有的出现了溢出,导致输出信息出错。

至此,无论如何,API都能正常工作,至于原因,因为测试用例的测试点有误,需要改进测试用例。调用ftell和fseek时,如果文件位置超出了32bit数可以表示的范围,那么fseek和ftell将不能正常工作。

 

ftello&fseeko

Linux man ftello部分信息:

NAME
       fseeko, ftello - seek to or report file position

SYNOPSIS
       #include <stdio.h>

       int fseeko(FILE *stream, off_t offset, int whence);

       off_t ftello(FILE *stream);

DESCRIPTION
       The  fseeko()  and ftello() functions are identical to fseek() and ftell() (see fseek(3)), respec-
       tively, except that the offset argument of fseeko() and the return value of ftello()  is  of  type
       off_t instead of long.

       On many architectures both off_t and long are 32-bit types, but compilation with
              #define _FILE_OFFSET_BITS 64
       will turn off_t into a 64-bit type.

RETURN VALUE
       On  successful  completion, fseeko() returns 0, while ftello() returns the current offset.  Other-
       wise, -1 is returned and errno is set to indicate the error.

 

ftell&fseek

linux man ftell部分信息:

NAME
       fgetpos, fseek, fsetpos, ftell, rewind - reposition a stream

SYNOPSIS
       #include <stdio.h>

       int fseek(FILE *stream, long offset, int whence);

       long ftell(FILE *stream);

       void rewind(FILE *stream);

       int fgetpos(FILE *stream, fpos_t *pos);
       int fsetpos(FILE *stream, fpos_t *pos);

DESCRIPTION
       The  fseek()  function sets the file position indicator for the stream pointed to by stream.  The new
       position, measured in bytes, is obtained by adding offset bytes to the position specified by  whence.
       If whence is set to SEEK_SET, SEEK_CUR, or SEEK_END, the offset is relative to the start of the file,
       the current position indicator, or end-of-file, respectively.  A successful call to the fseek() func-
       tion clears the end-of-file indicator for the stream and undoes any effects of the ungetc(3) function
       on the same stream.

       The ftell() function obtains the current value of the file position indicator for the stream  pointed
       to by stream.

       The  rewind()  function  sets  the file position indicator for the stream pointed to by stream to the
       beginning of the file.  It is equivalent to:

              (void) fseek(stream, 0L, SEEK_SET)

       except that the error indicator for the stream is also cleared (see clearerr(3)).

       The fgetpos() and fsetpos() functions are alternate interfaces  equivalent  to  ftell()  and  fseek()
       (with  whence set to SEEK_SET), setting and storing the current value of the file offset into or from
       the object referenced by pos.  On some non-Unix systems an fpos_t object may be a complex object  and
       these routines may be the only way to portably reposition a text stream.

RETURN VALUE
       The  rewind()  function  returns no value.  Upon successful completion, fgetpos(), fseek(), fsetpos()
       return 0, and ftell() returns the current offset.  Otherwise, -1 is returned  and  errno  is  set  to
       indicate the error.

ERRORS
       EBADF  The stream specified is not a seekable stream.

       EINVAL The whence argument to fseek() was not SEEK_SET, SEEK_END, or SEEK_CUR.

 

fstat

Linux man fstat部分信息:

NAME
       stat, fstat, lstat - get file status

SYNOPSIS
       #include <sys/types.h>
       #include <sys/stat.h>
       #include <unistd.h>

       int stat(const char *path, struct stat *buf);
       int fstat(int filedes, struct stat *buf);
       int lstat(const char *path, struct stat *buf);

DESCRIPTION
       These  functions return information about a file.  No permissions are required on the file itself,
       but ? in the case of stat() and lstat() ? execute (search) permission is required on  all  of  the
       directories in path that lead to the file.

       stat() stats the file pointed to by path and fills in buf.

       lstat()  is  identical  to stat(), except that if path is a symbolic link, then the link itself is
       stat-ed, not the file that it refers to.

       fstat() is identical to stat(), except that the file to  be  stat-ed  is  specified  by  the  file
       descriptor filedes.

       All of these system calls return a stat structure, which contains the following fields:

          struct stat {
              dev_t     st_dev;     /* ID of device containing file */
              ino_t     st_ino;     /* inode number */
              mode_t    st_mode;    /* protection */
              nlink_t   st_nlink;   /* number of hard links */
              uid_t     st_uid;     /* user ID of owner */
              gid_t     st_gid;     /* group ID of owner */
              dev_t     st_rdev;    /* device ID (if special file) */
              off_t     st_size;    /* total size, in bytes */
              blksize_t st_blksize; /* blocksize for filesystem I/O */
              blkcnt_t  st_blocks;  /* number of blocks allocated */
              time_t    st_atime;   /* time of last access */
              time_t    st_mtime;   /* time of last modification */
              time_t    st_ctime;   /* time of last status change */
          };

在此处附上stat的信息,是想说明在stat获取的文件大小st_size也是off_t类型的。

NXP(imx8qxp)上android11的EG25-G(4G)模块调试记录 文章目录一、前期准备二、底层配置三、添加厂商提供的ril.so库 最近在android11上调试一款移远的4G模块(EG25-G)第一次调试4G,做个笔记记录。 一、前期准备 一款新的4G模块,我们需要厂商提供对应的so库,否则无法进行后期的工作,也一并要求厂商提供一定的移植文档。 二、底层配置 厂商提供的一般都是对应的上层配置,我们需要自己去调试底层。 首先需要确定供电正确,这和需要你的硬件工程师进行配合,然后你需要注意4G模块的商店时序,可能需要重复的改变一个供电gpio的状态。 打开4G模块的通信端 阅读详情

相关推荐

【移远EG800K-CN】从AT指令到MQTT实战:4G模块云端通信全解析

本文详细解析移远EG800K-CN 4G模块的AT指令应用与MQTT云端通信实战。从硬件连接到网络配置,再到MQTT协议的数据上报与命令接收,提供了完整的物联网通信解决方案,帮助开发者快速实现设备与云端的稳定数据交互。

o1p2q3r的博客 559

C语言获取超大文件(超过2G)大小的功能

C语言获取超大文件(超过2G)大小的功能 昨天在使用fseek及ftell获取大小超过2G的文件大小时发现ftell获取到的值为-1,即便其返回值类型定义为long long还是为-1. 经过查阅文档才发现,针对超大文件有新的函数可以获取文件大小。 fseeko64 和 ftello64两个方法结合就能得出文件正确的大小了。 使用方式如下: off64_t getFileSize(char *filePath) { FILE *f; f = fopen(filePath, "rb");

codears的博客 4227

EG800K 4G模块AT指令避坑指南:让你的STM32物联网项目稳定连接云端

本文详细解析了EG800K 4G模块在STM32物联网项目中的AT指令应用避坑指南,涵盖从底层协议到云端稳定的全链路优化策略。通过实战案例和防护机制,帮助开发者解决常见通信陷阱,提升云端通信的稳定性和效率。

weixin_26834815的博客 288

文件操作

int fseek(FILE *stream, long offset, int whence);        long ftell(FILE *stream);  int fseeko(FILE *stream, off_t offset, int whence);//off_t 为64位整数        off_t ftello(FILE *stream); 

manyangyang520的专栏 655

01 RK3568调试4G 模块 EG800AK-CN

需要通过在kernel/drivers/usb/serial/option.c文件中添加以下语句来启用reset-resume机制。为了识别模块,需将模块的VID和PID信息添加到[KERNEL]/drivers/usb/serial/option.c文件中,对应的VID和PID下图所示:EG800AK参考EC800M。根据 USB 协议的要求,通过在kernel/drivers/usb/serial/usb_wwan.c文件中添加如下语句在 bulk-out 传输过程中添加处理零包的机制。

qq_39451352的博客 1306

HFSS仿真中如何提取最大E/H场强与频率关系曲线

本文详细讲解了在HFSS仿真中提取最大E/H场强与频率关系曲线的完整流程。通过使用场计算器(Field Calculator)和创建场报告,工程师可以准确获得器件在整个频带内的电场或磁场强度峰值,并进一步推导出关键的功率容量曲线,为高功率射频器件(如滤波器、耦合器)的设计提供至关重要的安全评估依据。

ss78901的博客 1098

linux fopen打开大于4G的文件 失败

用fopen函数打开一个大于4G的文件失败,解决方法:在makefile编译选项里加上如下选项:-D_GNU_SOURCE -D_XOPEN_SOURCE=600 -D_LARGEFILE_SOURCE-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64当然还有其他的方法(出自某哥的博客),比如:正常32位linux系统打开大于2G的文件会报错,解决办法:一、定...

xiaojun13355的博客 2515

告别音质玄学:实测ACM8625S搭配杰理AC695x,如何通过寄存器精准调出好声音

第一次听到ACM8625S驱动音箱发出的声音时,我有些失望——这个被厂商宣传为"高保真数字功放"的芯片,默认配置下的表现甚至不如一些廉价模拟功放。经过两周的反复调试,最终配置使这款售价不到200元的音箱达到了接近专业监听设备的音质水平。特别是在鼓点和电吉他表现上,既保持了足够的冲击力,又不会掩盖人声细节。例如,当频率响应曲线在10kHz有+2dB提升时,多数评测者认为听感最佳,尽管这会使THD略微增加0.05%。虽然厂商提供的配置工具能快速生成基础代码,但想要获得最佳音效还需要手动优化。

weixin_29655587的博客 354

ftell/ftello、fseek/fseeko、fsetpos/fgetpos、rewind

讲解了在标准IO流中position(位置)相关函数#include <stdio.h>int fseek(FILE *stream, long offset, int whence); //Returns: current file position indicator(指示器) if OK, -1L on error long ftell(FILE *stream); //Returns:0 i

feather(猎羽) 2658

卷积码和Turbo码

通信原理相关博文目录:目录我们常在移动通信中遇到的卷积码就是一种非分组码,卷积码和信号处理中的卷积运算有关系吗?是不是就是信号处理中的卷积运算,先看看编码器的编码原理再说:下面是一个比较实用的卷积码编码器:它有三个移位寄存器D0,D1,D2和三个模2加法器,以及一个旋转开关组成,编码前,先将各级移位寄存器清零:现在假设输入的信息码元是1101:当输入的第一个码元为1时,三个模2加法器计算的结果都为...

Reborn Lee 2万+

西门子S7-1200PLC PID_Temp工艺指令在恒温控制中的实战应用

本文详细介绍了西门子S7-1200PLC中PID_Temp工艺指令在恒温控制系统中的实战应用。从硬件选型、安全接线,到TIA Portal软件组态、编程及核心PID_Temp指令调用,手把手指导搭建系统。重点讲解了利用指令自带的预调节与精确调节功能进行PID参数自整定,最终实现高精度、低波动的温度控制,适用于塑料成型、食品烘烤等多种工业场景。

i1j2k的博客 235

linux c 语言之--fseek(),fseeko(),fseeko64(),ftell(),ftello()讲解

转载:http://blog.youkuaiyun.com/lemoncyb/article/details/16841317fseek() 函数讲解:函数定义:int fseek(FILE *stream, long offset, int fromwhere);int fseeko(FILE *stream, off_t offset, int fromwhere);int fseeko64(FILE *s

大圣编了个程 8194

第二天 原来Labview语言结构也挺自然(2.1 顺序结构)

新建项目文件StructureTest.lvproj,新建四个子VI(FlatSequence.vi、CaseStructure.vi、LoopStructure.vi、EventStructure.vi),具体新建流程可以参考1.2节。

weixin_38637405的博客 1003

基于Xavier 移植移远EG25G 4G模块

基于Jetson Xavier NX 移植移远EG25G 4G模块 写在前面 用了好久的优快云, 这是我第一次写文章,想要作为自己这一次操作的记录,同时如果可以帮助到各位那就再好不过。同时第一次使用优快云编辑器书写,操作不是十分熟悉,格式可能不够标准,请大家见谅。 笔者个人之前没有任何驱动移植相关经验,这次能够实现上述功能非常感谢各位优快云的大佬们毫不吝啬地分享自己的操作步骤和经验,特别要感谢一位名字叫RMBR的大哥,百忙之中给了我很多帮助,这里再次说一声感谢,同时贴上我参考的他的文章地址给大家,大家

qq_39703165的博客 2735

YOLO11-Seg优化:卷积变体系列篇 | 动态蛇形卷积(Dynamic Snake Convolution) | ICCV2023

动态蛇形卷积(Dynamic Snake Convolution),增强微小特征提取能力,引入到YOLO11-Seg,与C3k2结合实现二次创新

会AI的学姐 370

vectorCast——Probe point 功能实现故障注入,局部变量打印,断点调试。

选择一个测试用例,选择coverage窗口进行查看。点击edit probe point,如图所示绿色的小圆圈。 选代码中选择需要打断点的地方进行点击。黑色的小圆点都可以选。 点击黑色小圆点,小圆点变绿,表示打断点成功。 此时就可以根据自己的需求在打断点的位置编写一些C语言的命令语句。 点击编译,成功会弹出窗口显示编译成功,失败会在下方报错error,并显示错误的原因。 点击应用保存,选择yes to all就可以了。 点击用例执行就可以看到打断点情况下的执行结果了。

weixin_59334478的博客 2067

移远4G模块EG800AK详解

本文介绍一下全球通信模块龙头移远通信,近期推出的新一代的小尺寸基于国产芯片平台ASR1605的一个4G CAT 1模块EG800AK。超小尺寸,专为 M2M 和 IoT 应用设计,尤其是小尺寸终端的需求。支持 DFOTA 远程在线升级,降低后期运维成本。支持 Wi-Fi Scan(可选)支持 GNSS(可选)*

qq_42713675的博客 5182

C#上位机实战:工业产线数据采集与监控系统开发(附源码思路)

模块化设计:四层架构清晰,各模块独立可替换,便于后期维护与扩展;稳定性强:支持断线重连、异常重试、并发采集,满足工业7×24小时运行需求;实用性高:覆盖产线监控核心功能,可视化组件适配工业场景,操作简单;源码可复用:通信类、采集服务、报警管理器等可直接复制到其他上位机项目。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1652

音诺ai翻译机集成EG91-E实现4G LTE高速联网

音诺AI翻译机集成移远EG91-E LTE模组,实现全球多频段4G联网,支持低功耗、高稳定性通信,保障实时语音互译与云端AI协同。

weixin_42608318的博客 932

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

GD32 4G模块通信调试记录

本文介绍了移远EG800AK系列4G模组与GD32微控制器的通信调试过程。EG800AK-CN是一款专为物联网设计的LTE Cat 1 bis模块,具有小尺寸、高性价比特点。文章详细展示了硬件接口电路设计,包括8pin/6pin USIM接口和串口通信电路。在软件方面,提供了AT指令操作示例(如查询IMSI、信号强度等)和关键程序设计思路,包括串口读写函数、TCP连接断开和初始化流程。初始化过程采用分步验证机制,包括命令模式确认、SIM卡检测、信号查询等步骤,确保可靠连接。该方案适用于各类物联网终端设备的4

qq_22560021的博客 2247

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

从零构建:基于国产NG32与EG800K的4G物联网通信实战

本文详细介绍了基于国产NG32单片机和EG800K 4G模块构建物联网设备的完整实战流程。从硬件选型、连接要点到软件驱动编写,重点解析了通过AT指令控制模块进行网络注册、TCP连接以及HTTP数据上报的核心步骤,为开发者实现低成本、稳定可靠的4G物联网通信提供了清晰指南。

weixin_29174385的博客 602

MyEMS开源能源管理系统 + EG200 4G网关

MyEMS是行业领先的开源能源管理系统,基于Python语言开发。用于工厂、建筑、商场、数据中心、园区等能源数据采集、处理、分析、报表和展示。还具有设备管理、故障诊断、工单管理、人工智能优化控制等功能。MyEMS由资深专业团队开发维护,源代码基于MIT开源软件许可协议发布。用开源助力实现碳达峰碳中和目标。MyEMS EG200 4G网关是面向能源管理系统而推出的4G网关,支持全网通4G LTE网络,具有高性价比、强适应的特点。

MyEMS开源能源管理系统 777

【移远EG800K-CN】手把手教你用4G模块以及在树莓派的网络连接

嵌入式,树莓派

xhyy_的博客 5388

3562android13适配4G模块EG800

<apn carrier="中国电信物联网m2m" mcc="460" mnc="03" apn="CTNET" user="m2m" password="vnet.mobi" type="default" />+ <apn carrier="中国联通物联网gzm2mapn" mcc="460" mnc="06" apn="unim2m.gzm2mapn" port="80" type="default,supl" />添加4G模块-EG800Z。

l257189的博客 199

MyEMS开源能源管理系统4G网关EG200

用于工厂、建筑、商场、数据中心、园区等能源数据采集、处理、分析、报表和展示。用户可以通过EG200实现对现场电表、水表、冷热量表、流量计等的数据采集,配合MyEMS开源能源管理系统,可实现云边端协同,助力用户快速创建能源管理应用。EG200具有边缘计算功能,支持下发脚本进行边缘侧逻辑处理,支持数据变量的线性函数换算,支持数据周期上报、变化上报、条件上报和条件控制等。支持100+个Modbus数据点边缘采集,配置好数据点参数后,设备上电自动轮询边缘数据点,将数据主动上报至服务器。工业级标准:-35℃。

MyEMS开源能源管理系统 441

EG810M4G模块介绍及常用AT指令

--------------- HTTP/FTP/MQTT(增强型) -------------------------------- TCP/UDP 套接字(增强型) -------------------------------- 文件系统(UFS) -------------------------------- URC 与指示 -------------------------------- 网络与附着 ----------------

m0_47413286的博客 1021
上一篇: 编译器gcc的常用选项
下一篇: 大小端模式及其验证
IT_Linux
博客等级 码龄14年 31粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值