fighter_ck 发表于 2015-6-18 18:34:39

怎么获得随机数呢

最近在单片机上做随机数,用随机数作为种子,再去获取随机数,不知这样可行吗?
while(1)
{
        sran(ran());
        printf("%d\n",ran());

}

prow 发表于 2015-6-18 18:50:21

用单片机一个AD口采浮空电压,然后当成随机数

fighter_ck 发表于 2015-6-18 19:00:10

prow 发表于 2015-6-18 18:50
用单片机一个AD口采浮空电压,然后当成随机数

AD脚刚好被用完了,你还有什么好的办法吗{:3_52:}

lcofjp 发表于 2015-6-18 19:03:06

用上了也可以啊,只要有AD,采一批数,取最低位不就出来了。

loohoo0302 发表于 2015-6-18 19:05:11

随机性比楼上更进一步:AD口采样噪声,进行多次采样末位组合,例如:8位AD,采样4次,取末2位,组合成8BIT。

fighter_ck 发表于 2015-6-18 19:07:50

lcofjp 发表于 2015-6-18 19:03
用上了也可以啊,只要有AD,采一批数,取最低位不就出来了。

我要产生3个unsigned char 数,那怎么办?{:3_60:}

lcofjp 发表于 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

quner 发表于 2015-6-18 20:26:58

磊磊映画 发表于 2015-6-18 19:33
get rtc time

这个赞一个 +1

hzpj001 发表于 2015-6-18 20:38:56

磊磊映画 发表于 2015-6-18 19:33
get rtc time

这个方法好.

磊磊映画 发表于 2015-6-18 20:50:12

hzpj001 发表于 2015-6-18 20:38
这个方法好.

1.我也是跟我们经理学的
2.随机数唯一就好
3.u32位的应该挺大了

磊磊映画 发表于 2015-6-18 20:50:31

quner 发表于 2015-6-18 20:26
这个赞一个 +1

1.我也是跟我们经理学的
2.随机数唯一就好
3.u32位的应该挺大了

ruan18278816371 发表于 2015-6-18 20:53:14

KEIL库函数有产生随机数的函数的

12tangyang12 发表于 2015-6-18 21:32:05

据说库函数产生的是伪随机数

dellric 发表于 2015-6-18 21:50:16

不行,每次出来的初始数据是一样的。如果是MCS51的话,在startup.asm里面写一个代码,复位后,把128个RAM的数据求和,取8位数据作为种子。MCS51复位后RAM区的数据是随机的。

quner 发表于 2015-6-18 22:13:05

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

确实如此,谢谢分享

chenchaoting 发表于 2015-6-18 22:30:14

有专用芯片,北京一家公司的

dawanpi 发表于 2015-6-18 23:04:35

不说什么单片机就是耍流氓,stm32f4还内置随机数发生器呢。

fighter_ck 发表于 2015-6-19 00:12:26

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

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

hz_luping 发表于 2015-6-19 00:35:57

楼主是要写dali协议?

maqian 发表于 2015-6-19 08:37:26

c语言库里有一个专门的随机数函数,我用过还行啊。

腹黑男 发表于 2015-6-19 08:42:50

maqian 发表于 2015-6-19 08:37
c语言库里有一个专门的随机数函数,我用过还行啊。

前面已经说过那个并不是真正的随机的

wq_601840968 发表于 2015-6-19 08:58:37

stm32 内部有rng

steaven2000 发表于 2015-6-24 11:34:52

本帖最后由 steaven2000 于 2015-6-24 11:36 编辑

http://www.amobbs.com/forum.php?mod=viewthread&tid=3980408&highlight=%E9%9A%8F%E6%9C%BA%E6%95%B0

3DA502 发表于 2015-6-24 13:58:26

本帖最后由 3DA502 于 2015-6-24 14:01 编辑

存到ROM里面,如果ROM足够大

steaven2000 发表于 2015-6-25 15:58:56

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

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

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

xld826 发表于 2015-7-8 17:11:28

ADC口接一个5%精度的电阻,世界上没有完全一样的电阻。

xld826 发表于 2015-7-8 17:12:50

ruan18278816371 发表于 2015-6-18 20:53
KEIL库函数有产生随机数的函数的

那个在编译生成时候就是一个随机的固定值,不是随机

lingdianhao 发表于 2015-7-8 17:20:59

腹黑男 发表于 2015-6-19 08:42
前面已经说过那个并不是真正的随机的

随机数的生成方法有很多种,什么叫"真正的随机数"?,难道用10个色子来仍才算?

ylei12 发表于 2015-7-8 21:14:27

一个变量在主程序里一直加1,需要随机数时读取这个变量,这样产生的数是不是随机数?

fighter_ck 发表于 2015-7-10 18:51:39

ylei12 发表于 2015-7-8 21:14
一个变量在主程序里一直加1,需要随机数时读取这个变量,这样产生的数是不是随机数? ...

不是吧,这样太有规律了

NJ8888 发表于 2015-7-10 19:56:47

fighter_ck 发表于 2015-7-10 18:51
不是吧,这样太有规律了

systick读取两次24+24位混着用

ylei12 发表于 2015-7-10 20:13:10

fighter_ck 发表于 2015-7-10 18:51
不是吧,这样太有规律了

一个32位的无符号变量有4294967296种状态,想凑一次对,不容易吧

jathenal 发表于 2015-7-11 19:09:12

如果芯片有唯一ID和32位定时器,从上电后定时器就开始和主频同步计数,溢出后舍掉高位,那么以这个计数值加上唯一ID做种子,基本可得出完全的随机数了

ZHAOBO10375 发表于 2015-8-28 22:01:33

一直加1有什么不好,

jamesdeep 发表于 2015-8-28 22:08:01

利用蒙特卡罗算法可以生成伪随机数,伪随机数在一定条件下可以与真随机数相媲美
页: [1]
查看完整版本: 怎么获得随机数呢