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中的两个英文字符 根据错误提示,在函数形参指针前加flash 回复【1楼】l503iu
-----------------------------------------------------------------------
我加了__flash,还是不行,把uchar 改成uint也不行 LZ对硬件的指针不太了解! 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) 请教上官金虹!
__generic 还是第一知道,刚刚查了数据手册!
http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_576097.JPG
(原文件名:未命名.JPG) 看来我也要多多学习了! 我以前知道Z寄存器能指向RAM和ROM,但在C里不会用! 请教【4楼】 stm8s103
但不在RAM和ROM不在同一编址的话,会否有问题? 请教上官金虹!
编译器会默认自动出来吗?
http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_576098.JPG
(原文件名:未命名.JPG) __generic *是通用指针,既可以指向flash,又可以指向ram.
可以把 flash,ram 看成同一个逻辑地址空间,
__generic *指向这个统一的逻辑地址空间。 回复【4楼】stm8s103
-----------------------------------------------------------------------
改完后编译不提示错误,可是却不显示字符,把字库再改成uchar 又可以显示了 回复【10楼】stm8s103
-----------------------------------------------------------------------
谢谢!有时间再认真看看数据手册! 回复【11楼】zhangxiaozi
回复【4楼】stm8s103
-----------------------------------------------------------------------
改完后编译不提示错误,可是却不显示字符,把字库再改成uchar 又可以显示了
-----------------------------------------------------------------------
楼主你的子程序
lcdWrite(*ptr,cs); ptr++; page++;
lcdSetPage(page); lcdSetRow(row);
lcdWrite(*ptr,cs); ptr++;page--;row++;
子程序里面ptr也要改成__generic *才行。
而且子程序里面还有子程序使用ptr,也要改成__generic *才行。 留个瓜子,好好学习 正在搞这个····mark 为什么uchar编译不通过,而flash unsigned char *p反而通过呢,但是不显示数据
页:
[1]