您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [求助]BF产生随机数问题
本帖共有1077个阅读者
发表帖子 发表投票 回复主题
[求助]BF产生随机数问题
blackfin(论坛游民)
blackfin
头衔:社区公民
帮派:无帮无派
帖数:114
金钱:1105
积分:153
注册时间:2011/6/10
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]BF产生随机数问题
如题,一般用srand(time(NULL))后再调用rand()来产生随机数。但是我在BF531上把RTC功能在硬件上关闭了,然后我发现运行后得到的值总是同一个数值。是不是关闭RTC后srand(time(NULL))就无效了?还有在这种情况下如何产生随机数呢?

「该帖子被 blackfin 在 2012-03-01 13:44:53 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2012/3/1 13:44:25
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
没遇到过,应该和RTC没关系,直接调用 rand() 也会产生随机数,你试试看看。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/3/1 13:57:09
blackfin(论坛游民)
blackfin
头衔:社区公民
帮派:无帮无派
帖数:114
金钱:1105
积分:153
注册时间:2011/6/10
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

用rand产生的数每次都是固定的。即你这一次运行是那个值,掉电重启后还是那个值。rand要产生随机数,是要用srand(x)函数,其中x是一个随时间变化的量。但是没有RTC了,不知怎么产生这随时间变化的量了


这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2012/3/1 17:03:54
open_gg(论坛新手)
open_gg
头衔:社区公民
帮派:无帮无派
帖数:40
金钱:394
积分:41
注册时间:2011/6/22
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
i++

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/3/1 19:51:04
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

如产生1~100随机数,你这样写:

#include <stdlib.h>

   do{
    i  = rand();
    }while((i> 100) || (i < 1));



这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/3/1 22:23:35
blackfin(论坛游民)
blackfin
头衔:社区公民
帮派:无帮无派
帖数:114
金钱:1105
积分:153
注册时间:2011/6/10
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

谢谢andy的回答,我专门用你的代码加上将i值直接打印到串口上,通过串口助手查看i值。下载到FLASH上后,多次掉电重启得到的i值都是同一个数。

最后只能用土办法了,没RTC。。。定义一个变量a,在每次开机时将a加1,然后存在EEPROM中。然后用下面代码:

srand(a);

i = rand()%100;

这样每次开机i的值都不一样了。看来rand不随机啊!


这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2012/3/2 11:23:30
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你可以加个函数,第一次调用随即函数,读取值,然后比较第二次调用的是否相同,多调用几次读取看看。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/3/2 21:19:14
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159269 Call, 1 Queries, Processed in 0.031250 second(s),