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

浙公网安备 33010602011771号