私はいくつかのマイクロチップの2バイトレジスタにタイムアウト値を書き込む必要がある埋め込みプロジェクトに取り組んでいます。整数を2バイトに分解する
タイムアウトは次のように定義されています
timeout = REG_a * (REG_b +1)
私は256までの範囲の整数を使用して、これらのレジスタをプログラムしたい私はtimeout-与えられた、アルゴリズムを探しています60000言うことができますREG_aとREG_bを計算します。
正確な解決策が不可能な場合は、次に可能なタイムアウト値を大きくしたいと考えています。
は、私がこれまで行ってきた:
私の現在のソリューションは、計算:
temp = integer_square_root (timeout) +1;
REG_a = temp;
REG_b = temp-1;
これは実際にはうまく機能した値になります。しかし、皆さんがより最適なソリューションを考え出すことができるかどうかを確認したいと思います。
ああ、私は記憶が制約されているので、大きなテーブルは問題になりません。また、実行時間が重要なので、私は単にソリューションをブルートフォースすることはできません。
'timeout'と計算された値の差を最小にしたいですか?それはこの運動の目的ですか?そうでなければ、あなたは何が良いようです。 –
最適化の1つのバージョンは、1つのレジスタを最小化し、他のレジスタを最大化することです。このレジスタインターフェイスには、両方のレジスタを突然変更したくないという問題が考えられます。あなたは両方のメモリ書き込みを同時に行うことはできませんので、タイマが実行されている間**レジスタが書き込まれると問題が発生する可能性があります。 1つのレジスタを最小化することで、より小さなタイムアウトに移行するときに同じままにしておくことができます。 –