我们在嵌入式c或嵌入式c ++中有'@'运算符吗?如果是,请解释下面的代码?

Ele*_*ger 4 c embedded pic hi-tech-c

码:

static volatile unsigned char   TMR0    @ 0x01;

static volatile unsigned char   PORTA   @ 0x05;

static volatile unsigned char   PORTB   @ 0x06;

static volatile unsigned char   PORTC   @ 0x07;
Run Code Online (Sandbox Code Playgroud)

此代码来自PIC16F877A的HT-PICC编译器pic.h库文件

我理解静态volatile和其他关键字的含义.这里Timer0的寄存器地址是0x01,但为什么它们@在它前面使用呢?它与指针有关吗?

use*_*733 6

它是许多嵌入式编译器中常见的编译器扩展,允许您将变量放在绝对存储器地址中.

来自HI-TECH C编译器手册:

3.5.4绝对变量

大多数变量可以通过遵循构造@ 地址的声明来定位在绝对地址,其中address是存储器中要定位变量的位置.这种变量称为绝对变量.

3.5.4.1数据存储器中的绝对变量

绝对变量主要用于将C标识符的地址与特殊功能寄存器等同,但可用于将普通变量放在数据存储器的绝对地址中.

在你的例子中:

static volatile unsigned char   TMR0    @ 0x01;
Run Code Online (Sandbox Code Playgroud)

TMR0 可能是8位无符号硬件寄存器,存在于地址0x01.