__eds__ WORD __ramspace[0x100] __attribute__((eds,address(0x8000ul),noload)); 我想了解上面的语法(程序是针对pic24和C语言的),特别是__ramspace[0x100]。有人能帮我吗?
发布于 2015-01-01 19:58:02
现在有点晚了,但也许这能帮到别人:
__eds__意味着您希望在扩展的数据空间中放置任何后续内容。当您想要使用某个地址以外的数据空间时,您可以这样做。您可以在数据表中找到您的MCU从哪个地址开始扩展空间。
WORD意味着您将保留整个单词(而不是字节)。对于一个pic24,这意味着16位块。
__ramspace0x100是一个大小为256个的一维数组。当您查看前面所写的内容时,可以看到您正在声明一个名为__ramspace的数组,在extended (eds)中,它的大小为256个字(所以256x16位值)。
现在您必须声明偏移量,例如数组的开始地址( __ramspace的物理地址--第一个数组元素)。这就是0x8000所做的。
最后,如果应该在启动时初始化数组(例如,填充了零),则指示编译器。在您的示例中,有一个noload,这意味着在启动时,数组中将有随机数据,直到您在其中写入自己的值为止。
希望这能有所帮助。
发布于 2014-10-28 13:15:33
__ramspace[0x100]是该行中唯一的一部分,它只是纯C :),它声明了0x100 (以十进制计算)类型的WORD元素的数组。数组的名称是__ramspace。
eds的回答。address(0x8000ul)对__attribute__()的参数可能会使链接器在location 0x8000上对变量提出疑问。发布于 2014-10-28 13:18:24
__eds__限定符在"用于PIC24 MCU和dsPIC DSC用户指南的MPLAB C编译器“中描述为:
在属性上下文中,eds,对于扩展的数据空间,属性向com- piler表示,变量可以分配到数据内存中的任何位置。带有此属性的变量可能还需要eds类型限定符(参见第6章)。(“额外的C指针类型”),以便编译器正确地生成正确的访问序列。请注意, eds 限定符与eds属性密切相关,但不完全相同。在某些设备上,当将变量分配到某些存储器空间(如空间(Ymemory)或空间(Dma))时,可能需要指定ed,因为该存储器可能只存在于扩展的数据空间中。
__ramspace不是一个特殊的标识符,它只是被选择的标识符。
https://stackoverflow.com/questions/26593471
复制相似问题