amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 1767|回复: 35

怎么获得随机数呢

[复制链接]
发表于 2015-6-18 18:34:39 | 显示全部楼层 |阅读模式
最近在单片机上做随机数,用随机数作为种子,再去获取随机数,不知这样可行吗?
while(1)
{
        sran(ran());
        printf("%d\n",ran());

}
发表于 2015-6-18 18:50:21 | 显示全部楼层
用单片机一个AD口采浮空电压,然后当成随机数
 楼主| 发表于 2015-6-18 19:00:10 | 显示全部楼层
prow 发表于 2015-6-18 18:50
用单片机一个AD口采浮空电压,然后当成随机数

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

我要产生3个unsigned char 数,那怎么办?
发表于 2015-6-18 19:26:32 | 显示全部楼层
fighter_ck 发表于 2015-6-18 19:07
我要产生3个unsigned char 数,那怎么办?


采样24次,每次取最低bit,这样一共24bit,组成3个8位unsigned char。
发表于 2015-6-18 19:33:28 | 显示全部楼层
get rtc time
发表于 2015-6-18 20:26:58 | 显示全部楼层

这个赞一个 +1
发表于 2015-6-18 20:38:56 | 显示全部楼层

这个方法好.
发表于 2015-6-18 20:50:12 | 显示全部楼层

1.我也是跟我们经理学的
2.随机数唯一就好  
3.u32位的应该挺大了
发表于 2015-6-18 20:50:31 | 显示全部楼层

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

确实如此,谢谢分享
发表于 2015-6-18 22:30:14 来自手机 | 显示全部楼层
有专用芯片,北京一家公司的
发表于 2015-6-18 23:04:35 | 显示全部楼层
不说什么单片机就是耍流氓,stm32f4还内置随机数发生器呢。
 楼主| 发表于 2015-6-19 00:12:26 | 显示全部楼层
磊磊映画 发表于 2015-6-18 20:50
1.我也是跟我们经理学的
2.随机数唯一就好  
3.u32位的应该挺大了

是不是通过按键取计数寄存器值?
发表于 2015-6-19 00:35:57 来自手机 | 显示全部楼层
楼主是要写dali协议?
发表于 2015-6-19 08:37:26 | 显示全部楼层
c语言库里有一个专门的随机数函数,我用过还行啊。
发表于 2015-6-19 08:42:50 | 显示全部楼层
maqian 发表于 2015-6-19 08:37
c语言库里有一个专门的随机数函数,我用过还行啊。

前面已经说过  那个并不是真正的随机的
发表于 2015-6-19 08:58:37 | 显示全部楼层
stm32 内部有rng
发表于 2015-6-24 11:34:52 | 显示全部楼层
本帖最后由 steaven2000 于 2015-6-24 11:36 编辑

http://www.amobbs.com/forum.php? ... F%E6%9C%BA%E6%95%B0
发表于 2015-6-24 13:58:26 | 显示全部楼层
本帖最后由 3DA502 于 2015-6-24 14:01 编辑

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

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

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

发表于 2015-7-8 17:11:28 | 显示全部楼层
ADC口接一个5%精度的电阻,世界上没有完全一样的电阻。
发表于 2015-7-8 17:12:50 | 显示全部楼层
ruan18278816371 发表于 2015-6-18 20:53
KEIL库函数有产生随机数的函数的

那个在编译生成时候就是一个随机的固定值,不是随机
发表于 2015-7-8 17:20:59 | 显示全部楼层
腹黑男 发表于 2015-6-19 08:42
前面已经说过  那个并不是真正的随机的

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

不是吧,这样太有规律了
发表于 2015-7-10 19:56:47 | 显示全部楼层
fighter_ck 发表于 2015-7-10 18:51
不是吧,这样太有规律了

systick读取两次24+24位混着用
发表于 2015-7-10 20:13:10 | 显示全部楼层
fighter_ck 发表于 2015-7-10 18:51
不是吧,这样太有规律了

一个32位的无符号变量有4294967296种状态,想凑一次对,不容易吧
发表于 2015-7-11 19:09:12 | 显示全部楼层
如果芯片有唯一ID和32位定时器,从上电后定时器就开始和主频同步计数,溢出后舍掉高位,那么以这个计数值加上唯一ID做种子,基本可得出完全的随机数了
发表于 2015-8-28 22:01:33 | 显示全部楼层
一直加1有什么不好,
发表于 2015-8-28 22:08:01 | 显示全部楼层
利用蒙特卡罗算法可以生成伪随机数,伪随机数在一定条件下可以与真随机数相媲美
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-9-18 22:50

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表