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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM