C 如何在RAM上定义常量变量?

C 如何在RAM上定义常量变量?,c,embedded,microcontroller,powerpc,C,Embedded,Microcontroller,Powerpc,我使用的是MPC5644A飞思卡尔EVB板 我需要找到一种在ram中定义常量变量的方法。所以在LCF文件中,我将这些变量指向mpc5644的RAM位置。但在运行时,我按照预期使用IVOR1 有一条主要规则。我无法更改常量变量的类型或名称。但是我需要在RAM中使用这些变量,比如校准RAM 任何帮助都是很好的 我的C源代码如下所示: 我的LCF文件: 当我尝试下线时,它被解决了。我可以在RAM上定义常量变量 #pragma explicit_zero_data on #pragma push #p

我使用的是MPC5644A飞思卡尔EVB板

我需要找到一种在ram中定义常量变量的方法。所以在LCF文件中,我将这些变量指向mpc5644的RAM位置。但在运行时,我按照预期使用IVOR1

有一条主要规则。我无法更改常量变量的类型或名称。但是我需要在RAM中使用这些变量,比如校准RAM

任何帮助都是很好的

我的C源代码如下所示:

我的LCF文件:


当我尝试下线时,它被解决了。我可以在RAM上定义常量变量

#pragma explicit_zero_data on
#pragma push
#pragma section sconst_type const_type   ".__cal_DataArea" ".__cal_DataArea"
...
..

谢谢大家。

我不太明白你们的问题。你想在公羊里加个常数吗?把它编译成英文。你想把它放在特定的位置?你似乎已经完成了,或者正在路上。链接器描述符文件是非常特定于工具链的,所以我无法判断您使用的任何未命名工具集是否正确。如果你想要一些不同的东西,请解释你想要完成什么。你正在使用Codewarrior编译器,对吗?事实上,这个问题在基于flash的微控制器上没有任何意义。如果你想要一个常数,把它放在闪光灯下。如果您想要一个非常量,但它在RAM中,句号。无论如何,我不是链接器脚本向导,但请尝试以下操作:pragma section sconst_type.\uuu cal_DataArea.\uu cal_DataArea.\uu declspecsection.calibration\u RAM。据我所知,LCF文件看起来还可以。位置由链接器决定,而不是由编译器决定,因此源代码中的链接器指令不是标准语言语法的一部分,而是特定于工具链的。因此,您需要指定在问题和标签中使用的工具链,以便进行猜测。关键的是,如果编译器无法识别您使用的pragma指令,它们将被忽略,可能没有任何警告。@Lundin:在诸如armcortex-M3/4这样速度更快的MCU上,Flash通常会添加大量等待状态。如果您同时预取指令,情况会更糟。因此,对于速度关键型代码,这可能真的会成为一个问题。
MEMORY
{

calibration_ram :      org = 0x40040000,   len = 0x00010000

...


SECTIONS
{

    .__bam_bootarea LOAD (ADDR(resetvector)): {} > resetvector
    .__cal_DataArea LOAD (ADDR(calibration_ram)): {} > calibration_ram

...
#pragma explicit_zero_data on
#pragma push
#pragma section sconst_type const_type   ".__cal_DataArea" ".__cal_DataArea"
...
..