我需要一种资源非常有限的微控制器算法。将获得16位真随机种子,之后我需要周期性的1位随机值。限制将是大约4-6个字节的RAM,以及50个左右的程序存储器字节。指令周期也很关键,处理器没有乘法指令或本机浮点功能等(这是PIC16F54)。由于程序简单,有时候随机位样本之间的指令计数是相同的。唯一的优点是随机程度并不重要。
答案 0 :(得分:2)
一个非常快速的谷歌搜索出现了this 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位结果(更长的周期)或仅采用低位(更快)来一次生成一个位。