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

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

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

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

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

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

如果它们在闪存中的位置无关紧要那么简单地将结构声明为static const应该足够且100%可移植。

只有在需要在特定地址分配内容时才需要__attribute__和其他非标准内容。

您必须查看特定的编译器/链接器以确定如何将其放入闪存中。
有时const会工作,有时它会把它放到RAM中。
static const是可移植的,但不能保证放入flash。

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

甚至有系统,你必须使用pragma放入闪存。

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

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