找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

查看数: 2489 | 评论数: 9 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-10-15 19:06

正文摘要:

        uint8_t  TmMs[8]     数据定义         for(i=0;i<sizeof(TmMs);i++)        & ...

回复

ID:656213 发表于 2021-10-20 10:17
谢谢楼上各前辈讲解,很有收获,基本理解了。
ID:965325 发表于 2021-10-19 08:08
本帖最后由 岳耳 于 2021-10-19 08:11 编辑
jiahz2019 发表于 2021-10-18 19:43
这里使用sizeof(TmMs) 这个语句有什么特殊用意吗,为什么不直接用写8 ?

TmMs的长度不仅仅都是8位,这样写遇到不同长度的TmMs,也不需要修改代码也可以继续使用改函数。
ID:656213 发表于 2021-10-18 19:43
18701931930 发表于 2021-10-16 09:37
代码简化下,你就能看懂了。实际上sizeof(TmMs)=8  ,因为定义数组的时候已经说明了数组所占内存,去看看 ...

这里使用sizeof(TmMs) 这个语句有什么特殊用意吗,为什么不直接用写8 ?
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。
ID:415064 发表于 2021-10-16 12:00
跟着楼上的,这个应该是利用TmMs做的倒计时机制,有8个定时器,每个定时器都有自己的时间,各自都倒数,为0时说明时间到了,然后去处理相关业务,再把时间重置
ID:656213 发表于 2021-10-16 11:57
Hephaestus 发表于 2021-10-15 20:23
写这段代码的显然不知道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

ID:25058 发表于 2021-10-15 20:32
sizeof实际上是获取了数据在内存中所占用的存储空间,以字节为单位来计数。
ID:883242 发表于 2021-10-15 20:23
写这段代码的显然不知道sizeof是什么意义,但是不影响执行。

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

Powered by 单片机教程网

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