algorithm - 8位微 Controller 上的线性插值

标签 algorithm assembly microcontroller

我需要使用 PIC 汇编语言在 8 位 PIC 微 Controller (特别是 16F627A 但这无关紧要)上的两个值之间随时间进行线性插值。尽管我在这里寻找的算法和实际代码一样多。

我需要取一个 8 位起始值,一个 8 位结束值和两者之间的位置(当前表示为 8 位数字 0-255,其中 0 表示输出应该是起始值,255 表示它应该是最终值,但如果有更好的方法来表示它,它可以改变)并计算内插值。

现在 PIC 没有除法指令,所以我可以编写通用除法例程并在每一步有效地计算 (B-A)/(x/255)+A 但我觉得可能有更好的方法在微 Controller 上执行此操作而不是我在 PC 上使用 C++ 执行此操作

有没有人对在这个硬件上有效地实现这个有任何建议?

最佳答案

您要查找的值是 (A*(255-x)+B*x)/255 .它只需要 8x8 乘法,最后除以 255,这可以通过简单地取和的高字节来近似。

选择 0..128 范围内的 x,不需要近似值:取 (A*(128-x)+B*x)<<1 的高字节.

关于algorithm - 8位微 Controller 上的线性插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2661584/

相关文章:

algorithm - Calculating a histogram on a streaming data - 在线直方图计算

prefetch - 为 ia32、ia64、amd64 和 powerpc 寻找预取指令的最佳等价物

linux - Linux 平台上微 Controller 的 GUI 库

c++ - gmtime() 函数是否考虑闰年?

java - 生成多对一映射的算法/哈希函数

c++ - 高效的 is_in(vector<string>& S, string P) 函数

c - 递归函数find(n)的时间复杂度

assembly - 8086程序中.model small的含义是什么?

assembly - 什么会导致 Int 13h 中的磁盘读取错误?

c - 基准测试功能