This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
你(们)好。
从编译器的角度来看、我发现使用"volatile"关键字访问 SDRAM、即"far"部分的要求不是必需的。
如文档中所示、要访问 SDRAM、请执行以下操作:
但是、
SPRU514H 的更新应该足以将"volatile"与"far"属性解除关联。
易失性关键字在 C 语言中有其自身的含义、因此向其添加任何特定于处理器的用法并不是一个好主意。
请随时向我提供有关 C2000编译器对此问题所做更改的最新信息。
谢谢!
年轻
这种情况在应用手册 《使用 C/C++访问 TMS320F2837x/2807x 微控制器上的外部 SDRAM》中进行了讨论。
谢谢、此致、
乔治
需要使用 volatile 关键字来阻止编译器使用通过程序总线访问数据的指令。 示例指令为 PREAD 和 PWRITE。 6.4之前、编译器已经避免了针对易失性类型的这些指令、因为这些指令无法从存储器映射的外设寄存器中读取。
George 指向您的应用手册中提到了这一点。
您好、Cody、
自 SPRU514H 以来、指针类型的大小已更改为32位。 我看不到编译器为什么仍然使用22位程序总线来访问32位指针指向的内存。
唯一的例外是直接使用符号访问存储器、因为出于性能原因、它仍然被假定为22位;但是、符号上的__attribute__((far))应该足够显式、以确保编译器不使用22位地址来使用此类符号访问此特定存储器。
或者、我是否对编译器行为有一些误解?
> far 属性适用于符号、而不是类型
完全正确。 若要直接访问 far 符号、编译器知道使用32位地址。
>这意味着、一旦您获取符号的地址并将其存储在指针中、就无法知道它是否指向 far 地址。
如果指针指向 far 地址或近地址无关紧要、只要编译器跟踪更新、这是因为 SPRU514H:" C28x 上指针类型的大小现在为32位而不是22位"。 为什么编译器使用22位程序总线来访问32位指针指向的存储器?
据我了解、我引用的 SPRU514H 中的更新的整个目的是采用统一的存储器访问方案、唯一的例外是出于性能原因进行符号访问、该访问通过__attribute__((far))正确寻址。