C加载常量

C加载常量,c,constants,C,Constants,常量数组被加载到闪存中,否则它们就在RAM中。 除了手动输入数千个数字外,如何加载大型常量数组? 我正在使用带STM32F303(Cortex M4)的IAR编译器您始终可以编写一个应用程序,该应用程序将根据需要生成数组,然后将其包含在源文件中。您始终可以编写一个应用程序,该应用程序将根据需要生成数组,然后将其包含在源文件中。数字是多少?通常,您可以使用离线工具生成C代码,该代码将数字保存在适当类型的const数组中。这通常用于嵌入式软件中的查找表等 您不能在运行时执行此操作,因为将程序段排列到

常量数组被加载到闪存中,否则它们就在RAM中。 除了手动输入数千个数字外,如何加载大型常量数组?
我正在使用带STM32F303(Cortex M4)的IAR编译器

您始终可以编写一个应用程序,该应用程序将根据需要生成数组,然后将其包含在源文件中。

您始终可以编写一个应用程序,该应用程序将根据需要生成数组,然后将其包含在源文件中。

数字是多少?通常,您可以使用离线工具生成C代码,该代码将数字保存在适当类型的
const
数组中。这通常用于嵌入式软件中的查找表等

您不能在运行时执行此操作,因为将程序段排列到各种可用内存块中是链接器的工作


此外,闪存通常不“容易”写入,也就是说,您通常不能期望能够将一个常规的C指针写入闪存,然后将其写入并“粘住”。编程flash通常需要和闪存控制器一起跳舞,并记住诸如块擦除、擦除时间、最小编程页大小、每页编程时间等等。闪存与其说是RAM,不如说是ROM,如果你知道如何在软件中重新编程的话。

数字是多少?通常,您可以使用离线工具生成C代码,该代码将数字保存在适当类型的
const
数组中。这通常用于嵌入式软件中的查找表等

您不能在运行时执行此操作,因为将程序段排列到各种可用内存块中是链接器的工作


此外,闪存通常不“容易”写入,也就是说,您通常不能期望能够将一个常规的C指针写入闪存,然后将其写入并“粘住”。编程flash通常需要和闪存控制器一起跳舞,并记住诸如块擦除、擦除时间、最小编程页大小、每页编程时间等等。闪存与其说是RAM,不如说是ROM,如果你知道如何在软件中重新编程。

你可以自动将数字转换为C代码,例如,通过编写一个小脚本,或者如果你有一个二进制数据文件,通过使用类似的东西,你可以自动将数字转换为C代码,例如,通过编写一个小脚本,或者如果您有一个二进制数据文件,通过使用类似的方法,我会这样做,如果没有其他解决方案,可能会这样做。我想要的,AFAIK是不可能的,是从本地算法创建表,然后以某种方式声明它为常量。或者,找到一种方法告诉编译器(IAR)将其放入flash中。@DirkBruere其他方法是编写一个链接器脚本,在该脚本中,您可以告诉链接器将代码的某些部分/符号放在何处,或者如果支持的话,使用编译器特定的注释-您必须仔细阅读IAR手册。这就是我要做的,如果没有其他解决方案,可能也可以。我想要的,AFAIK是不可能的,是从本地算法创建表,然后以某种方式声明它为常量。或者,找到一种方法告诉编译器(IAR)将其放在flash中。@DirkBruere其他方法是编写一个链接器脚本,在该脚本中,您可以告诉链接器将代码的某些部分/符号放在何处,或者使用编译器特定的注释(如果支持的话)——您必须仔细阅读IAR手册。