shaojianqiang 发表于 2013-4-22 19:52:13

数组和指针的疑问

       const unsigned char__code u0801_PowerOn_B[] = {
        0x82,0x01,0x40,0x40,0x44,0x90,0xC8,0x44,
        0x70,0x01,0x40,0x42,0xF0,0x00,0x44,0x10,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
        0x40,0x00,0x33,0x33,0x29,0x54,0x10,0x01,
};
void Play(unsigned char DataType)
{
        const uchar __code*pu08Data = NULL;
        switch (DataType)
        {       
       case 0:
        pu08Data =u0801_PowerOn_B;
                  break;
               default:
        break;
        }
               YDD_Open((unsigned char *)pu08Data, s16Size);//疑问?这里强制转换是否正确
}

S16        YDD_Open( const unsigned char*        pu08Data,S16 s16Size)
{
xdata=pu08Data;//
//xdata为LCD显示变量,显示的值不是0X82,疑问?应该怎样实现这条指令 xdata=pu08Data;使xdata=0x82;
}

chencc8 发表于 2013-4-22 22:29:44

LZ用的是神马编译器,__code是代码保存到ROM的意思么,
那么cconst uchar __code*pu08Data = NULL;
定义成const uchar*pu08Data = NULL;//就行了吧,还是说只有加了__code,这个指针才能指向ROM中(比如STM8就有长指针和短指针之分)?

pu08Data =u0801_PowerOn_B;//这句加强制类型转换,不然说不定会有警告
YDD_Open((unsigned char *)pu08Data, s16Size);//不需要加吧
xdata=pu08Data;//xdata是unsigned char型的全局变量么。另外这句后面需要有用到xdata的语句,比如i = xdata之类的,编译器才会真正的赋值。
要不然就是,和STM8类似的,本来要用长指针的,你整成了短指针,当然是乱指了
页: [1]
查看完整版本: 数组和指针的疑问