搜索
bottom↓
回复: 16

unsigned char 类型可以,而flash unsigned char 怎么就不可以呢?

[复制链接]

出0入0汤圆

发表于 2010-8-19 09:11:32 | 显示全部楼层 |阅读模式
我做了个LCD12864的显示程序,字库定义为unsigned char是编译通过,显示正常,可定义为__flash unsigned char时,编译通不过,提示为“
Error[Pe167]: argument of type "unsigned char __flash *" is incompatible with parameter of type "unsigned char *",编译器为iar for avr5.11b
例如__flash unsigned char ziku[]={xxxxxxxxxxxxxxxx}; 就通不过
而 unsigned char ziku[]={xxxxxxxxxxxxx};就显示正常;
部分函数如下:
//字符显示函数:page 页,row 列,ptr 显示数据指针,numb 显示字符数量,cs片选,e_c中文或英文
void putchar(uchar page,uchar row, uchar *ptr, uchar numb,uchar cs,uchar e_c)
{
uchar i,j,cnt;

for (i=0;i<numb;i++)
{
   if (e_c==1)
     cnt=8;
   else
     cnt=16;
   for (j=0;j<cnt;j++)
   {
      if (cs==2)
       {
        if (row>127)
        {cs=1; row=row-128; page+=2;}
       }
      if (cs==1)
      {
        if (row>127)
        {cs=2; row=row-128;}
      }
   lcdSetPage(page); lcdSetRow(row);
   lcdWrite(*ptr,cs); ptr++; page++;
   lcdSetPage(page); lcdSetRow(row);
   lcdWrite(*ptr,cs); ptr++;page--;row++;
   }
}
}

调用函数:如 putchar(0,0,&ziku[0],2,1,1) 在0页0行显示ziku中的两个英文字符

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

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2010-8-19 10:07:01 | 显示全部楼层
根据错误提示,在函数形参指针前加flash

出0入0汤圆

 楼主| 发表于 2010-8-19 10:18:13 | 显示全部楼层
回复【1楼】l503iu
-----------------------------------------------------------------------

我加了__flash,还是不行,把uchar 改成uint也不行

出0入0汤圆

发表于 2010-8-19 10:21:32 | 显示全部楼层
LZ对硬件的指针不太了解!

出0入0汤圆

发表于 2010-8-19 10:24:22 | 显示全部楼层
void putchar(uchar page,uchar row, uchar *ptr, uchar numb,uchar cs,uchar e_c)

改成:

void putchar(uchar page,uchar row, const uchar __generic * ptr, uchar numb,uchar cs,uchar e_c)

出0入0汤圆

发表于 2010-8-19 10:33:22 | 显示全部楼层
请教上官金虹!

__generic 还是第一知道,刚刚查了数据手册!

(原文件名:未命名.JPG)

出0入0汤圆

发表于 2010-8-19 10:33:51 | 显示全部楼层
看来我也要多多学习了!

出0入0汤圆

发表于 2010-8-19 10:35:19 | 显示全部楼层
我以前知道Z寄存器能指向RAM和ROM,但在C里不会用!

出0入0汤圆

发表于 2010-8-19 10:38:40 | 显示全部楼层
请教【4楼】 stm8s103


但不在RAM和ROM不在同一编址的话,会否有问题?

出0入0汤圆

发表于 2010-8-19 10:44:12 | 显示全部楼层
请教上官金虹!

编译器会默认自动出来吗?

(原文件名:未命名.JPG)

出0入0汤圆

发表于 2010-8-19 10:52:08 | 显示全部楼层
__generic *是通用指针,既可以指向flash,又可以指向ram.

可以把 flash,ram 看成同一个逻辑地址空间,
__generic *指向这个统一的逻辑地址空间。

出0入0汤圆

 楼主| 发表于 2010-8-19 10:55:06 | 显示全部楼层
回复【4楼】stm8s103
-----------------------------------------------------------------------
改完后编译不提示错误,可是却不显示字符,把字库再改成uchar 又可以显示了

出0入0汤圆

发表于 2010-8-19 10:56:05 | 显示全部楼层
回复【10楼】stm8s103
-----------------------------------------------------------------------

谢谢!有时间再认真看看数据手册!

出0入0汤圆

发表于 2010-8-19 10:59:33 | 显示全部楼层
回复【11楼】zhangxiaozi
回复【4楼】stm8s103  
-----------------------------------------------------------------------
改完后编译不提示错误,可是却不显示字符,把字库再改成uchar 又可以显示了
-----------------------------------------------------------------------

楼主你的子程序


   lcdWrite(*ptr,cs); ptr++; page++;
   lcdSetPage(page); lcdSetRow(row);
   lcdWrite(*ptr,cs); ptr++;page--;row++;

子程序里面ptr也要改成__generic *才行。
而且子程序里面还有子程序使用ptr,也要改成__generic *才行。

出0入0汤圆

发表于 2010-8-19 12:27:00 | 显示全部楼层
留个瓜子,好好学习

出0入0汤圆

发表于 2011-8-24 10:10:00 | 显示全部楼层
正在搞这个····mark

出0入0汤圆

发表于 2012-11-6 10:18:05 | 显示全部楼层
为什么uchar编译不通过,而flash unsigned char *p反而通过呢,但是不显示数据
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-3 21:27

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

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