zhangxiaozi 发表于 2010-8-19 09:11:32

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

我做了个LCD12864的显示程序,字库定义为unsigned char是编译通过,显示正常,可定义为__flash unsigned char时,编译通不过,提示为“
Error: 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,2,1,1) 在0页0行显示ziku中的两个英文字符

l503iu 发表于 2010-8-19 10:07:01

根据错误提示,在函数形参指针前加flash

zhangxiaozi 发表于 2010-8-19 10:18:13

回复【1楼】l503iu
-----------------------------------------------------------------------

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

tclandmei 发表于 2010-8-19 10:21:32

LZ对硬件的指针不太了解!

stm8s103 发表于 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)

tclandmei 发表于 2010-8-19 10:33:22

请教上官金虹!

__generic 还是第一知道,刚刚查了数据手册!
http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_576097.JPG
(原文件名:未命名.JPG)

tclandmei 发表于 2010-8-19 10:33:51

看来我也要多多学习了!

tclandmei 发表于 2010-8-19 10:35:19

我以前知道Z寄存器能指向RAM和ROM,但在C里不会用!

tclandmei 发表于 2010-8-19 10:38:40

请教【4楼】 stm8s103


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

tclandmei 发表于 2010-8-19 10:44:12

请教上官金虹!

编译器会默认自动出来吗?
http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_576098.JPG
(原文件名:未命名.JPG)

stm8s103 发表于 2010-8-19 10:52:08

__generic *是通用指针,既可以指向flash,又可以指向ram.

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

zhangxiaozi 发表于 2010-8-19 10:55:06

回复【4楼】stm8s103
-----------------------------------------------------------------------
改完后编译不提示错误,可是却不显示字符,把字库再改成uchar 又可以显示了

tclandmei 发表于 2010-8-19 10:56:05

回复【10楼】stm8s103
-----------------------------------------------------------------------

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

stm8s103 发表于 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 *才行。

tingfenghu 发表于 2010-8-19 12:27:00

留个瓜子,好好学习

bzhou830 发表于 2011-8-24 10:10:00

正在搞这个····mark

曾经沧海难为酒 发表于 2012-11-6 10:18:05

为什么uchar编译不通过,而flash unsigned char *p反而通过呢,但是不显示数据
页: [1]
查看完整版本: unsigned char 类型可以,而flash unsigned char 怎么就不可以呢?