Keil C51 一个警告 '=': pointer: different mspace
STC8G单片机一些特殊的功能,比如特殊的48路PWM的配置寄存器位置在xdata区域
官方操作的时候是这样的
uint16_t code PWMxHLD[48] = { 0xff15, /* PWM00HLD */ 0xff1d, /* PWM01HLD */ 0xff25, /* PWM02HLD */ //......... 0xfce5, /* PWM56HLD */ 0xfced, /* PWM57HLD */ }; unsigned char PWMLevelSet(unsigned char Mode) { unsigned char xdata *pPWMxHLD;//这里定义了一个xdata区域指针 EXSFR(); pPWMxHLD = (unsigned char *)PWMxHLD[2];//PWM2 0xff25 *pPWMxHLD = Mode; EXRAM(); return 0; }
这样操作不会有警告
如果改成下面的方式
unsigned char PWMLevelSet(unsigned char Mode)
{
unsigned char xdata *pPWMxHLD;
EXSFR();
pPWMxHLD = (unsigned char *)0xff25;//PWM2 0xff25
*pPWMxHLD = Mode;
EXRAM();
return 0;
}
则会有警告 warning C259: '=': pointer: different mspace
做如下修改即可
pPWMxHLD = (unsigned char xdata *)0xff25;
原因如下:
在UV2中,下述程序段能编译通过:
unsigned char xdata *str;
str="ABCDEF";
但在UV3中编译会出现如下错误:
waring C259: '=': pointer:different mspace
必须将其改为:
str=(unsigned char xdata*)"ABCDEF";
这说明UV3中变量赋值时,对其“存储类型”约束更严格,与C++类似。
————————————————
版权声明:本文为CSDN博主「emesjx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/emesjx/article/details/5995183