问题1:一个双字,有多少个bit位接通了,进行一个统计,比如VB0中的数据为00101101,返回值为4,VB0中的数据为10101111,返回值为6。
问题2:能不能实现将为1的占位数按顺序返回。比如VB0中的数据为00101101,则V0.0为1时返回1,V0.2为1时返回2,V0.3为1时返回3,V0.5为1时返回4。就是相当于VB0中的数据00101101转换为00001111。
应用:有一个多路语音报警模块,报警音需要2-3秒时间,如果多个报警存在时,语音会乱报,所以编程时的思路是轮询播放,每个点位通2-3秒,少量的点位可以,但是如果点多的时候,报警发生了,会有一个很大的延迟。怎么取双字的bit位接通个数。几个报警数,就几个轮询播报。
问题1从官网找到了例程。但是问题2应该怎么解决呢?
Number_of_1.zip
------------------------------------------------------------------------------------------------------------
鉴于上面问题中没有讲,具体的工艺控制要求,我详细说一下:
这是一个语音报警,鉴于语音报警模块限制,只能播放一个语音,一条语音播放5秒,无多条报警轮播功能,多个信号到达时,有争先问题。所以我从控制程序里面做了一个轮询,即轮回遍历每个报警点,每个报警点有5秒接通时间。
因没有更好思路,所以只能用这个方式,点拉少时,没有问题。点位多了,延迟问题突出,所以想做一个,随着报警点的多少,自动识别出报警点的数量,在自动排列,这个需要给报警点位重新编号。比如,1、4、7点位报警了,给其定义标签为1、2、3,重新排列一下。