Other Parts Discussed in Thread: MSP430FR2633
主题中讨论的其他器件: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 开始、值不正确。
这是这些变量的存储器转储
