__eds__ WORD __ramspace[0x100] __attribute__((eds,address(0x8000ul),noload));
我想了解上面的语法(该程序适用于pic24和C),特别是__ramspace[0x100]
。有人能帮助我吗?
答案 0 :(得分:3)
有点晚了,但也许这可以帮助其他人:
__ eds __ 表示您要将后续内容放入扩展数据空间。如果要使用超出特定地址的数据空间,请执行此操作。您可以在数据表中找到扩展空间从MCU开始的地址。
WORD 表示您将保留整个单词(而不是例如字节)。对于pic24,这意味着16位块。
__ ramspace [0x100] 是一个256位大小的数组。当你看一下前面写的内容时,你可以看到你声明一个名为 __ ramspace 的数组,大小 256字(所以256x 16位值) 扩展数据空间( eds )。
现在你必须声明偏移,例如数组的起始地址(__ramspace [0] - 第一个数组元素 - 的物理地址)。这是 0x8000 的作用。
最后,如果数组应该在启动时初始化(例如用零填充),则指示编译器。在你的情况下有一个 noload ,这意味着在启动时随机数据将在数组内,直到你在其中编写自己的值。
希望这有帮助。
答案 1 :(得分:0)
__ramspace[0x100]
是该行的唯一部分,它只是纯C. :)它声明了一个0x100
(256,十进制)元素WORD
类型的数组。数组的名称是__ramspace
。
eds
的详细信息,请参阅@Brian Cain&#39} {/ 3}}。address(0x8000ul)
的{{1}}参数可能会使链接器将变量置于位置__attribute__()
。答案 2 :(得分:0)
__eds__
限定符在" MPLAB® C Compiler for PIC24 MCUs and dsPIC® DSCs User’s Guide"为:
在属性上下文中,eds用于扩展数据空间属性 向编译器表明可以分配变量 在数据存储器中的任具有此属性的变量很可能 还需要 eds 类型限定符(参见章节 6.“附加C指针类型”),以便编译器正确生成正确的访问序列。请注意 eds 限定符 和eds属性密切相关,但不完全相同。一些 在将变量分配到的时候,可能需要指定设备 某些内存空间,如空格(ymemory)或空格(dma) 内存可能只存在于扩展数据空间中。
__ramspace
不是特殊的指示符,它只是所选择的标识符。