如何有效地在微控制器中生成随机数?

Don*_*alo 8 random microcontroller

如何有效地在微控制器中生成随机数?是否有任何一般指导方针或特定的快速方法?

Dig*_*oss 11

一个通常生成伪随机数而不是实际随机数,尽管两者都可能以不同的速率生成.

根据序列是否将用于加密目的,有两种常规类别.主要区别在于序列中一个数字的知识是否允许预测下一个数字.通用RNG不担心算法的知识是否允许观察者复制序列,并且它们运行得更快.

典型的通用RNG算法是Mersenne Twister.各种算法有许多公共实现.在这里看一个.

如果MT需要太多内存,那么线性同余生成器就会产生一半中等回退.(MT直到1997年才被发明.)这个生成器有一些问题,但它几乎不需要内存,几乎没有代码,而且速度非常快.实现无处不在,Knuth的Seminumerical Algorithms详细介绍了它.

要为任何RNG播种,你需要一个熵源,请参阅http://en.wikipedia.org/wiki/Entropy_ ( computing)(注意:SO对该链接中的()感到困惑.)这通常是由CPU可以观察的定时事件导出,例如击键(我猜这对你不起作用)中断和数据包到达.实时时钟通常是可接受的来源,如果它保持自己的状态,因为重新启动很少以任何顺序计时.


小智 10

您可以将种子存储到EEPROM中,当设备引导时,您可以增加种子并再次存储它.因此,每次重启都会有不同的随机数.


pav*_*ium 7

您可以通过模拟LINEAR FEEDBACK SHIFT REGISTER来通过操作位来生成伪随机

那么问题就变成"你要模拟多少位?"

维基百科有一些信息.

  • 控制器上没有实时时钟?这可以充当种子. (2认同)