aPdOutputData数组用来存储主站下发的数据,EtherCAT的数据是小端模式的:

以我现在使用的CSV/CSP模式为例,RxPDO通道绑定关系为:

index6040是状态字对象索引,数据位宽16bit;index607A是TargetPosition对象索引,数据位宽32bit;index60FF是TargetVelocity对象索引,数据位宽32bit;index6060是模式对象索引,数据位宽8bit
按照小端模式,接收到的数据在内存中的顺序应该为:
Byte1 状态字【0】
Byte2 状态字【1】
Byte3 TargetPosition【0】
Byte4 TargetPosition【1】
Byte5 TargetPosition【2】
Byte6 TargetPosition【3】
Byte7 TargetPosition【0】
Byte8 TargetPosition【1】
Byte9 TargetPosition【2】
Byte10 TargetPosition【3】
Byte11 模式 【0】
APPL_OutputMapping函数处理数据时也确实调用了SWAPWORD、SWAPDWORD函数:

SWAPWORD:(函数定义是从网上找的)

SWAPDWORD:(函数定义是从网上找的)

经过SWAP函数的处理,相应的对象可以得到正确的数值。
但是在调试过程中,我看到了如下所示的现象:

我设定的TargetPosition数值是500000,即0x0007 A120
问题1.发现在调用SWAPDWORD函数前,TargetPosition在内存中的顺序已经被排好,这是为什么;
问题2.这个调试界面里,没有使用SWAPDWORD函数,发现TargetPosition对象也能得到500000,即0x0007 A120数值,这是为什么呢?
我理解的经过swap函数处理后,数据在内存中的顺序应该为:
Byte1 状态字【1】
Byte2 状态字【0】
Byte3 TargetPosition【3】
Byte4 TargetPosition【2】
Byte5 TargetPosition【1】
Byte6 TargetPosition【0】
Byte7 TargetPosition【3】
Byte8 TargetPosition【2】
Byte9 TargetPosition【1】
Byte10 TargetPosition【0】
Byte11 模式 【0】
如果将这些数据以Uint16的形式通过进程间通讯传递给C28,我理解的顺序是这样的:
Word1 状态字【1】状态字【0】
Word2 TargetPosition【3】TargetPosition【2】-----> 0x0007
Word3 TargetPosition【1】TargetPosition【0】-----> 0xA120
Word4 TargetPosition【3】TargetPosition【2】
Word5 TargetPosition【1】TargetPosition【0】
但是从调试结果看,C28侧却是这样的数据顺序:

即
Word2 TargetPosition【3】TargetPosition【2】-----> 0xA120
Word3 TargetPosition【1】TargetPosition【0】-----> 0x0007
问题3. 请问这是为什么