搜索
bottom↓
回复: 14

求助ICC中const数组引用错误问题

[复制链接]

出0入57汤圆

发表于 2009-4-2 11:38:05 | 显示全部楼层 |阅读模式
我在MAIN函数开始之前定义了一个数组:const unsigned char step1[]={" 1Hz"};
然后在1602显示函数中调用这个数组显示。结果编译时提示错误。
!E E:\XXXXX(152): type error in argument 3 to `dispchar'; found `pointer to const unsigned char' expected `pointer to unsigned char'

我的dispchar函数是这样的:
void dispchar(uchar map,uchar leng,uchar *word)//写一行字
{
uchar i=0,le=0;
for(i=0;i<=leng;i++)
{
LCD_wcmd(map);
map++;
LCD_wdat(word[le]);
le++;
}
LCD_wcmd(0x0c);
}

如果我把那个const去掉,就可以编译通过,能正常运行。但这样操作,数组就会存放在主程序里面。
请问要怎样解决这个问题?

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2009-4-2 11:41:38 | 显示全部楼层
void dispchar(uchar map,uchar leng,const uchar *word)//写一行字

出0入57汤圆

 楼主| 发表于 2009-4-2 11:46:27 | 显示全部楼层
这样修改之后,编译还是错误
type error in argument 3 to `dispchar'; found `pointer to const unsigned char' expected `pointer to unsigned char'

出0入0汤圆

发表于 2009-4-2 12:37:21 | 显示全部楼层
你真的改了吗?

你把出错行代码发出来,你给的错误信息没给哪行错了...

出0入0汤圆

发表于 2009-4-2 12:38:02 | 显示全部楼层
那个出错是第152行的代码贴出来....

出0入0汤圆

发表于 2009-4-2 12:38:02 | 显示全部楼层
那个出错是第152行的代码贴出来....

出0入57汤圆

 楼主| 发表于 2009-4-2 12:54:34 | 显示全部楼层
dispchar(0xc1,3,step1);
这个就是152行的东西。
其中,step1就是
const unsigned char step1[]={" 1Hz"};

其中dispchar就是楼主那个函数。

出0入0汤圆

发表于 2009-4-2 13:05:44 | 显示全部楼层
读写RAM和CODE中的是不一样的.
/***********************************************************
* 函数名称:puts()
* 功    能:发送RAM中的字符串
* 入口参数:待发送的字符串指针
* 出口参数:无
* 注    意: 调用putchar()
***********************************************************/
void puts(unsigned char *s)
{   while(*s)
   { putchar(*s);
         s++;
   }
}
/***********************************************************
* 函数名称:putscode()  
* 功    能:发送CODE中的字符串
* 入口参数:待发送的字符串指针
* 出口参数:无
* 注    意: 调用putchar()
***********************************************************/
void putscode(const char *s)
{   while(*s)
   { putchar(*s);
         s++;
   }
}

出0入57汤圆

 楼主| 发表于 2009-4-2 13:56:26 | 显示全部楼层
原来如此!按照上面方法改了之后就完全正常了。原来在使用指针时不能定义成无符号的。

出0入0汤圆

发表于 2009-4-2 15:31:30 | 显示全部楼层
原来在使用指针时不能定义成无符号的。  ??
   

记号

出0入0汤圆

发表于 2009-4-2 15:51:36 | 显示全部楼层
你又错了,谁说指针不能定义成无符号的?
你还没有高清你错误的原因:如果你的数组(指针)定义在SRAM里,那么你调用函数时里面的参数要与之对应也应该是SRAM里
同样如果你的数组(指针)定义在FLASH里,那么你调用函数时里面的参数要与之对应也应该是FLASH里

出0入0汤圆

发表于 2009-4-3 10:31:11 | 显示全部楼层
sunyouyuan
那你说清楚软件如何实现呢?说清楚些哦

出0入0汤圆

发表于 2009-4-4 23:30:00 | 显示全部楼层
void dispchar(uchar map,uchar leng,const uchar *word)//写一行字

dispchar(0xc1,3,&step1);

出0入0汤圆

发表于 2012-5-23 07:31:28 | 显示全部楼层
我也遇到了同样的问题,可是照上述方法还是变异错误。

出0入0汤圆

发表于 2013-9-2 10:40:14 | 显示全部楼层
今天遇到同样的问题,字模数据太大,编译出现area 'data' not large enough 的错误码,
首先数组定义为 const char
然后函数说明引用数组也定义为const char : void dispchar(uchar map,uchar leng,const uchar *word)//写一行字
当然函数声明时引用数据也要改为const char;
问题解决,非常感谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-23 19:30

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

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