zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?请根据自己的理解简明扼要的回答
    当下大部分互联网创业公司为什么都愿意采用增量模型来做开发?
    0
    计算机网络
    java基础
    java 多线程编程
    java类与对象,用程序解释
    修饰符的探讨
    java学习总结02
    java day1
  • 原文地址:https://www.cnblogs.com/IdeaMing/p/14711235.html
Copyright © 2011-2022 走看看