在写完《长字符串处理》以后,好长时间也没想到写什么内容好,前几天发现好像没有介绍过指针,那么今天我们的教程重点是介绍CODESYS中指针的使用。指针可以说算是C语言的精髓之一,有很多的优点和方便之处,但是同时也是个超级大坑(优点和缺点从来都是一体两面的~~)。在绝大部分时候,指针属于那种完全可以不用的类型,但是了解一下总是好的(就是喜欢学一些奇奇怪怪的用不着的知识😊)。本次教程对指针的基本概念、类型及使用方式,还有CODESYS的绝对地址映射做一下简单的介绍。
一、什么是指针
指针就是存储对象的内存地址的变量。内存地址就是内存的编号。如果把内存空间比喻成一家酒店,那么内存地址就是房间号。数据是存储在内存中的,住酒店的客人是住在一个个房间里面一样。取数据的指针就是取数据的地址,也就是酒店的房间号。
在CODESYS里面是地址是可以用类似%MWx(x=0~n)来表示。例如:
%MW10 := 123;
数据123存储在内存地址%MW10处,10就是地址。如果定义一个指针指向10,那么就可以理解为这个指针的值就是10。W表示的WORD类型,就是指针指向的地址的空间大小,类似与酒店房间的不同类型,如标准间、大床房、总体套房等等。
指针和数组一样,也是一种变量类型,因此需要先定义后使用。在CODESYS中,指针的定义方式如下:
pa : POINTER TO INT;
a : INT := 1;
pa:=ADR(a);
变量pa 定义了一个指向 INT类型的指针。POINTER TO 是定义指针的关键字,INT是指向的数据类型。

二、指针的类型及定义
1. Pointer to
指针的声明格式如下:
<pointer name>: POINTER TO <data type | data unit type | function block>;
在CODESYS中,指针是一个DWORD类型的值(不区分32位还是64位平台)。
取值操作符^:获取指针指向对象的内容。如上图中,P1为变量D1的地址,而P1^为D1的值。
注意:由于I/O的具有访问限制,因此定义指向I/O的指针以后,在代码生成时编译器会提示“<pointer name >不是一个有效的赋值目标”。如果需要对I/O值进行操作,可以先将I/O值拷贝到自己定义的变量中,再进行指针操作。
2.指针的索引访问
CODESYS允许通过索引操作符[]来访问指针指向的变量类型,例如以前教程中提到的字符串STRING类型可以通过[]访问字符串中的单个字符。
指针所指向的变量类型决定了操作符[]的索引移动长度,例如
pInt : ARRAY[0..10] OF INT;
pInt[i]实际上是地址(pInt+ i * SIZEOF(INT))指向的值。<

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



