熟悉Keil的朋友应该都知道,在Keil中可以使用XBYTE关键字使用P0与P2组成一个标准的16位Intel总线收发器对外部设备(一般为扩展RAM,常见于8031系列单片机)进行读写操作。最近打算把代码移植到SDCC环境下开发的时候便遇到了SDCC中没有XBYTE关键字的问题,折腾一番后找到了如下的解决方案:
例如8255的PA端口地址为0x0001,在Keil中若要将其赋值0xAA的写法是
#define PORT_8255A_PA XBYTE[0x0001]
void main()
{
PORT_8255A_PA = 0xAA;
}
在SDCC中若想实现同样的效果,也仅需要如下几行代码:
volatile __xdata __at (0x0001) unsigned char PORTA_8255A_PA;
void main()
{
PORTA_8255A_PA = 0xAA;
}
如果想要兼容Keil的写法仅需在自己源文件开头添加如下宏定义:
#define XBYTE ((unsigned char volatile __xdata *) 0)
之后的写法就和Keil中一模一样啦!这段代码其实来源于Keil C51自带的absacc.h中~在HML_FwLib_8051库中,也有类似的代码,存放于mem.h,欢迎大家使用!
具体涉及的关键词作用可查询SDCC手册和C语言相关参考资料,如果觉得本文有帮助就按个赞吧~~