amobbs.com 阿莫电子技术论坛

标题: 怎么获得随机数呢 [打印本页]

作者: fighter_ck    时间: 2015-6-18 18:34
标题: 怎么获得随机数呢
最近在单片机上做随机数,用随机数作为种子,再去获取随机数,不知这样可行吗?
while(1)
{
        sran(ran());
        printf("%d\n",ran());

}
作者: prow    时间: 2015-6-18 18:50
用单片机一个AD口采浮空电压,然后当成随机数
作者: fighter_ck    时间: 2015-6-18 19:00
prow 发表于 2015-6-18 18:50
用单片机一个AD口采浮空电压,然后当成随机数

AD脚刚好被用完了,你还有什么好的办法吗
作者: lcofjp    时间: 2015-6-18 19:03
用上了也可以啊,只要有AD,采一批数,取最低位不就出来了。
作者: loohoo0302    时间: 2015-6-18 19:05
随机性比楼上更进一步:AD口采样噪声,进行多次采样末位组合,例如:8位AD,采样4次,取末2位,组合成8BIT。
作者: fighter_ck    时间: 2015-6-18 19:07
lcofjp 发表于 2015-6-18 19:03
用上了也可以啊,只要有AD,采一批数,取最低位不就出来了。

我要产生3个unsigned char 数,那怎么办?
作者: lcofjp    时间: 2015-6-18 19:26
fighter_ck 发表于 2015-6-18 19:07
我要产生3个unsigned char 数,那怎么办?


采样24次,每次取最低bit,这样一共24bit,组成3个8位unsigned char。
作者: 磊磊映画    时间: 2015-6-18 19:33
get rtc time
作者: quner    时间: 2015-6-18 20:26
磊磊映画 发表于 2015-6-18 19:33
get rtc time

这个赞一个 +1
作者: hzpj001    时间: 2015-6-18 20:38
磊磊映画 发表于 2015-6-18 19:33
get rtc time

这个方法好.
作者: 磊磊映画    时间: 2015-6-18 20:50
hzpj001 发表于 2015-6-18 20:38
这个方法好.

1.我也是跟我们经理学的
2.随机数唯一就好  
3.u32位的应该挺大了
作者: 磊磊映画    时间: 2015-6-18 20:50
quner 发表于 2015-6-18 20:26
这个赞一个 +1

1.我也是跟我们经理学的
2.随机数唯一就好  
3.u32位的应该挺大了
作者: ruan18278816371    时间: 2015-6-18 20:53
KEIL库函数有产生随机数的函数的
作者: 12tangyang12    时间: 2015-6-18 21:32
据说库函数产生的是伪随机数
作者: dellric    时间: 2015-6-18 21:50
不行,每次出来的初始数据是一样的。如果是MCS51的话,在startup.asm里面写一个代码,复位后,把128个RAM的数据求和,取8位数据作为种子。MCS51复位后RAM区的数据是随机的。
作者: quner    时间: 2015-6-18 22:13
磊磊映画 发表于 2015-6-18 20:50
1.我也是跟我们经理学的
2.随机数唯一就好  
3.u32位的应该挺大了

确实如此,谢谢分享
作者: chenchaoting    时间: 2015-6-18 22:30
有专用芯片,北京一家公司的
作者: dawanpi    时间: 2015-6-18 23:04
不说什么单片机就是耍流氓,stm32f4还内置随机数发生器呢。
作者: fighter_ck    时间: 2015-6-19 00:12
磊磊映画 发表于 2015-6-18 20:50
1.我也是跟我们经理学的
2.随机数唯一就好  
3.u32位的应该挺大了

是不是通过按键取计数寄存器值?

作者: hz_luping    时间: 2015-6-19 00:35
楼主是要写dali协议?
作者: maqian    时间: 2015-6-19 08:37
c语言库里有一个专门的随机数函数,我用过还行啊。
作者: 腹黑男    时间: 2015-6-19 08:42
maqian 发表于 2015-6-19 08:37
c语言库里有一个专门的随机数函数,我用过还行啊。

前面已经说过  那个并不是真正的随机的
作者: wq_601840968    时间: 2015-6-19 08:58
stm32 内部有rng
作者: steaven2000    时间: 2015-6-24 11:34
本帖最后由 steaven2000 于 2015-6-24 11:36 编辑

http://www.amobbs.com/forum.php? ... F%E6%9C%BA%E6%95%B0
作者: 3DA502    时间: 2015-6-24 13:58
本帖最后由 3DA502 于 2015-6-24 14:01 编辑

存到ROM里面,如果ROM足够大
作者: steaven2000    时间: 2015-6-25 15:58
磊磊映画 发表于 2015-6-18 20:50
1.我也是跟我们经理学的
2.随机数唯一就好  
3.u32位的应该挺大了

使用RTC时间对于一个具体的设备来说,确实能看做随机。

如果我需要的随机数是在某个相同天数(如每月25号)的某个具体时间点(如0:0:0)时产生的,那么所有的设备的随机数种子不都相同了吗?


作者: xld826    时间: 2015-7-8 17:11
ADC口接一个5%精度的电阻,世界上没有完全一样的电阻。
作者: xld826    时间: 2015-7-8 17:12
ruan18278816371 发表于 2015-6-18 20:53
KEIL库函数有产生随机数的函数的

那个在编译生成时候就是一个随机的固定值,不是随机
作者: lingdianhao    时间: 2015-7-8 17:20
腹黑男 发表于 2015-6-19 08:42
前面已经说过  那个并不是真正的随机的

随机数的生成方法有很多种,什么叫"真正的随机数"?,难道用10个色子来仍才算?
作者: ylei12    时间: 2015-7-8 21:14
一个变量在主程序里一直加1,需要随机数时读取这个变量,这样产生的数是不是随机数?
作者: fighter_ck    时间: 2015-7-10 18:51
ylei12 发表于 2015-7-8 21:14
一个变量在主程序里一直加1,需要随机数时读取这个变量,这样产生的数是不是随机数? ...

不是吧,这样太有规律了

作者: NJ8888    时间: 2015-7-10 19:56
fighter_ck 发表于 2015-7-10 18:51
不是吧,这样太有规律了

systick读取两次24+24位混着用
作者: ylei12    时间: 2015-7-10 20:13
fighter_ck 发表于 2015-7-10 18:51
不是吧,这样太有规律了

一个32位的无符号变量有4294967296种状态,想凑一次对,不容易吧
作者: jathenal    时间: 2015-7-11 19:09
如果芯片有唯一ID和32位定时器,从上电后定时器就开始和主频同步计数,溢出后舍掉高位,那么以这个计数值加上唯一ID做种子,基本可得出完全的随机数了
作者: ZHAOBO10375    时间: 2015-8-28 22:01
一直加1有什么不好,
作者: jamesdeep    时间: 2015-8-28 22:08
利用蒙特卡罗算法可以生成伪随机数,伪随机数在一定条件下可以与真随机数相媲美




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4