C语句看不明白,请教!

2019-12-24 18:38发布

本帖最后由 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芯片内的地址, 但是表达的什么 ?
 请教下大家!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
longwu537
1楼-- · 2019-12-25 13:59
gujiamao_love 发表于 2017-8-31 10:12
data1和data2加起来 用多少bit可以表示

经你一提示想明白了,估计之前的数据的形式是bit形式,供data1+data2个bit位,但是在flash存储里是按照字节存储的,所以在读取的时候是要按照字节来读取出来,但是这里面就要用到取整以后,只要余数不为0,则就需要多一个字节来存储尾数的数据。这样就能解释清楚了。
ltby00
2楼-- · 2019-12-25 19:36
gujiamao_love 发表于 2017-8-31 10:12
data1和data2加起来 用多少bit可以表示

   补充了下代码!
ltby00
3楼-- · 2019-12-26 00:05
longwu537 发表于 2017-8-31 10:20
经你一提示想明白了,估计之前的数据的形式是bit形式,供data1+data2个bit位,但是在flash存储里是按照字 ...

    补充了下代码!
ltby00
4楼-- · 2019-12-26 03:35
 精彩回答 2  元偷偷看……
myxiaonia
5楼-- · 2019-12-26 09:07
这个是定义一个数组,如果刚好是8的倍数,就数组元素数量就是这个值,否则的话增加一个元素,这种定义很直观,当然更简单的做法是(data1 + data2 +7 ) / 8
ltby00
6楼-- · 2019-12-26 10:56
jiege0119 发表于 2017-8-31 10:14
data1 ,data2代表的是bit数;

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

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

一周热门 更多>