TASKING编译器显示与嵌入式项目函数内自动数组初始化相关的不同输出:
代码变体1:
#define ARRAY_LENGTH (3u)
void my_func(void)
{
/* VARIANT 1: Initialisation of array */
float my_array[ARRAY_LENGTH] = {1.f,2.f,3.f};
...
return;
}
代码变体2:
#define ARRAY_LENGTH (3u)
void my_func(void)
{
/* VARIANT 2: array is not initialized */
float my_array[ARRAY_LENGTH];
/* VARIANT 2: values are assigned later in the code */
my_array[0] = 1.f;
my_array[1] = 2.f;
my_array[2] = 3.f;
...
return;
}
通过使用代码变体1生成一个.map文件,我可以观察到编译器在数据内存中为这个局部数组分配了一些位置。
相比之下,我在代码变体2中没有观察到它,假设编译器将局部数组放在堆栈中。
目前,我无法在TASKING用户手册中找到解释
1条答案
按热度按时间2w2cym1i1#
基本上:
.data
结束。因此,如果您 * 希望 * 数组以
.data
结束,则将其声明为static
和/或将其放在文件范围内。与您的问题无关,在返回
void
的函数末尾添加return ;
是非常可疑的,不会通过任何像样的安全相关代码审查,因为在安全相关应用程序中,心血来潮添加的没有任何理由的奇怪代码是不可接受的(而且很可能也违反了MISRA,我的头掉了下来)。