lsbzjk 发表于 2011-10-25 09:48:44

请马老师帮忙看一下这个GCCAVR ATMAGE128的拼音输入法程序 对FLASH区数组的应用有哪

#include <avr/io.h>
#include<avr/pgmspace.h>

#define uchar unsigned char
#define uintunsigned int

volatile uchar Word_count;




static const prog_uchar PYTABB_a    []=
{
    "啊阿呵吖锕嗄腌"                                    //    7
};

static const prog_uchar PYTABB_ai   []=
{
    "爱矮挨哎碍癌艾唉哀蔼隘埃皑捱嗳嫒瑷暧砹锿霭嗌"      //23
};

static const prog_uchar PYTABB_an   []=
{
    "按安暗岸俺案鞍氨胺厂广谙埯揞犴庵桉铵鹌黯"          //20
};

static const prog_uchar PYTABB_ang[]=
{
    "昂肮盎"                                          //   3
};

static const prog_uchar PYTABB_ao   []=
{
    "袄凹傲奥熬懊敖翱澳嚣坳嗷岙廒遨媪骜獒聱螯鏊鳌鏖拗"//   24
};

static const prog_uchar PYTABB_ba   []=
{
    "把八吧爸拔罢跋巴芭扒坝霸叭靶笆疤耙捌茇菝岜灞钯粑鲅魃"//26
};

static const prog_uchar PYTABB_bai[]=
{
    "百白摆败柏拜佰伯稗捭掰呗"                        //   12
};

static const prog_uchar PYTABB_ban[]=
{
    "半办班般拌搬版斑板伴扳扮瓣颁绊阪坂钣瘢癍舨"         //   21
};

static const prog_uchar PYTABB_bang []=
{
    "帮棒绑磅镑邦榜蚌傍梆膀谤蒡浜"                     //   14
};

static const prog_uchar PYTABB_bao[]=
{
    "包抱报饱保暴薄宝爆剥豹刨雹褒堡苞胞鲍炮瀑葆孢煲鸨褓趵龅"//27
};

static const prog_uchar PYTABB_bei   []=
{
    "被北倍杯背悲备碑卑贝辈钡焙狈惫臂孛邶蓓悖碚鹎褙鐾鞴陂呗"//27
};
   
static const prog_uchar PYTABB_ben   []=
{
    "本奔苯笨夯畚坌锛贲"                                  //9
};

static const prog_uchar PYTABB_beng[]=
{
    "蹦绷甭崩迸蚌泵嘣甏"                                  //9
};

static const prog_uchar PYTABB_bi    []=
{
    "比笔闭鼻碧必避逼毕臂彼鄙壁蓖币弊辟蔽毙庇敝陛毖痹秘泌匕俾芘荜荸萆薜哔狴庳愎滗濞弼妣婢嬖璧畀铋秕筚箅篦舭襞跸髀吡贲裨"//    57
};

static const prog_uchar PYTABB_bian[]=
{
    "边变便遍编辩扁贬鞭卞辨辫匾弁苄忭汴煸砭碥窆褊蝙笾鳊髟缏" // 27
};

static const prog_uchar PYTABB_biao[]=
{
    "表标彪膘婊杓飑飙飚镖镳瘭裱鳔骠"                     //15
};

static const prog_uchar PYTABB_bie[]=
{
    "别憋鳖瘪蹩"                                       //   5
};

static const prog_uchar PYTABB_bin[]=
{
    "宾濒摈彬斌滨傧豳缤殡膑镔髌鬓玢槟"                   //   16
};

static const prog_uchar PYTABB_bing[]=
{
    "并病兵冰丙饼屏秉柄炳禀邴摒槟"                     //   14
};

static const prog_uchar PYTABB_bo   []=
{
    "拨波播泊博伯驳玻剥薄勃菠钵搏脖帛般柏舶渤铂箔膊魄卜亳啵饽檗擘礴钹鹁簸跛踣蕃"//37
};

static const prog_uchar PYTABB_bu   []=
{
    "不步补布部捕卜簿哺堡埠怖埔卟逋瓿晡钚钸醭"         //   20
};
    ....................................


//------------------------------拼音输入法查询码表---------------------------
//数组最后三个数据表示查找表的偏移量和当前相同发音的个数

static const prog_uchar PY_index_a[]=
{
        {' ',' ',1,0x00,7},
        {'i',' ',2,0x00,23},
        {'n',' ',3,0x00,20},
        {'n','g',' ',4,0x00,3},
        {'o',' ',5,0x00,24},
};

static const prog_uchar PY_index_b[]=
{
        {'a',' ',6,0x00,26},
        {'a','i',' ',7,0x00,12},
        {'a','n',' ',8,0x00,21},
        {'a','n','g',' ',9,0x00,14},
        {'a','o',' ',10,0x00,27},
        {'e','i',' ',11,0x00,27},
        {'e','n',' ',12,0x00,9},
        {'e','n','g',' ',13,0x00,9},
        {'i',' ',14,0x00,57},
        {'i','a','n',' ',15,0x00,27},
        {'i','a','o',' ',16,0x00,15},
        {'i','e',' ',17,0x00,5},
        {'i','n',' ',18,0x00,16},
        {'i','n','g',' ',19,0x00,14},
        {'o',' ',20,0x00,37},
        {'u',' ',21,0x00,20}
};
...........................................................

static const prog_uchar PY_index_end[]=
{
    {' ',0,0}
};


//*================================================================================================

//"========================================变量声明========================================*/
/************中文起始地址****************************/
/***********存贮不同发音汉字数组的首地址*****************************/
uchar *PY_index[]=
{
        PYTABB_a,   PYTABB_ai,    PYTABB_an,    PYTABB_ang,   PYTABB_ao,    PYTABB_ba,
        PYTABB_bai,   PYTABB_ban,   PYTABB_bang,PYTABB_bao,   PYTABB_bei,   PYTABB_ben,
    PYTABB_beng,PYTABB_bi,    PYTABB_bian,PYTABB_biao,PYTABB_bie,   PYTABB_bin,
    PYTABB_bing,PYTABB_bo,    PYTABB_bu,

..................................................................................
};

//------------------------------存储查找表的地址---------------------------------------
unsigned char *(* PY_index_pointer)=
{
        PY_index_a,PY_index_b,
...................................
       PY_index_end
};


/*========================================函数声明========================================*/
//"拼音输入法杳询函数,input_py为已输入的拼音码,反回值为中文的起始地址,当为0时,杳询失败"
//unsigned char code * py_ime(unsigned char input_py_val[]);

/*========================================主程序体========================================*/

/*========================================主程序体========================================*/

unsigned char *py_ime(unsigned char *input_py_val)
{
unsigned char (*p1),(*p2),(*p3);
unsigned char i=1,j=37,count=0;
if (input_py_val==0) return(0); //"如果输入空字符返回0"
if (input_py_val=='i') return(PY_mb_error);
if (input_py_val=='u') return(PY_mb_error);
if (input_py_val=='v') return(PY_mb_error);
p1=p2=PY_index_pointer-0x61]; //"计算入口树根" 97
p3=p2;

while(j--)//匹配已输入拼音和查找表
{
   if ((pgm_read_byte(*(p1)+i-1)==input_py_val)&&(pgm_read_byte(*(p1)+i)==input_py_val))
   {
    p2=p1;
   
    if(p3!=p2){count=0;p3=p2;i=1;}
    count++;   
    i++;
   
   }
    else p1++;
}
    Word_count=pgm_read_byte(*(p2)+count+3)*2;//返回当前相同发音汉字的个数
    return (PY_index) ; //返回查询结果首地址"
      

}

编绎时,这个地方提示以下错误信息
//------------------------------存储查找表的地址---------------------------------------
unsigned char *(* PY_index_pointer)=
{
        PY_index_a,PY_index_b,
...................................
       PY_index_end
};

initiall.c:213: warning: initialization from incompatible pointer type
initiall.c:213: warning: initialization from incompatible pointer type
initiall.c:213: warning: initialization from incompatible pointer type
initiall.c:213: warning: initialization from incompatible pointer type
initiall.c:213: warning: initialization from incompatible pointer type
initiall.c:213: warning: initialization from incompatible pointer type
initiall.c:213: warning: initialization from incompatible pointer type
initiall.c:213: warning: initialization from incompatible pointer type
initiall.c:214: warning: initialization from incompatible pointer type

machao 发表于 2011-11-4 12:36:41

我们学习的标准C,都是在PC上,PC的程序和数据都在RAM中,所以指针本身的类型是相同的。

而现在的MCU结构不同,程序区和数据区在不同的存储空间,所以对于指针也需要说明是指向程序区的还是指向数据区的。

你的错误只是警告。如果程序能正确执行,那么只要修改一下PY_index_pointer的类型,说明是指向程序空间的。

每个C对于这方面的说明方式不同,因为这个都是扩展C的部分,应该查看你使用C平台的帮助说明。
页: [1]
查看完整版本: 请马老师帮忙看一下这个GCCAVR ATMAGE128的拼音输入法程序 对FLASH区数组的应用有哪