1
__eds__ WORD __ramspace[0x100] __attribute__((eds,address(0x8000ul),noload)); 

我特别想了解上面的语法(该程序适用于 pic24 和 C 语言)__ramspace[0x100]。有谁能够帮我?

4

3 回答 3

4

有点晚了,但也许这可以帮助其他人:

__eds__表示您想将后面的任何内容放入扩展数据空间。当您想使用超出某个地址的数据空间时,您可以这样做。您可以在数据表中找到您的 MCU 的扩展空间从哪个地址开始。

WORD意味着您将保留整个单词(而不是例如字节)。对于 pic24,这意味着 16 位块。

__ramspace[0x100]是一个大小为 256 的一维数组。当您查看前面写的内容时,您可以看到您在扩展数据空间( eds ) 中声明了一个名为__ramspace的数组,大小为256 个字(即 256x 16 位值)。

现在您必须声明偏移量,例如数组的起始地址(__ramspace[0] - 第一个数组元素所在的物理地址)。这就是0x8000的作用。

最后,您指示编译器是否应在启动时初始化数组(例如用零填充)。在您的情况下,有一个noload,这意味着随机数据将在启动时位于数组中,直到您在其中写入自己的值。

希望这可以帮助。

于 2015-01-01T19:58:02.010 回答
0

__eds__限定符在“ MPLAB® C Compiler for PIC24 MCUs and dsPIC® DSCs User's Guide ”中描述为:

在属性上下文中,eds,对于扩展数据空间,属性向编译器指示该变量可以分配到数据存储器中的任何位置。具有此属性的变量可能还需要eds类型限定符(参见第 6 章“其他 C 指针类型”),以便编译器正确生成正确的访问序列。请注意,eds限定符和 eds 属性密切相关,但并不完全相同。在某些设备上,在将变量分配到某些内存空间(例如 space(ymemory) 或 space(dma))时,可能需要指定 eds,因为该内存可能只存在于扩展数据空间中。

__ramspace不是一个特殊的指示符,它只是被选择的标识符。

于 2014-10-28T13:18:24.223 回答
0

__ramspace[0x100]是该行中唯一纯 C 的部分。:) 它声明了一个0x100类型为 (256,十进制)元素的数组WORD。数组的名称是__ramspace

  • 有关详细信息,请参阅@Brian Cain答案eds
  • address(0x8000ul)参数__attribute__()可能使链接器将有问题的变量放在 location 0x8000
于 2014-10-28T13:15:33.050 回答