查看: 4565|回复: 30
收起左侧

[应用问题] 指针使用

Felix_Ge 2022-2-19 11:46:10 | 显示全部楼层 |阅读模式
邀请回答
如果要高效编程肯定少不了使用指针,那么CodeSys中怎么使用指针呢?请看下面CodeSys编程指南中的内容如下:
1) 指针的概念
所谓指针就是一个地址。 如果在 CoDeSys 中定义了一个变量,然后对其进行编译,系统则会
给这个变量分配相应的内存单元。系统根据变量的类型分配相应的内存空间,如一个 BYTE 变量,
系统则为其分配 1 个字节的存储空间,如果是一个 REAL 类型变量,系统则为其分配 4 个字节的内
存存储空间。内存以字节为单位,以“地址”进行编号,可以理解为酒店的房间号,地址所标志的
内存单元中存放着具体的数据,这就相当于在宾馆中居住的客人。
一般而言,程序都是通过变量名来对内存单元进行存储操作的。这是因为程序经过 CoDeSys
编译后,已经将变量名转换为变量的内存地址,对变量的存储其实都是通过内存地址所进行的。 如
假设在程序中定义了 var1, var2 和 var3 三个变量,在声明时将其都定义为 WORD 类型,经过系统
编译后,系统分配给 var1 的内存空间为两个字节, 地址分别为 1000 和 1001, var2 为 1002 和 1003,
var3 为 1004 和 1005。 1000 和 1001 内存中的具体数据则是 var1 内的具体数据, var2 和 var3 也是相
同的道理, 示意图如图 4.x 所示。 此种按变量地址存储数据的方式在高级语言中也称之为“直接访
问”方式。

2) 指针变量
至此,读者应该对指针有了初步的概念,一个变量的地址称为该变量的“指针”。如地址为
1000 和 1001 的变量是 var1 的指针,如图 4.x 所示。
如果有一个变量专门用来存放另一个变量的地址(指针),此时,我们则称它为“指针变量”。
为了更好的理解指针变量的概念,在此举一个例子,为了打开 A 抽屉有两种方法,一是将 A 钥匙
带在身上,需要时直接找出该钥匙打开抽屉,取出所需的东西,也就是之前所提到的“直接访问”。
还有一种方法是,为了安全,可以将 A 钥匙放到另一个抽屉 B 中所起来。如果需要打开 A 抽屉,
就需要先找出 B 钥匙,打开 B 抽屉,取出 A 钥匙,再打开 A 抽屉,取出物品。这就是所谓的“间
接访问”的概念。 在 CoDeSys 中使用关键字“POINT TO+类型”对指针变量进行声明。类型可以
为变量、程序、功能块、方法和函数的内存地址。它可以指向上述的任何一个对象以及任意数据类
型,包括用户定义数据类型。
声明指针的语法如下:
<标识符>: POINTER TO <数据类型 | 功能块 | 程序 | 方法 | 函数>;
取指针地址内容即意味着读取指针当前所指地址中存储的数据。通过在指针标识符后添加内容
操作符“^” ,可以取得指针所指地址的内容。通过下面的例子,希望读者对指针能有更深刻的理
解。
【例 4.X】指针举例,
VAR
PointVarOINTER TO INT;
var1:INT := 5;
var2:INT;
END_VAR
PointVar := ADR(var1);
var2:= PointVar^;

程序输出的结果如 4.x 所示,在声明中先定义 PointVar 变量为指针变量,该变量将来用于存储
地址数据。
程序中使用了 ADR 指令,该指令是用来获取变量内存地址的操作符,执行完第一条指令后,
PointVar 内就已经获取了 var1 的内存地址信息(16 进制的 13B7143A) 。
PointVar^指的是该内存地址中对应的具体数据(16#13B7143A 中的数据) ,即 var1 中 5。第二
条指令执行后,就将 PointVar^赋值给了 var2,故 var2=5。
【例 4.X】使用指针,将 INT 型变量 nIntValue 中的低 8 位数据和高 8 位数据分别赋值给 BYTE
型变量 nByte_low 和 nByte_high。
VAR
PointVar_intOINTER TO INT;
PointVar_byte_lowOINTER TO BYTE;
PointVar_byte_HighOINTER TO BYTE;
nIntValue:INT := 16#1234;
nByte_low:BYTE;
nByte_high:BYTE;
END_VAR
PointVar_int := ADR(nIntValue);
PointVar_byte_low:=PointVar_int+1;
PointVar_byte_High:=PointVar_int;
nByte_high:=PointVar_byte_low^;
nByte_low:=PointVar_byte_High^;


申明以上内容版权归Codesys编程指南作者所有。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册   

x




上一篇:用于隐含检查的POU之数组越界
下一篇:用于隐含检查的POU之指针校验函数

已有 1 人打赏作者

ertyuio2025 赏了楼主50水滴
回复 邀请回答送花

使用道具 举报

Slimming 2022-2-19 20:27:23 | 显示全部楼层
简单点,指针就是变量的内存地址,一般利用地址去寻找变量。
指针定义,var A pointer to int;
指针的地址赋值,A:=ADR(B);
指针的变量引用,A^就代表B
回复 送花

使用道具 举报

工控-老徐 2022-2-25 11:33:31 | 显示全部楼层
指针有哪些典型的应用?用在哪些地方可以优化程序?
回复 送花

使用道具 举报

徐海国 发表于 2022-2-25 11:33
指针有哪些典型的应用?用在哪些地方可以优化程序?

蹲一个  蹲一个   蹲一个
回复 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册   

本版积分规则

有技术问题,就上汇川技术社区

INOVANCE汇川技术 公众号

扫码下载掌上汇川APP

全国服务热线:8:30-17:30

4000-300124

苏州地址:江苏省苏州市吴中区越溪友翔路16号

深圳地址:深圳市龙华新区观澜街道高新技术产业园汇川技术总部大厦

Copyright © 2003-2100 汇川技术 Powered by Discuz! X3.4 ( 苏ICP备12002088号 )
快速回复 返回列表 返回顶部