搜索
bottom↓
回复: 10

C语言基础问题,求指点,指针

[复制链接]

出20入186汤圆

发表于 2012-11-6 13:39:13 | 显示全部楼层 |阅读模式
本帖最后由 yuyu87 于 2012-11-6 13:41 编辑

void lcd_cls(uint16_t color){                               
        uint8_t cReg[2];
        cReg[0]=color>>8;                //高字节在前
        cReg[1]=(uint8_t)color&0xff;
        lcd_write_cmd(0x52,cReg,2); //现在采用的方法,这里 此函数第二个参数是uint8_t 的指针,


我现在用的这种方法感觉有些麻烦,多余,但我直接传递color的指针编译时会出错,,
lcd_write_cmd(0x52,&color,2);因为color是16位的,传递给8位指针会出问题,
lcd_write_cmd(0x52,(uint8_t)&color,2); 这样也是一样的结果,
求大家指点,在线求解答

补充:
void lcd_write_cmd(uint8_t cmd,uint8_t *option,uint32_t len);
函数申明       

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2012-11-6 14:20:03 | 显示全部楼层
lcd_write_cmd(0x52,(uint8_t)&color,2); 这样也是一样的结果,
----------难道编译器没WARNING提示?应该是 (uint8_t *)&color不?

出0入0汤圆

发表于 2012-11-6 15:42:05 | 显示全部楼层
lcd_write_cmd(0x52,(uint8_t *)&color,2);

出20入186汤圆

 楼主| 发表于 2012-11-6 13:41:13 | 显示全部楼层
也就是16位的颜色要传递给8位指针

出0入0汤圆

发表于 2012-11-6 13:53:54 | 显示全部楼层
color用union呢

出20入186汤圆

 楼主| 发表于 2012-11-6 14:17:19 | 显示全部楼层
是的,联合是可以的,但有没有直接点的方法传递指针?

出20入186汤圆

 楼主| 发表于 2012-11-6 14:21:11 | 显示全部楼层
typedef union {
        uint8_t c8[2];
        uint16_t c16;
}color_def;


void lcd_cls(color_def color){                                //以指定颜色清屏,叵为0则用背景色清屏
        if(color.c16)
                lcd_write_cmd(0x52,&color.c8[0],2);
        else
                lcd_write_cmd(0x52,0x0,0);
       


好吧,暂时这样用

出0入0汤圆

发表于 2012-11-6 16:56:04 | 显示全部楼层
jameszxj 发表于 2012-11-6 15:42
lcd_write_cmd(0x52,(uint8_t *)&color,2);


这样写在语法上是通过的,结果上还是错的,M3是little endian的,MSB在高地址,LSB在低地址,这样传递过去以后,先写了低8位,后写高8位,数据就错了。

出0入0汤圆

发表于 2012-11-6 18:02:54 | 显示全部楼层
leavic 发表于 2012-11-6 16:56
这样写在语法上是通过的,结果上还是错的,M3是little endian的,MSB在高地址,LSB在低地址,这样传递过 ...

这跟楼主用联合的结果应该是一样的,至于little endian还是big endian的问题,应该用宏定义等其他方式来确定方式。

出0入0汤圆

发表于 2012-11-8 03:14:12 来自手机 | 显示全部楼层
这种刷屏函数本身效率已经低的令人发指了,再改还是残废,直接自己写一个吧,填个颜色还要传指针是要死人的

出0入0汤圆

发表于 2012-11-8 03:15:43 来自手机 | 显示全部楼层
leavic 发表于 2012-11-6 16:56
这样写在语法上是通过的,结果上还是错的,M3是little endian的,MSB在高地址,LSB在低地址,这样传递过 ...

你可以在写颜色的时候就字节倒序。。。用dma刷spi的液晶我就是那么干的,定义颜色的时候就倒过来。。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-21 01:23

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

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