搜索
bottom↓
回复: 17

C语句看不明白,请教!

[复制链接]

出50入0汤圆

发表于 2017-8-31 10:02:59 | 显示全部楼层 |阅读模式
本帖最后由 ltby00 于 2017-8-31 10:27 编辑

#define   data1     4
#define   data2     196
#define   ADDR1    0x00E000

u8  funa(void)
{
    u8  i,  j ,  bufa[(data1 + data2  ) / 8 + ((data1 + data2 )  % 8 ? 1:0)];  //

   SPI_FLASH_Read(bufa,  ADDR1,  (data1 + data2  ) / 8 + ((data1 + data2 )  % 8 ? 1:0) );    ///读SPI  FLASH
   for(i=0;  i< (data1 + data2  ) / 8 + ((data1 + data2 )  % 8 ? 1:0);  i++)
   {
      for(j=0;   j<8;   j++){
         if(i<= data1 /8  &&  j<  data1 )   continue;
         if(bufa  & 1<<j)    return   i*8 +j; ///是    if(bufa  & 1<<j)    return   i*8 +j;
     }
  }
  return   0xfe;
}

    看不明白(data1 + data2  ) / 8 + ((data1 + data2 )  % 8 ? 1:0) 应该指向FLASH芯片内的地址, 但是表达的什么 ?
 请教下大家!!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

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

出0入0汤圆

发表于 2017-8-31 10:05:58 | 显示全部楼层
打他1,打他2 需要多少鼻涕

出50入0汤圆

 楼主| 发表于 2017-8-31 10:09:47 | 显示全部楼层
helloshi 发表于 2017-8-31 10:05
打他1,打他2 需要多少鼻涕

  啥 ?  (啷里个啷~~~~)

出0入0汤圆

发表于 2017-8-31 10:10:36 | 显示全部楼层
额,data1,data2表示位

出0入0汤圆

发表于 2017-8-31 10:10:55 | 显示全部楼层
本帖最后由 longwu537 于 2017-8-31 10:12 编辑

这个是数组的下标地址,我估计是用来做小数取整的,如果能整除8那就以商为下标。如果不能就强制进一位。类似于小数取整时的只有整数后有小数,就+1或进位。
但是具体为啥这么写,就要看你整个上下文了,这里看不出来。

补充:这个还有就是定义了一个数组,根据Data1和Data2计算需要定义一个多大的数组。

出0入0汤圆

发表于 2017-8-31 10:12:18 | 显示全部楼层
data1和data2加起来 用多少bit可以表示

出0入0汤圆

发表于 2017-8-31 10:14:11 | 显示全部楼层
data1 ,data2代表的是bit数;

SPI_FLASH_Read(bufa,  ADDR1,  (data1 + data2  ) / 8 + ((data1 + data2 )  % 8 ? 1:0) );    ///读SPI  FLASH
就是从ADDR1开始读取的N个字节数

N和data1 ,data2转换就是(data1 + data2  ) / 8 + ((data1 + data2 )  % 8 ? 1:0)

出0入0汤圆

发表于 2017-8-31 10:20:31 | 显示全部楼层
gujiamao_love 发表于 2017-8-31 10:12
data1和data2加起来 用多少bit可以表示

经你一提示想明白了,估计之前的数据的形式是bit形式,供data1+data2个bit位,但是在flash存储里是按照字节存储的,所以在读取的时候是要按照字节来读取出来,但是这里面就要用到取整以后,只要余数不为0,则就需要多一个字节来存储尾数的数据。这样就能解释清楚了。

出50入0汤圆

 楼主| 发表于 2017-8-31 10:21:59 | 显示全部楼层
gujiamao_love 发表于 2017-8-31 10:12
data1和data2加起来 用多少bit可以表示

   补充了下代码!

出50入0汤圆

 楼主| 发表于 2017-8-31 10:22:28 | 显示全部楼层
longwu537 发表于 2017-8-31 10:20
经你一提示想明白了,估计之前的数据的形式是bit形式,供data1+data2个bit位,但是在flash存储里是按照字 ...

    补充了下代码!

出50入0汤圆

 楼主| 发表于 2017-8-31 10:27:52 | 显示全部楼层
奇怪   if(bufa 后面的[i]   显示不出来

出0入0汤圆

发表于 2017-8-31 10:28:20 | 显示全部楼层
这个是定义一个数组,如果刚好是8的倍数,就数组元素数量就是这个值,否则的话增加一个元素,这种定义很直观,当然更简单的做法是(data1 + data2 +7 ) / 8

出50入0汤圆

 楼主| 发表于 2017-8-31 10:41:30 | 显示全部楼层
jiege0119 发表于 2017-8-31 10:14
data1 ,data2代表的是bit数;

SPI_FLASH_Read(bufa,  ADDR1,  (data1 + data2  ) / 8 + ((data1 + data2  ...

  我还需要点时间消化, 我在看看

出0入0汤圆

发表于 2017-8-31 10:54:09 | 显示全部楼层
(data1 + data2  ) / 8 + ((data1 + data2 )  % 8 ? 1:0)
--------------------- 这个写法并不好,模除很没效率的,模除8,用and 7就可以了。

实际这样写更好: (data1 + data2 + 7 ) / 8

出50入0汤圆

 楼主| 发表于 2017-8-31 11:11:13 | 显示全部楼层
myxiaonia 发表于 2017-8-31 10:28
这个是定义一个数组,如果刚好是8的倍数,就数组元素数量就是这个值,否则的话增加一个元素,这种定义很直 ...


  确实是,  (data1 + data2 +7 ) / 8 巧妙的解决了8的倍数, 挺你!!!

出0入0汤圆

发表于 2017-8-31 11:22:26 | 显示全部楼层
javenreal 发表于 2017-8-31 10:54
(data1 + data2  ) / 8 + ((data1 + data2 )  % 8 ? 1:0)
--------------------- 这个写法并不好,模除很没 ...

这个思路不错。。。

出0入0汤圆

发表于 2017-8-31 11:57:55 | 显示全部楼层
就是对齐的意思,写得很晦涩。。。。

出0入0汤圆

发表于 2017-8-31 20:49:36 | 显示全部楼层
javenreal 发表于 2017-8-31 10:54
(data1 + data2  ) / 8 + ((data1 + data2 )  % 8 ? 1:0)
--------------------- 这个写法并不好,模除很没 ...

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

本版积分规则

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

GMT+8, 2024-5-22 02:00

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

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