STM32
直播中

李静

7年用户 1005经验值
私信 关注
[问答]

STM32F0系列单片机,指针取整型值错误的原因?

  STM32F0系列单片机,指针取整型值错误,用F0的进来看下,代码如下,附件里也有个工程可以下来单步运行下,这是什么问题如何解决.

uint8_t a[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};        //定义a 数组
int main(void){
        
        uint32_t*b=0;        //指针b
        uint32_t cc;        //临时变量
        b=(uint32_t*)(a+1);        //给a的指针地址+1他        
        cc  =*b;                                        //取值这步运行就出错    //如果程序没出错cc的值应该为0x04030201,    但取值就出错
        if(cc == 1)cc=0;
        while(1){
                        
        }
}



回帖(1)

从未拥有

2024-5-15 16:57:28
在您提供的代码片段中,我注意到您正在尝试使用一个指向uint32_t类型的指针b来访问一个uint8_t类型的数组a。这可能会导致一些问题,因为指针类型不匹配。让我们逐步分析这个问题并找到解决方案。

1. 首先,您定义了一个uint8_t类型的数组a,它包含20个元素。

```c
uint8_t a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
```

2. 接下来,您声明了一个指向uint32_t类型的指针b,并将其初始化为0。

```c
uint32_t* b = 0;
```

3. 这里的问题在于,指针b的类型是uint32_t*,而数组a的类型是uint8_t。当您尝试通过指针b访问数组a的元素时,可能会出现类型不匹配的问题。

为了解决这个问题,您需要将指针b的类型更改为与数组a相同的类型,即uint8_t*。以下是修改后的代码:

```c
uint8_t a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
uint8_t* b = 0; // 修改指针类型为uint8_t*
uint32_t cc;

int main(void) {
    // 您的代码逻辑
}
```

现在,指针b的类型与数组a的类型相匹配,您应该能够正确地访问数组元素。如果您需要将指针b指向数组a,您可以使用以下代码:

```c
b = a; // 将指针b指向数组a的起始地址
```

这样,您就可以通过指针b正确地访问数组a中的元素了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分