我正在开发一个嵌入式项目,我必须在某个微芯片的两个字节寄存器中写入超时值。将整数分解为两个字节
超时被定义为:
timeout = REG_a * (REG_b +1)
我想用在256的整数,以让说,60000我寻找一种算法,对这些寄存器进行编程,给予timeout-值,计算REG_a和REG_b。
如果一个确切的解决方案是不可能的,我想获得下一个可能的更大的超时值。
我有什么迄今所做的:
我目前的解决办法计算:
temp = integer_square_root (timeout) +1;
REG_a = temp;
REG_b = temp-1;
这导致了在实际工作中也值。不过,我想看看你们是否可以想出更优化的解决方案。
哦,而且我的记忆受到限制,所以大表无法提供。运行时间也很重要,所以我不能简单地暴力解决方案。
你想最大限度地减少'timeout'和计算值之间的差异吗?这是练习的目的吗?否则你看起来很好。 – 2013-04-06 14:07:21
最优化的一个版本是最小化一个寄存器并使其他寄存器最大化。这个寄存器接口可能存在问题,您不希望突然更改这两个寄存器。由于无法同时进行两次内存写入,因此如果在定时器运行时写入寄存器**,则可能会出现问题。通过最小化一个寄存器,当更小的超时时间可以保持不变,因为最小值提供了更好的时间粒度。 – 2013-04-08 14:54:09