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
