This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/MSP430FR2433:MSP430编译器无法正确取消引用2D 指针数组时遇到问题

Guru**** 2952510 points

Other Parts Discussed in Thread: MSP430FR2633

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/954238/compiler-msp430fr2433-having-trouble-with-msp430-compiler-not-correctly-de-referencing-a-2d-array-of-pointer

器件型号:MSP430FR2433
主题中讨论的其他器件:MSP430FR2633

工具/软件:TI C/C++编译器

您好、编译器团队、

使用 MSP430编译器 V20.2.LTS、优化=关闭、MSP430FR2633

我有一个有趣的问题、很可能我做了一些错误。  我有一个应用程序、在该应用程序中、我使用2D 指针阵列来指向保存测量值的结构、并且算法会浏览阵列以读取测量值。  我使用所示的代码对其进行仿真。  我看到的是第一行被正确取消引用、但后续行不正确。  我在 main.c 中包含了一个演示该问题的简单示例。

此外、在我的传感器结构中、如果我使用赋值 .pElements=元素、我会收到编译器警告、在这里、就像我使用下面代码中显示的内容一样、没有警告、但在任何一种情况下结果都是错误的。  

===========================

#include
#include

typedef 结构
{
   int16_t 值;

{Clement;

typedef 结构
{
   tElement** pElement;

}TSENSOR;

// 1. 创建代表传感器12个元件的12个物体
tElement A ={.value = 0};
tElement b ={.value = 1};
tElement c ={.value = 2};
tElement d ={.value = 3};
tElement e ={.value = 4};
tElement f ={.value = 5};
tElement g ={.value = 6};
tElement h ={.value = 7};
tElement I ={.value = 8};
tElement j ={.value = 9};
tElement k ={.value = 10};
tElement l ={.value = 11};


// 2. 创建指向每个元素的指针数组(用于后续处理)
tElement*元素[3][4]={{&a、&b、&c、&d}、{&e、&f、&g、&h}、{&i、&j、&k、&l}};

// 3. 创建传感器并将2D 阵列分配给指针
TSENSOR SENSOR ={

   .pElements=元素[0]、

};

//这演示了如何从第1行开始正确取消对2D 阵列的引用
int main (空)
{

   volatile uint16_t w、x、y、z、ww、xx、yy、zz、www、xxx、yyy、zzz;

   WDTCTL = WDTPW | WDTHOLD;

   //我们在应用程序中使用指向传感器的指针,因此在此处使用指针
   TSENSOR* pSensor =传感器(&S);

   //遍历2D 阵列并验证读取的值是否正确
   w = pSensor->pElements[0][0].value;    //= 0正确
   x = pSensor->pElements[0][1].value;    //= 1正确
   y = pSensor->pElements[0][2].value;    //= 2正确
   z = pSensor->pElements[0][3].value;    //= 3正确

   WW = pSensor->pElements[1][0].value;   //= 1不正确,应为4
   xx = pSensor->pElements[1][1].value;   //= 2不正确,应为5
   YY = pSensor->pElements[1][2].value;   //= 3不正确,应为6
   ZZ = pSensor->pElements[1][3].value;   //= 4不正确,应为7

   www = pSensor->pElements[2][0].value;   //= 2不正确,应为8
   xxx = pSensor->pElements[2][1].value;   //= 3不正确,应为9
   yyy = pSensor->pElements[2][2].value;   //= 4不正确,应为10
   ZZZ = pSensor->pElements[2][3].value;   //= 5不正确,应为11


   while (1);

================================================================================

当我运行代码时、我可以停止并检查这些值。  您可以看到、从变量 ww 开始、值不正确。

这是这些变量的存储器转储

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这一问题正在通过私人渠道解决。  解决后、我将发布一个摘要。

    谢谢、此致、

    乔治