如何在c语言的cooja模拟器中获得一个随时间变化的随机数?

Posted

技术标签:

【中文标题】如何在c语言的cooja模拟器中获得一个随时间变化的随机数?【英文标题】:How to have a random number which changes with time in cooja simulator in c language? 【发布时间】:2020-04-03 12:41:50 【问题描述】:

我知道有类似的帖子。我已经尝试了所有这些。但这并不能回答我的问题。我已经尝试过由 c 提供的 srand,但它在 cooja 中不起作用。 我也试过#include "cfs/cfs.h"#include "cfs/cfs-coffee.h"。但这提供了静态随机数。

【问题讨论】:

srand 和 rand 如何在 cooja 中不起作用? @Aplet123 rand 正在工作,但 cooja 中没有 #include。我想使用这个库,因为它使用当前时间作为随机生成器的种子,如下所示:srand(time(0)); 【参考方案1】:

使用node_id初始化随机数生成器。

在 Contiki 中,您应该使用 random_init()random_rand() 而不是 C 库函数:

#include <sys/node-id.h>
/* ... */

random_init(node_id);
unsigned short r = random_rand();

编辑:这将在不同节点上为您提供不同的随机数。如果您想在不同的模拟运行中使用不同的随机数,您可以使用 Cooja mote 平台。它从 simRandomSeed 变量初始化 Contiki RNG,这是模拟的随机种子,您可以每次设置为不同的值(从命令行或在 .csc 文件中)。

如果您不使用 Cooja 微尘,并且不想在不同的模拟运行中分配不同的节点 ID,则唯一的选择是通过外部接口获取微尘上的随机种子,例如通过串口发送并在节点上读取。

【讨论】:

但是节点id是静态的,所以每次都会创建相同的一组随机数。我每次都想要一组不同的随机数。 如果你每次都能说出随机的东西。所以我可以把它放在 random_init 中。 哪个头文件包含 simRandomSeed?当我收到错误消息时:未声明“simRandomSeed”(在此函数中首次使用) 你可以自己声明为extern int simRandomSeed,可惜没有头文件。 ***.com/questions/61010848/… 你能不能也看看这些问题。

以上是关于如何在c语言的cooja模拟器中获得一个随时间变化的随机数?的主要内容,如果未能解决你的问题,请参考以下文章

请教您fluent中UDF编译压力随速度变化

如何使用 Cooja 计算总能耗

在 atmel 工作室中观察状态随时间的变化?

同位素高度不随内容变化

Laravel 会话 ID 随每个请求而变化

单元测试:为了测试值随时间的变化而返回可观察数据以返回主题的模拟服务导致TS抛出TS2339