Stm32非静态Arraw损坏

问题描述 投票:0回答:1

在stm32固件中,我声明了非静态数组:

uint8_t bufCan[8] = {0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31 };

当我使用此数组作为参数调用函数时,它就损坏了(填充了其他数据)。在调试时,我注意到此数组位于地址0x20007fc8。 RAM大小从0x200000000x20008000。因此,此数组放置在堆栈中并损坏。

如果我将此数组声明为static,则不会发生。在这种情况下,编译器将其数组放置在地址0x20000234处。

那么数组损坏的问题是什么?即使我将数组声明为非静态也不应该发生这种情况!

static stm32
1个回答
0
投票

如果我将此数组声明为静态,则不会发生。>

当我使用此数组作为参数调用函数时,它损坏了(填充了其他数据)。>

我认为您的代码看起来像这样

int another_function(int8_t *array){
    //Your routine with array
}

int yourfunction(){

    int8_t bufCan[8] = {0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31 };
    another_function(bufCan);
}

因此,当您在another_function中访问数组时,您发现它已损坏。但是,将此数组声明为static可以解决此问题。因此,我们可以假设问题出在堆栈上。

几乎没有发生,首先是动态内存分配,让我假设在调用another_function之前或在annoter_function主体内,您已经使用了动态内存分配器malloc()。这可能导致堆栈损坏。

[另一种选择是您已经向堆栈中的另一个数组写入了一些内容,并越过了它的边界,这又导致了数组损坏。

如果您可以用代码更新您的帖子,我可以提供更详细的答案。

© www.soinside.com 2019 - 2024. All rights reserved.