- 博客(34)
- 资源 (18)
- 收藏
- 关注
原创 fatts文件系统检查文件或目录是否存在
芯片型号:STM32F407函数名称:FRESULT f_stat (const TCHAR* path, FILINFO* fno)功能说明: path 指向以null结尾的字符串的指针,该字符串指定要获取其信息的路径,不能是根目录。fno 指向FILINFO结构体来存储对象的信息,如果不需要此信息,请设置空指针。FRESULT fr;FILINFO fno;printf("Test for 'file.txt'...\n");fr = f_st...
2022-05-21 20:37:30 3352
原创 Modbus寄存器分类及地址分配
Modbus协议中一个重要的概念是寄存器,所有的数据均存放于寄存器中。最初Modbus协议借鉴了PLC中寄存器的含义,但是随着Modbus协议的广泛应用,寄存器的概念进一步泛化,不再是指具体的物理寄存器,也可能是一块内存区域。Modbus寄存器根据存放的数据类型以及各自读写特性,将寄存器分为4个部分,这4个部分可以连续也可以不连续,由开发者决定。Modbus寄存器分类及说明Modbus寄存器地址分配...
2022-05-19 21:19:57 17215
原创 Modbus通信协议深入
Modbus协议是一种单主/多从的通信协议,其特点是在同一时间,总线上只能有一个主设备,但可以有一个或者多个(最多247个)从设备。Modbus通信总是由主设备发起,当从设备没有收到来自主设备的请求时,不会主动发送数据。从设备之间不能相互通信,主设备同时只能启动一个Modbus访问事务处理。 主设备可以采用两种方式向从设备发送Modbus请求报文,即主设备可以对指定的单个从设备或者线路上所有的从设备发送请求报文,而从设备只能被动接收请求报文后给出响应报文即应答。这两种模式分别如下...
2022-05-19 21:10:20 1941
原创 EtherCAT工业以太网的主要特点
1)完全符合以太网标准。普通以太网相关的技术都可以应用于EtherCAT 网络中。EtherCAT设备可以与其他的以太网设备共存于同一网络中。普通的以太网卡、交换机和路由器等标准组件都可以在EtherCAT中使用。2)支持多种拓扑结构。如线形、星形及树形。可以使用普通以太网使用的电缆或光缆。当使用100Base-TX电缆时,两个设备之间的通信距离可达100m。当采用100BASE-FX模式,两对光纤在全双工模式下,单模光纤能够达到40km的传输距离,多模光纤能够达到2km的传输距离。EtherCAT还能
2022-05-15 11:17:07 3513
原创 函数参数声明为const常量的理由
将引用参数声明为常量数据的引用的理由有三个:使用const可以避免无意中修改数据的编程错误; 使用const使函数能够处理const和非const实参,否则将只能接受非const数据; 使用const引用使函数能够正确生成并使用临时变量。 因此,应尽可能将引用形参声明为const。...
2022-05-14 16:50:49 472
原创 C++之引用变量的作用及用法
C++新增了一种复合类型——引用变量。引用是已定义的变量的别名(另一个名称)。例如,如果将twain作为clement变量的引用,则可以交替使用twain和clement来表示该变量。那么,这种别名有何作用呢?引用变量的主要用途是用作函数的形参。通过将引用变量用作参数,函数将使用原始数据,而不是其副本。这样除指针之外,引用也为函数处理大型结构提供了一种非常方便的途径,同时对于设计类来说,引用也是必不可少的。 C和C++使用&符号来指示变量的地址。C++给&符号赋予...
2022-05-14 11:10:16 801 1
原创 EtherCAT协议数据传输原理
EtherCAT是由德国倍福公司开发的,并且在2003年底成立了ETG工作组。EtherCAT是一个可用于现场级的超高速I/O网络,它使用标准的以太网物理层和常规的以太网卡,介质可为双绞线或光纤。 如果将单个以太网帧用于每个设备,从理论上讲,其可用数据率非常低。一般常规的工业以太网的传输方法都采用先接收通信帧,进行分析后作为数据送入网络中各个模块的通信方式,而EtherCAT的以太网协议帧中已经包含了网络中各个模块的数据。 数据的传输采用移位同步的方法进行,即在网络的模块中得到其...
2022-05-14 10:46:31 2013
原创 EtherCAT实时工业以太网模型
实时工业以太网采用不同的实时策略来提高实时性能,根据其提高实时性策略的不同,实现模型可分为3种。基于TCP/IP实现,在应用层上做修改。 此类模型通常采用调度法、数据帧优先级机制或使用交换式以太网来滤除商用以太网中的不确定因素。这一类工业以太网的代表有Modbus/TCP和EtherNet/IP。此类模型适用于实时性要求不高的应用中。基于标准以太网实现,在网络层和传输层上进行修改。 此类模型将采用不同机制进行数据交换,对于过程数据采用专门的协议进行传输,TC...
2022-05-14 09:45:38 834
原创 OSI模型
OSI 模型(Open System Interconnection model,开放系统互联模型)是一个由国际标准化组织提出概念模型,试图提供一个使各种不同的计算机和网络在世界范围内实现互联的标准框架。 它将计算机网络体系结构划分为七层,每层都可以提供抽象良好的接口。了解OSI模型有助于理解实际上互联网络的工业标准——TCP/IP协议。 OSI模型各层间关系和通讯时的数据流向如图所示。 OSI模型是一个理想化的模型,实际上的协议比如TCP/IP并不是严格按照此模型来做的。了解OS
2022-05-13 21:34:16 1460 1
原创 网络编程Socket基础
Socket能够实现网络上的不同主机之间或同一主机的不同对象之间的数据通信。所以,Socket已经是一类通用通信接口的集合。地址表示数据结构 IP协议使用的地址描述数据结构,使用需要包括头文件netinet/in.h。 Linux下该结构的典型原型声明如下:236 /* Structure describing an Internet socket address. */ 237 struct sockaddr_in 238 { 239 __SOCKADDR_...
2022-05-12 07:53:22 370
原创 Linux查看系统基本信息
查看系统信息:# uname -a # 查看内核/操作系统/CPU信息 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算机名 # lspci -tv # 列出所有PCI设备 # lsusb -tv # 列出所有USB设备 # lsmod # 列出加载的内核模块 # env # 查看环境变量 # modinfo softdog # 查看模块信息查看系统资源信息:# free -m # 查看内存使用量和交换区使用量 # df -h # 查看各分
2022-05-12 07:24:30 2959
原创 C/C++深入函数指针
下面通过一个示例演示如何更好使用函数指针。首先,如下是一些函数的原型,它们的特征标和返回类型相同: 这些函数的特征标看似不同,但实际上相同。首先,前面说过,在函数原型中,参数列表const double ar [ ]与const double * ar的含义完全相同。其次,在函数原型中,可以省略标识符。因此,const double ar [ ]可简化为const double [ ],而const double * ar可简化为const double *。因此,上述所有函...
2022-05-10 22:39:11 355
原创 C/C++函数指针
声明指向某种数据类型的指针时,必须指定指针指向的类型。同样,声明指向函数的指针时,也必须指定指针指向的函数类型。这意味着声明应指定函数的返回类型以及函数的特征标(参数列表)。也就是说,声明应像函数原型那样指出有关函数的信息。例如,假设Pam leCoder编写了一个估算时间的函数,其原型如下:则正确的指针类型声明如下: 这与pam( )声明类似,只是将pam替换为(*pf)。由于pam是函数,因此(*pf)也是函数。而如果(*pf)是函数,则pf就是函数指针。 ...
2022-05-10 07:31:47 221 1
原创 STM32F407 emmc驱动初始化失败解决方法
现象:初始化时CMD0命令执行正常,CMD1命令未获取到emmc模块有效电压。emmc芯片型号: 三星KLM8G1GEME-B041。emmc模块20pin引脚定义如下图:uint8_t InitAppEmmc(void){ uint8_t Result = EMMC_SUCCESS; /* 返回值 */ uint8_t Work[512]; Result = InitEmmc_EMMC(); if(Result != EMMC_SUC...
2022-05-09 22:15:47 4426 1
原创 Visual Studio Code编译Keil工程
报错信息如下:在Visual Studio Code已安装应用中选择Keil Assistant,设置/扩展设置,添加keil.exe的安装路径,重新编译即可。
2022-05-08 21:08:15 1451
原创 C/C++之递归
C++函数有一种有趣的特点——可以调用自己(然而,与C语言不同的是,C++不允许main( )调用自己),这种功能被称为递归。尽管递归在特定的编程(例如人工智能)中是一种重要的工具,但这里只简单地介绍一下它是如何工作的。 如果递归函数调用自己,则被调用的函数也将调用自己,这将无限循环下去,除非代码中包含终止调用链的内容。通常的方法将递归调用放在if语句中。例如,void类型的递归函数recurs( )的代码 递归调用将导致一系列有趣的事件。只要if语句为true...
2022-05-08 18:06:28 1349
原创 C/C++运算符优先级汇总
C语言有大量的运算符,算数运算符、关系运算符、赋值运算符、逻辑运算符、逻辑表达式、条件运算符、指针有关的运算符和符号运算符等。下表表按优先级从高至低的顺序汇总列出了C运算符,并给出了其结合性。除非特别指明,否则所有运算符都是二元运算符(需要两个运算对象)。注意,一些二元运算符和一元运算符的表示符号相同,但是其优先级不同。例如,*(乘法运算符)和*(间接运算符)。...
2022-05-07 22:55:08 2158
原创 C/C++之do while循环
while循环和for循环都是入口条件循环,即在循环的每次迭代之前检查测试条件,所以有可能根本不执行循环体中的内容。C语言还有出口条件循环(exit-condition loop),即在循环的每次迭代之后检查测试条件,这保证了至少执行循环体中的内容一次。这种循环被称为do while循环。如下程序演示了一个示例。#include <stdio.h>int main(void){ const int secret_code = 13; int code_en...
2022-05-07 22:36:52 5869
原创 C++读文件操作
文本输入,它是基于控制台输入的。控制台输入涉及多个方面,下面首先总结这些方面。必须包含头文件iostream。 头文件iostream定义了一个用处理输入的istream类。 头文件iostream声明了一个名为cin的istream变量(对象)。 必须指明名称空间std;例如,为引用元素cin,必须使用编译指令using或前缀std::。 可以结合使用cin和运算符>>来读取各种类型的数据。 可以使用cin和get( )方法来读取一个字符,使用cin和getline...
2022-05-06 07:56:23 1780
原创 C++写文件操作
对于文件输入,C++使用类似于cout的东西。下面来复习一些有关将cout用于控制台输出的基本事实,为文件输出做准备。必须包含头文件iostream。 头文件iostream定义了一个用处理输出的ostream类。 头文件iostream声明了一个名为cout的ostream变量(对象)。 必须指明名称空间std;例如,为引用元素cout和endl,必须使用编译指令using或前缀std::。 可以结合使用cout和运算符<<来显示各种类型的数据。 文件输出与此极其相...
2022-05-05 22:38:16 1371
原创 C++之break和continue
break和continue语句都使程序能够跳过部分代码。可以在switch语句或任何循环中使用break语句,使程序跳到switch或循环后面的语句处执行。continue语句用于循环中,让程序跳过循环体中余下的代码,并开始新一轮循环。 该程序让用户输入一行文本。循环将回显每个字符,如果该字符为句点,则使用break结束循环。这表明,可以在某种条件为true时,使用break来结束循环。接下来,程序计算空格数,但不计算其他字符。当字符不为空格时,循环使用continue语...
2022-05-05 07:35:13 2455
原创 C++用枚举量作为switch的标签
程序使用enum定义了一组相关的常量,然后在switch语句中使用这些常量。通常,cin无法识别枚举类型(它不知道程序员是如何定义它们的),因此该程序要求用户选择选项时输入一个整数。当switch语句将int值和枚举量标签进行比较时,将枚举量提升为int。另外,在while循环测试条件中,也会将枚举量提升为int类型。下面是该程序的输出:...
2022-05-05 07:26:59 630
原创 EOF是什么
先看一下EOF的官方解释:计算机术语,缩写通常为EOF(End Of File),在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。在C语言中,或更精确地说成C标准函式库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志。 ...
2022-05-05 07:13:51 7714
原创 C/C++计算阶乘
下面使用for循环来计算并存储前16个阶乘。阶乘的计算方式如下:零阶乘写作0!,被定义为1。1!是1*0!,即1。2!为2*1!,即2。3!为3*2!,即6,依此类推。每个整数的阶乘都是该整数与前一个阶乘的乘积,该程序用一个循环来计算连续阶乘的值,并将这些值存储在数组中。然后,用另一个循环来显示结果。另外,该程序还在外部声明了一些值。...
2022-05-04 15:57:34 6625
原创 C++之数组、结构和指针
数组、结构和指针是C++的3种复合类型。数组可以在一个数据对象中存储多个同种类型的值。通过使用索引或下标,可以访问数组中各个元素。 结构可以将多个不同类型的值存储在同一个数据对象中,可以使用成员关系运算符(.)来访问其中的成员。使用结构的第一步是创建结构模板,它定义结构存储了哪些成员。模板的名称将成为新类型的标识符,然后就可以声明这种类型的结构变量。 共用体可以存储一个值,但是这个值可以是不同的类型,成员名指出了使用的模式。 指针是被设计用来存储地址的变量。我们说,指针指向它存储的地...
2022-05-04 15:03:13 315
原创 C++数组、vector对象和array对象的比较
要了解数组、vector对象和array对象的相似和不同之处,最简单的方式可能是看一个使用它们的简单示例,如程序所示。下面是该程序的输出示例:程序说明 首先,注意到无论是数组、vector对象还是array对象,都可使用标准数组表示法来访问各个元素。其次,从地址可知,array对象和数组存储在相同的内存区域(即栈)中,而vector对象存储在另一个区域(自由存储区或堆)中。第三,注意到可以将一个array对象赋给另一个array对象;而对于数组,必须逐元素复制数据。接下...
2022-05-04 14:49:57 303
原创 C++使用new和delete的示例
下面介绍一个使用new和delete来存储通过键盘输入的字符串的示例。程序定义了一个函数getname( ),该函数返回一个指向输入字符串的指针。该函数将输入读入到一个大型的临时数组中,然后使用new [ ]创建一个刚好能够存储该输入字符串的内存块,并返回一个指向该内存块的指针。对于读取大量字符串的程序,这种方法可以节省大量内存(实际编写程序时,使用string类将更容易,因为这样可以使用内置的new和delete)。 假设程序要读取1000个字符串,其中最大的字符串包含79个字符,...
2022-05-04 11:23:10 507
原创 C++指针和数组
下面对指针和数组做一总结。1.声明指针要声明指向特定类型的指针,请使用下面的格式:下面是一些示例:其中,pn和pc都是指针,而double *和char *是指向double的指针和指向char的指针。2.给指针赋值应将内存地址赋给指针。可以对变量名应用&运算符,来获得被命名的内存的地址,new运算符返回未命名的内存的地址。下面是一些示例:3.对指针解除引用对指针解除引用意味着获得指针指向的值。对指针应用解除引用或间接值运算符(*)来解除引用。因此,如果像上面的例.
2022-05-04 09:51:46 2658
原创 C++动态数组
下面是该程序的输出:从中可知,arraynew.cpp将指针p3当作数组名来使用,p3[0]为第1个元素,依次类推。下面的代码行指出了数组名和指针之间的根本差别:不能修改数组名的值。但指针是变量,因此可以修改它的值。请注意将p3加1的效果。表达式p3[0]现在指的是数组的第2个值。因此,将p3加1导致它指向第2个元素而不是第1个。将它减1后,指针将指向原来的值,这样程序便可以给delete[ ]提供正确的地址。...
2022-05-03 20:14:55 410
原创 C语言CRC32
#include "crc32.h"#include <stdint.h>static uint32_t crc_table[256] = { 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L, 0x0.
2021-10-24 15:47:37 369
原创 STM32系列单片机读取配置文件
STM32系列单片机也能读配置文件了,本文以.ini配置文件为例,单片机程序中需移植文件系统。单片机以往都是以16进制数据流的方式存储配置数据,虽然可靠稳定,但是不直观,可维护性差。
2021-10-24 15:02:00 2003
mysql-client-5.7-arm64
2022-05-08
mysql-server_5.7.37_arm
2022-05-08
gcc-linaro-arm-linux-gnueabihf-2014.04-win32.zip
2021-09-10
arm-none-linux-gnueabi-arm-2011.03-Win32.zip
2021-09-10
arm-linux snmp安装方法及安装包.zip
2021-08-24
嵌入式Linux系统ftp虚拟用户配置文件和源码.zip
2021-08-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人