2

我需要一种用于资源极其有限的微控制器的算法。将获得一个 16 位真正的随机种子,之后我需要周期性的 1 位随机值。限制将是大约 4-6 字节的 RAM 和 50 字节左右的程序存储器。指令周期也很关键,处理器没有乘法指令或本机浮点功能等(它是 PIC16F54)。由于程序简单,有时随机位样本之间的指令计数可能相同。唯一的可取之处是随机性的程度并不重要。

4

1 回答 1

2

一个非常快速的 Google 搜索会发现这个8 位 PRNG,它只需要 2 个字节的 RAM 并且具有不错的随机性(参见 snigelen 的最后一篇文章)。

代码如下:

uint8_t rnd(void) {
static uint8_t s=0xaa,a=0;
        s^=s<<3;
        s^=s>>5;
        s^=a++>>2;
        return s;
}

s通过设置和a高字节和低字节来播种它的 16 位数量。您可以通过逐步移出 8 位结果(更长的周期)或只取低位(更快)来一次生成一个位。

于 2013-08-02T12:17:23.343 回答