OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3672|回复: 7

IIC通信代码C语言理解

[复制链接]

19

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2015-7-26
在线时间
28 小时
发表于 2016-3-10 11:08:36 | 显示全部楼层 |阅读模式
const u8 TEXT_Buffer[]={"WarShipSTM32 IIC TEST"};
#define SIZE sizeof(TEXT_Buffer)

u8 datatemp[SIZE];
main函数中if(key==KEY1_PRES)//KEY_UP按下,写入24C02
                {
                        LCD_Fill(0,170,239,319,WHITE);//清除半屏   
                        LCD_ShowString(30,170,200,16,16,"Start Write 24C02....");
                        AT24CXX_Write(0,(u8*)TEXT_Buffer,SIZE);
                        LCD_ShowString(30,170,200,16,16,"24C02 Write Finished!");//提示传送完成
                }
                if(key==KEY0_PRES)//KEY1按下,读取字符串并显示
                {
                        LCD_ShowString(30,170,200,16,16,"Start Read 24C02.... ");
                        AT24CXX_Read(0,datatemp,SIZE);
                        LCD_ShowString(30,170,200,16,16,"The Data Readed Is:  ");//提示传送完成
                        LCD_ShowString(30,190,200,16,16,datatemp);//显示读到的字符串
                }
void AT24CXX_Read(u16 ReadAddr,u8 *pBuffer,u16 NumToRead)
void AT24CXX_Write(u16 WriteAddr,u8 *pBuffer,u16 NumToWrite)


AT24CXX_Write(0,(u8*)TEXT_Buffer,SIZE);中为什么要加(u8*)呢?AT24CXX_Read(0,datatemp,SIZE);为什不加?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11548
金钱
11548
注册时间
2014-4-1
在线时间
1316 小时
发表于 2016-3-10 11:41:27 | 显示全部楼层

需要继续看函数里面。

回复 支持 反对

使用道具 举报

2

主题

239

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2015-6-5
在线时间
110 小时
发表于 2016-3-10 14:04:36 | 显示全部楼层
型態的問題吧 他宣告有加const
不加那個編譯器會跳警告
回复 支持 反对

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2016-3-10 20:30:33 | 显示全部楼层
具体看函数的实现效果吧!!!
回复 支持 反对

使用道具 举报

28

主题

303

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2014-8-14
在线时间
67 小时
发表于 2016-4-3 11:31:01 | 显示全部楼层
我把  const  去掉  然后 把  (u8 *)去掉 也是可以通过的  为什么const  会引起 这种效果  坐等  大神
这个世界上还有很多很多的人,但你不认识他们,他们也不属于你的世界。这个世界上还有很多好吃的好玩的好看的东西,可真正属于你的世界其实是很小的,只是你去过的地方吃过的东西和见过的落日,还有会在乎你死活的朋友。”——《龙族》
回复 支持 反对

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2016-4-3 13:34:03 | 显示全部楼层
关注这个问题。也想不通const为什么会造成这种结果,仿真看了下,*TEXT_Buffer确实是指向一个8位数据的,为什么不加强制转换会显示指针不匹配呢?
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2016-3-12
在线时间
34 小时
发表于 2016-5-23 16:11:32 | 显示全部楼层
我觉得lz应该补补C语言的知识了。int *a=b;在C语言中是行不通的,得加强制转换:int *a=(int *)b;
回复 支持 反对

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2016-5-30 01:14:04 | 显示全部楼层
const 关键字修饰的内容要被放到CODE区,普通的变量在DATA区.不加(U8 *),编译器会说自己找不到.但他在另一个区域有找到了一个可以匹配的.所以就来一个警告.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-12 18:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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