找出特定地址上的对象是否为指针

我有一个通过TCP / IP连接与嵌入式板通信的PC程序(Infineon XE169(C166系列))。

该PC程序请求在某个地址上存储哪些数据。 PC程序是uC / Probe,我无法改变该程序的工作方式。

例如,uC / Probe发送以下消息:

____________________________________________________________________________________________________________ | Prefix | Length |Pkt_nr|Unused| Format | read size | Address to read |Unused|Postfix| |--------------------|-----------|------|------|-----------|-----------|----------------------|------|-------| |0x75 0x43 0x50 0x72 | 0x00 0x08 | 0x00 | 0x00 | 0x02 0x00 | 0x04 0x00 | 0xDC 0x3E 0x61 0x00 | 0x00 | 0x2F | |u CP r | 8 | 0 | 0 | 2 | 4 | 0x613EDC | 0 | / | |____________________|___________|______|______|___________|___________|______________________|______|_______| 

这是从地址0x613EDC请求数据并从那里读取4个字节的消息。

查看.map文件时,我可以看到在此位置放置了OSTCBCurPtr变量。 此变量是OS_TCB *,因此在请求的地址处是此变量指向的地址。

我现在手动查看.map文件在地址上放置了什么样的变量。 但是我可以通过嵌入式主板上的C代码获得变量类型。 我想要知道的是,如果位于该特定位置的对象是否是指针,如果它是uint16_t,uint8_t,char或任何对我来说不重要的话。

背景资料,为什么我想知道这一点

嵌入式主板会将请求的数据发送回uC / Probe程序。 但是指针以奇怪的方式存储在XE169芯片中。 以上示例的指针例如存储如下:

  _______________________________________ | Address | 0 | 1 | 2 | 3 | |-----------|------|------|------|------| |0x00613EDC | 0xE6 | 0x1F | 0x84 | 0x01 | |___________|______|______|______|______| 

因为值是以小端存储的,所以这将导致数字0x01841FE6。 此号码目前已发送回uC / Probe。 但他的号码不是正确的位置,必须做一点计算才能到达实际的地址位置。

我们必须拆开这个32位数字并将其分成2个16位数字。 然后我们得到:

 Hex: 0x0184 and 0x1FE6 Bits: 0b0000000110000100 and 0001111111100110 

现在,16个高位必须向右移动2位。 这些高16位的2个最低有效位成为低16位的2个最高有效位。

结果如下:

 Hex: 0x0061 and 0x1FE6 Bits: 0b0000000001100001 and 0001111111100110 

当我们将这2个16位数字粘贴回32位数时,我们得到指针所指向的地址:0x00611FE6

这是我必须发送回uC / Probe的号码。 这种计算只需要在uC / Probe请求指针时发生,对于非指针,它只需要发回从给定地址读取的数据。 这就是为什么我需要知道所请求的数据是否是一个指针,希望有人可以帮助我。