我正在编写一些固件,需要在不使用数据部分的情况下使用C代码。假设一个人远离全局,这是非常简单的。或者我想。
我写了一些东西……
初始化列表必须存储在某个地方,您无法在空中分配它。通常初始化列表将在 .text / .rodata 。然后,编译器可以通过放置来优化初始化 feature_set 在 .data 而不是堆栈,以更快地初始化它。
.text
.rodata
feature_set
.data
无论如何,你可以这样做:
static const uint32_t FEATURE_SET [][2] = { {feature0, 1}, {feature1, 0}, {feature2, 0} };
现在阵列应该放在闪存中( .rodata 或类似的)或链接器设置中的某些内容搞砸了。
然后,如果您需要堆栈上可修改的运行时版本:
uint32_t feature_set [ sizeof(FEATURE_SET) / sizeof(*FEATURE_SET) ] [2]; memcpy(feature_set, FEATURE_SET, sizeof feature_set);
还要确保永远不要使用一些奇怪的RAM调试版本,但总是将程序下载到flash,无论是调试还是发布版本。