找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2016|回复: 9
打印 上一主题 下一主题
收起左侧

求讲解一段单片机程序,for循环看不懂 谢谢

[复制链接]
跳转到指定楼层
楼主
        uint8_t  TmMs[8]     数据定义
        for(i=0;i<sizeof(TmMs);i++)                      {                                          
                        if(TmMs[ i])   TmMs[ i]--;
                }
     里面这段for循环看不懂,后面很多函数的开头都用到了这个数据。求解释,谢谢!

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

51hei图片_20211015185616.png

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

51hei图片_20211015185755.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2021-10-15 20:23 | 只看该作者
写这段代码的显然不知道sizeof是什么意义,但是不影响执行。
回复

使用道具 举报

板凳
ID:25058 发表于 2021-10-15 20:32 | 只看该作者
sizeof实际上是获取了数据在内存中所占用的存储空间,以字节为单位来计数。
回复

使用道具 举报

地板
ID:554500 发表于 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

回复

使用道具 举报

5#
ID:656213 发表于 2021-10-16 11:57 | 只看该作者
Hephaestus 发表于 2021-10-15 20:23
写这段代码的显然不知道sizeof是什么意义,但是不影响执行。

哈哈,人家可是十多年经验的高级工程师了,你这样讲有点太武断了。
回复

使用道具 举报

6#
ID:415064 发表于 2021-10-16 12:00 | 只看该作者
跟着楼上的,这个应该是利用TmMs做的倒计时机制,有8个定时器,每个定时器都有自己的时间,各自都倒数,为0时说明时间到了,然后去处理相关业务,再把时间重置
回复

使用道具 举报

7#
ID:139866 发表于 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。
回复

使用道具 举报

8#
ID:656213 发表于 2021-10-18 19:43 | 只看该作者
18701931930 发表于 2021-10-16 09:37
代码简化下,你就能看懂了。实际上sizeof(TmMs)=8  ,因为定义数组的时候已经说明了数组所占内存,去看看 ...

这里使用sizeof(TmMs) 这个语句有什么特殊用意吗,为什么不直接用写8 ?
回复

使用道具 举报

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

TmMs的长度不仅仅都是8位,这样写遇到不同长度的TmMs,也不需要修改代码也可以继续使用改函数。
回复

使用道具 举报

10#
ID:656213 发表于 2021-10-20 10:17 | 只看该作者
谢谢楼上各前辈讲解,很有收获,基本理解了。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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