谢谢楼上各前辈讲解,很有收获,基本理解了。 |
本帖最后由 岳耳 于 2021-10-19 08:11 编辑 jiahz2019 发表于 2021-10-18 19:43 TmMs的长度不仅仅都是8位,这样写遇到不同长度的TmMs,也不需要修改代码也可以继续使用改函数。 |
18701931930 发表于 2021-10-16 09:37 这里使用sizeof(TmMs) 这个语句有什么特殊用意吗,为什么不直接用写8 ? |
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。 由于uint8_t一般表示unsigned char,所以i<sizeof(TmMs)实际等效为i<8。 定时器0中断函数,每进入一次,对TmMs中的8个数据内容减一, 这样可以实现同时开始计数,通过设置TmMs内的值来结束计数, 不过不推荐使用TmMs[ i]--,建议TmMs[ i]++;然后在需要使用数据的地方判断TmMs[i]>=Value。 |
跟着楼上的,这个应该是利用TmMs做的倒计时机制,有8个定时器,每个定时器都有自己的时间,各自都倒数,为0时说明时间到了,然后去处理相关业务,再把时间重置 |
Hephaestus 发表于 2021-10-15 20:23 哈哈,人家可是十多年经验的高级工程师了,你这样讲有点太武断了。 |
代码简化下,你就能看懂了。实际上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 |
sizeof实际上是获取了数据在内存中所占用的存储空间,以字节为单位来计数。 |
写这段代码的显然不知道sizeof是什么意义,但是不影响执行。 |