求助:怎么计算任意时刻往前1秒内,高电平持续了多长...

2019-12-10 18:14发布

本帖最后由 ma_xiang 于 2019-10-6 14:58 编辑

怎么实时计算当前时刻往前推1秒内,高电平持续了多长时间?可以不用很精确,10毫秒级就可以,各位兄台有没有巧妙的算法
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
26条回答
albert_w
1楼-- · 2019-12-13 00:00
 精彩回答 2  元偷偷看……
浮华一生
2楼-- · 2019-12-13 00:30
本帖最后由 浮华一生 于 2019-10-7 09:56 编辑

一个边沿触发中断,一个1ms 定时器。  上升沿到来 记录时间 t1, 下降沿记录为t2, 任意时刻记录为t
if (t > t2){
        if ( ( t - t2 ) > 1000) {
                  前1s一直是低
        } else if ( (t - t1) < 1000) {
                高电平时间为 t2-t1
        } else {
                高电平时间为  1000 - (t -t2)
        }
} else {
        .......
}

还有其他情况自己推一下。
(编辑原因,手滑提交了)
ma_xiang
3楼-- · 2019-12-13 03:56
本帖最后由 ma_xiang 于 2019-10-7 11:45 编辑
albert_w 发表于 2019-10-7 01:14
100bit的数据结构就够了. 建议搞128bit也就是16字节. 每1/128秒对这个数(?) 进行一次位操作.

读取嘛? 判断 ...


这个也可行 ,就是位的处理有点复杂吧
hackboymzw
4楼-- · 2019-12-13 06:21
ma_xiang 发表于 2019-10-7 11:44
这个也可行 ,就是位的处理有点复杂吧


一点都不复杂,32位一个,一共4个,组成环形。
用0x01去和目标相与,然后目标右移一次,再相与,如此循环一遍,结果就是了,这是最笨的循环比较法,有点浪费资源,但确是最简单最容易理解的方法。
yangsen
5楼-- · 2019-12-13 11:33
用位来存储,用不了多大内存,1024bit也才128字节,处理也不复杂
hackboymzw
6楼-- · 2019-12-13 16:38
 精彩回答 2  元偷偷看……

一周热门 更多>