标题: 求讲解一段单片机程序,for循环看不懂 谢谢 [打印本页]

作者: jiahz2019    时间: 2021-10-15 19:06
标题: 求讲解一段单片机程序,for循环看不懂 谢谢
        uint8_t  TmMs[8]     数据定义
        for(i=0;i<sizeof(TmMs);i++)                      {                                          
                        if(TmMs[ i])   TmMs[ i]--;
                }
     里面这段for循环看不懂,后面很多函数的开头都用到了这个数据。求解释,谢谢!

51hei图片_20211015185616.png (19.96 KB, 下载次数: 79)

51hei图片_20211015185616.png

51hei图片_20211015185755.png (7.37 KB, 下载次数: 69)

51hei图片_20211015185755.png

作者: Hephaestus    时间: 2021-10-15 20:23
写这段代码的显然不知道sizeof是什么意义,但是不影响执行。
作者: liang1981    时间: 2021-10-15 20:32
sizeof实际上是获取了数据在内存中所占用的存储空间,以字节为单位来计数。
作者: 18701931930    时间: 2021-10-16 09:37
代码简化下,你就能看懂了。实际上sizeof(TmMs)=8  ,因为定义数组的时候已经说明了数组所占内存,去看看关键字sizeof的作用
for(i=0;i<8;i++)      //循环8次 ,访问数组 TmMs里的每个成员 1遍 ,每个成员只访问一遍。         
{                                          
      if(TmMs[ i])   //只要数组成员不等于0,就减1
        TmMs[ i]--;  //等效于 TmMs[ i]= TmMs[ i ] - 1 ;
  }





//最后运行下来就是:所有不为0的数组成员都减1


作者: jiahz2019    时间: 2021-10-16 11:57
Hephaestus 发表于 2021-10-15 20:23
写这段代码的显然不知道sizeof是什么意义,但是不影响执行。

哈哈,人家可是十多年经验的高级工程师了,你这样讲有点太武断了。
作者: wojiaoguogai    时间: 2021-10-16 12:00
跟着楼上的,这个应该是利用TmMs做的倒计时机制,有8个定时器,每个定时器都有自己的时间,各自都倒数,为0时说明时间到了,然后去处理相关业务,再把时间重置
作者: 天ノ忆    时间: 2021-10-16 14:39
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
由于uint8_t一般表示unsigned char,所以i<sizeof(TmMs)实际等效为i<8。
定时器0中断函数,每进入一次,对TmMs中的8个数据内容减一,
这样可以实现同时开始计数,通过设置TmMs内的值来结束计数,
不过不推荐使用TmMs[ i]--,建议TmMs[ i]++;然后在需要使用数据的地方判断TmMs[i]>=Value。
作者: jiahz2019    时间: 2021-10-18 19:43
18701931930 发表于 2021-10-16 09:37
代码简化下,你就能看懂了。实际上sizeof(TmMs)=8  ,因为定义数组的时候已经说明了数组所占内存,去看看 ...

这里使用sizeof(TmMs) 这个语句有什么特殊用意吗,为什么不直接用写8 ?
作者: 岳耳    时间: 2021-10-19 08:08
本帖最后由 岳耳 于 2021-10-19 08:11 编辑
jiahz2019 发表于 2021-10-18 19:43
这里使用sizeof(TmMs) 这个语句有什么特殊用意吗,为什么不直接用写8 ?

TmMs的长度不仅仅都是8位,这样写遇到不同长度的TmMs,也不需要修改代码也可以继续使用改函数。
作者: jiahz2019    时间: 2021-10-20 10:17
谢谢楼上各前辈讲解,很有收获,基本理解了。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1