将结构放入闪存(微控制器)的最常用方法是什么?

时间:2016-05-19 10:53:49

标签: c linker embedded

我正在使用GCC for ARM V-4.8.3工具链进行嵌入式C项目。 我有一系列查找结构,只在整个程序的生命周期中读取。由于我的RAM耗尽(并且没有使用大量的Flash),最好将它们推入闪存,这不会影响程序的功能。问题是如何。

这样做的一种方法是使用GCC提供的variable __attribute__ ((section ("TEXT")))。在这种情况下,我的代码依赖于编译器。例如,如果我想使用Microchip编译器使用我的代码,我需要编辑代码以移植到新环境。

我想到的另一种方法是使用链接器脚本。该结构仅在代码中声明。

在我看来,第二种方法更具便携性。虽然仍然需要调整链接器脚本,但对我来说它更好。是否有更通用的方法可以使代码更容易进入将变量放入闪存的上下文中?

将它们限定为常量,意味着它们将被放入rodata部分。不要进入他们“属于”的文本部分。

2 个答案:

答案 0 :(得分:4)

如果闪存中的 并不重要,只需将结构声明为static const即可,并且100%可移植。

只有当您需要在特定地址分配内容时,才需要

__attribute__和其他非标准内容。

答案 1 :(得分:0)

您必须查看特定的编译器/链接器以确定如何将其放入闪存中 有时候const会工作,但有时它会将其放入RAM中 static const是便携式的,但无法保证放入闪存。

那是因为Ansi-C对闪存或RAM一无所知。

甚至还有系统,你必须使用编译指示放入闪存。

#pragma define_section myFlash_table ".calibTable.text" RW
#pragma section myFlash_table begin
...
#pragma section myFlash_table end

便携式版本应该使用consts,但你必须记住它不是防弹。