想产生一个随机数

[复制链接]
 楼主| qq604847322 发表于 2014-7-25 17:21 | 显示全部楼层 |阅读模式
srand((unsigned int)time(0));
int n = rand();
一直提示  error[499];0.undefined symbol:time_(1826.obj)
能帮忙解决下吗
lcofjp 发表于 2014-7-25 17:53 | 显示全部楼层
估计是没有time函数的定义。
 楼主| qq604847322 发表于 2014-7-26 09:08 | 显示全部楼层
time.h里面有看到定义   会不会是因为芯片没有系统时间
 楼主| qq604847322 发表于 2014-7-26 09:09 | 显示全部楼层
lcofjp 发表于 2014-7-25 17:53
估计是没有time函数的定义。

time.h里面有看到定义   会不会是因为芯片没有系统时间
yklstudent 发表于 2014-7-26 09:31 | 显示全部楼层
qq604847322 发表于 2014-7-26 09:09
time.h里面有看到定义   会不会是因为芯片没有系统时间

你以为是电脑呢 还系统时间
你不写 芯片哪来的系统时间
 楼主| qq604847322 发表于 2014-7-26 09:44 | 显示全部楼层
yklstudent 发表于 2014-7-26 09:31
你以为是电脑呢 还系统时间
你不写 芯片哪来的系统时间

pic16f1826  可以写系统时间吗?
MOn51 发表于 2014-7-27 15:18 | 显示全部楼层
如果有AD,你就用AD检测一个零票值做随机数的种子。
yewuyi 发表于 2014-7-28 09:09 | 显示全部楼层
MOn51 发表于 2014-7-27 15:18
如果有AD,你就用AD检测一个零票值做随机数的种子。

那你估计很希望,MCHP的AD零漂值还是比较稳定的。
yewuyi 发表于 2014-7-28 09:10 | 显示全部楼层
qq604847322 发表于 2014-7-26 09:44
pic16f1826  可以写系统时间吗?

这要问你自己的代码啊。
MOn51 发表于 2014-7-28 09:19 | 显示全部楼层
yewuyi 发表于 2014-7-28 09:09
那你估计很希望,MCHP的AD零漂值还是比较稳定的。

用AD检测电源的零飘,噪音都是有的。直取第8位即可!
yewuyi 发表于 2014-7-28 09:25 | 显示全部楼层
MOn51 发表于 2014-7-28 09:19
用AD检测电源的零飘,噪音都是有的。直取第8位即可!

有按键的,直接采集按键触发时的计数器数字做种子,因为每次按键触发事件是随机的,种子也就随机了。

ADC就要浪费一路了。

而且ADC的话,虽然有波动,但终究波动值比较小,人为压缩了随机的范围。
yewuyi 发表于 2014-7-28 09:25 | 显示全部楼层
MOn51 发表于 2014-7-28 09:19
用AD检测电源的零飘,噪音都是有的。直取第8位即可!

有按键的,直接采集按键触发时的计数器数字做种子,因为每次按键触发事件是随机的,种子也就随机了。

ADC就要浪费一路了。

而且ADC的话,虽然有波动,但终究波动值比较小,人为压缩了随机的范围。
MOn51 发表于 2014-7-28 09:32 | 显示全部楼层
产生随机数,有时是上电就要产生。按键计数必须要人为干预,还可以用噪音二极管(普通二极管效果也可以),电路复杂了。
ADC采集的漂移,如果觉得范围小,可以连续采集4次,合并得到32位。
 楼主| qq604847322 发表于 2014-7-28 09:55 | 显示全部楼层
yewuyi 发表于 2014-7-28 09:25
有按键的,直接采集按键触发时的计数器数字做种子,因为每次按键触发事件是随机的,种子也就随机了。

AD ...

有按键的  这办法操作比较简单  谢谢啊
yewuyi 发表于 2014-7-28 09:57 | 显示全部楼层
MOn51 发表于 2014-7-28 09:32
产生随机数,有时是上电就要产生。按键计数必须要人为干预,还可以用噪音二极管(普通二极管效果也可以), ...

呵呵,采集的白噪声被多次累加后,数值波动范围更加小。
 楼主| qq604847322 发表于 2014-7-28 10:00 | 显示全部楼层
MOn51 发表于 2014-7-27 15:18
如果有AD,你就用AD检测一个零票值做随机数的种子。

没用AD  谢谢回复:handshake
 楼主| qq604847322 发表于 2014-7-28 10:00 | 显示全部楼层
MOn51 发表于 2014-7-27 15:18
如果有AD,你就用AD检测一个零票值做随机数的种子。

没有AD    谢谢回复:handshake
MOn51 发表于 2014-7-28 10:14 | 显示全部楼层
yewuyi 发表于 2014-7-28 09:57
呵呵,采集的白噪声被多次累加后,数值波动范围更加小。

为何要累加?用:移位或放到32位数据上面。 AD0<<24 | AD1<<16 | AD2<<8 | AD3;
yewuyi 发表于 2014-7-28 10:16 | 显示全部楼层
MOn51 发表于 2014-7-28 10:14
为何要累加?用:移位或放到32位数据上面。 AD0

这个我没有推导,但直觉好像还是有些问题。
MOn51 发表于 2014-7-28 10:23 | 显示全部楼层
yewuyi 发表于 2014-7-28 10:16
这个我没有推导,但直觉好像还是有些问题。

这种方法我们用了快12年了。一直好用,如果觉得数据宽度还不够,可以整合到48位,64位。现在在STM32F405,我们还加入了MD5算法处理。pic的定时只有8位 或16位,数据宽度不够,关键是PIC的定时器少了,没有多余的定时器来做这个。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

16

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部