野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11557|回复: 9

代码不懂,求解释

[复制链接]
发表于 2014-12-10 11:14:30 | 显示全部楼层 |阅读模式
#define TxBufferSize1   (countof(TxBuffer1) - 1)
#define RxBufferSize1   (countof(TxBuffer1) - 1)
#define countof(a)      (sizeof(a) / sizeof(*(a)))
#define  BufferSize (countof(Tx_Buffer)-1)
#define  FLASH_WriteAddress     0x00000
#define  FLASH_ReadAddress      FLASH_WriteAddress
#define  FLASH_SectorToErase    FLASH_WriteAddress
//#define  sFLASH_ID              0xEF3015     //W25X16
#define  sFLASH_ID              0xEF4015  //W25Q16
     这些代码看不懂,求解释

回复

使用道具 举报

发表于 2014-12-10 11:49:48 | 显示全部楼层
这些还真不好解释

就好像叫我解释 1+1为啥等于2 这样
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-10 15:45:10 | 显示全部楼层
fire 发表于 2014-12-10 11:49
这些还真不好解释

就好像叫我解释 1+1为啥等于2 这样

#define  FLASH_WriteAddress     0x00000
#define  FLASH_ReadAddress      FLASH_WriteAddress
#define  FLASH_SectorToErase    FLASH_WriteAddress
那这些宏定义呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-10 15:46:01 | 显示全部楼层
fire 发表于 2014-12-10 11:49
这些还真不好解释

就好像叫我解释 1+1为啥等于2 这样

感觉怎么绕来绕去的,想干嘛
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-10 15:46:55 | 显示全部楼层
fire 发表于 2014-12-10 11:49
这些还真不好解释

就好像叫我解释 1+1为啥等于2 这样

楼主,前面求缓冲值的长度是标准固定的吗
回复 支持 反对

使用道具 举报

发表于 2014-12-10 16:10:33 | 显示全部楼层
我也有点不太理解,是不是这样呢?
sizeof(a)代表这个数组所有元素总的字节数, sizeof(*(a))指的是数组某一元素的字节数,即指针类型的字节数 如数组元素类型为uint32_t,指针类型也是uint32_t
  (sizeof(a) / sizeof(*(a)))就代表了这个数组内有多少个元素
于是#define countof(a)      (sizeof(a) / sizeof(*(a)))
然后定义BufferSize (countof(Tx_Buffer)-1)
绕来绕去,我也有点迷,减1到底是去除数组最后的空字符,还是平衡数组内元素个数与上界的差值(因数组元素编号是从0开始的,10个元素的数组其上界为9)
先有这个无界定符的数组
uint8_t Tx_Buffer[] = " 感谢您选用野火stm32开发板\r\n                http://firestm32.taobao.com";
然后定义uint8_t Rx_Buffer[BufferSize];
这两个数组一个是写入的,一个是读出的,长度当然要匹配,至于写入数据的个数肯定是BufferSize了
如table[10]当然有10个元素了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-10 16:14:16 | 显示全部楼层
11kxmx 发表于 2014-12-10 16:10
我也有点不太理解,是不是这样呢?
sizeof(a)代表这个数组所有元素总的字节数, sizeof(*(a))指的是数组 ...

虽然看的不是很懂,但是好像又明白点,谢谢您
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-10 16:16:27 | 显示全部楼层
11kxmx 发表于 2014-12-10 16:10
我也有点不太理解,是不是这样呢?
sizeof(a)代表这个数组所有元素总的字节数, sizeof(*(a))指的是数组 ...

#define  FLASH_WriteAddress     0x00000
#define  FLASH_ReadAddress      FLASH_WriteAddress
#define  FLASH_SectorToErase    FLASH_WriteAddress
在劳烦您下,您看看,我被绕晕了
回复 支持 反对

使用道具 举报

发表于 2014-12-10 18:02:24 | 显示全部楼层
囯郭 发表于 2014-12-10 16:16
#define  FLASH_WriteAddress     0x00000
#define  FLASH_ReadAddress      FLASH_WriteAddress
#defi ...

这个把 0X00000 用这个  FLASH_WriteAddress 宏来表示,估计是为了见名知义吧

下面读地址和扇区擦除地址用  FLASH_WriteAddress  来表示的话,一看就知道 读地址和扇区擦除地址 跟写地址是一样的,不过直接用 0x00000 来表示也可以
回复 支持 反对

使用道具 举报

发表于 2014-12-12 07:51:32 | 显示全部楼层
囯郭 发表于 2014-12-10 16:16
#define  FLASH_WriteAddress     0x00000
#define  FLASH_ReadAddress      FLASH_WriteAddress
#defi ...

这个绕道还比较少,读和擦除的地址都是写入的地址,而写入的地址是 0x00000
宏定义有时为了写起来简单,如#define uchar unsigned char   
而上面的宏定义是为了便于阅读
另外宏定义一般位于头文件或程序的开始部分,便于查找和修改,而不用到程序内部修改,增加了可移值性
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 20:51 , Processed in 0.033695 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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