【问题标题】:What is the equivalent of Keil _at_ in gccgcc中的Keil_at_相当于什么
【发布时间】:2020-04-26 17:32:15
【问题描述】:

gcc 是否有任何关键字与Keil 中的_at_ 完全等效?

struct Location
{
  uint_32 x;
  uint_32 y;
  uint_32 z;
  char protocol[10];
};

struct link idata list _at_ 0x40;     /* list at idata 0x40 */

注意:我根本不想定义指针。我想要一个完全相同的变量。

注意:这里的idata可以忽略。

【问题讨论】:

  • 你使用哪个目标平台?
  • 什么是linkLocation 和其余的有什么关系?
  • @Acorn,这是一个假设的例子。实际上,该结构保存要发送到包括加密缓冲区的服务器主机的信息。该数据应该由嵌入式操作系统读取,然后分派。这就是为什么应用程序有这样的义务。

标签: c gcc keil


【解决方案1】:

不,它没有。这个 Keil 支持 page 也表明在 gcc 中没有直接等效于 CARM 的 __at__ 和 armcc 的 __attribute__(at)

GNU GCC Compiler
Use only pointer definitions to access absolute memory locations. For example:

/* General Purpose Input/Output (GPIO) */
#define IOPIN0         (*((volatile unsigned long *) 0xE0028000))
.
.
.
IOPIN0 = 0x4;

作为替代方案,您还可以使用ld 脚本定义自己的部分。

【讨论】:

  • 那你怎么保证你的变量不会和别的变量发生冲突呢?忘记 Windows 和 Linux。如果您有一个嵌入式系统操作系统,它读取应用程序中的某些地址位置进行通信,那么您的应用程序不能有一个干净的设计,但它应该遵循操作系统规则。然而,我需要在指定的地址中定义我的结构。
  • 请忘记我原来的struct 示例。这是一个没有太多评价的复制/粘贴。我已将其更新为更好的。
  • 我猜只有当你的变量所在的内存部分被编译器使用(例如.data中的某个地方)时,这种冲突才可能发生。但是你可以保证编译器不会通过在链接器中编写脚本来干扰它,也许为此使用一个专门的部分。
  • 非常感谢。请您更详细地解释一下如何做到这一点?
  • 您可能需要适合您的电路板的类似内容:electronics.stackexchange.com/questions/438488/…
猜你喜欢
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
  • 1970-01-01
相关资源
最近更新 更多