搜索
bottom↓
回复: 1

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

[复制链接]

出0入0汤圆

发表于 2011-10-25 09:48:44 | 显示全部楼层 |阅读模式
#include <avr/io.h>
#include<avr/pgmspace.h>

#define uchar unsigned char
#define uint  unsigned 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[][8]=
{
        {' ',' ',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[][8]=
{
        {'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[][8]=
{
    {' ',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[27])[8]=
{
        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)[8],(*p2)[8],(*p3)[8];
unsigned char i=1,j=37,count=0;
if (input_py_val[0]==0) return(0); //"如果输入空字符返回0"
if (input_py_val[0]=='i') return(PY_mb_error);
if (input_py_val[0]=='u') return(PY_mb_error);
if (input_py_val[0]=='v') return(PY_mb_error);
p1=p2=PY_index_pointer[input_py_val[0]-0x61]; //"计算入口树根" 97
p3=p2;

while(j--)//匹配已输入拼音和查找表
{
   if ((pgm_read_byte(*(p1)+i-1)==input_py_val)&&(pgm_read_byte(*(p1)+i)==input_py_val[i+1]))
   {
    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[pgm_read_byte(*(p2)+count+1)-1+pgm_read_byte(*(p2)+count+2)*255]) ; //返回查询结果首地址"
      

}

编绎时,这个地方提示以下错误信息
//------------------------------存储查找表的地址---------------------------------------
unsigned char *(* PY_index_pointer[27])[8]=
{
        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

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2011-11-4 12:36:41 | 显示全部楼层
我们学习的标准C,都是在PC上,PC的程序和数据都在RAM中,所以指针本身的类型是相同的。

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

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

每个C对于这方面的说明方式不同,因为这个都是扩展C的部分,应该查看你使用C平台的帮助说明。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 13:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表