随机数生成器示例代码

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
2个帖子/ 0新
最后一篇
ankit.
离线
最后一次露面:3个月3周前
加入:2017-05-24 07:42
随机数生成器示例代码

我使用TRNG_ACQUIRE(UINT8_T * RND_NO)函数。我每次都无法获得随机数。以下是我的示例代码。

void aes_test(void)
{
uint8_t random_number [16];

trng_acquire(random_number);//成功收到的随机数
memcpy(aes_env.aes_key.iv,iv,16);
Rwip_schedule();
trng_acquire(random_number);//成功收到的随机数
aes_init(false,null);
aes_operation(key,sizeof(keyof),plaintext,sizeof(plaintext),aes_out,sizeof(aes_out),0,null,0);
Rwip_schedule();
trng_acquire(random_number);//无法接收随机数
aes_operation(key,sizeof(keyof),aes_out,sizeof(plaintext),aes_result,sizeof(aes_out),1,aes_done_cb,0);
Rwip_schedule();
trng_acquire(random_number);//无法接收随机数
}

当我调试以上代码时,我能够生成前两次的随机数。在接下来的两个试验中,我没有收到随机数。意味着random_number变量未升级。

所以,现在我使用rand()函数,它正在运行正常。

但我仍然想知道,在上面的例子中,为什么我每次都没有获得新的随机数。

设备:
mt_dialog.
离线
最后一次露面:3个月1周前
职员
加入:2015-06-08 11:34
嗨ankit,

嗨ankit,

trng_aquire()的目的只是为了种子随机函数而不是直接使用,你不能使用trng_aquire()的原因直接是为了获得580,SDK使用无线电模块通过改变它获取随机数的无线电寄存器的值,因此可以想象一遍又一遍地,没有建议,如果在收音机处于未定义状态时发生BLE中断,那么这将意外结果。正确使用是通过rand()函数。现在,在调试期间没有更新值,我认为这与您在调试模式中的事实中有关,因为我尝试多次调用trng_aquire(),但我始终获得新的生成的数字值并打印它。在尝试具有BLE操作(例如,广告)并运行trng_aquire()函数时出现此问题,如上所述将具有意想不到的结果,至少在我的侧面时,我始终在随机值时得到零,无法找到BLE设备。所以总结,不要使用trng_aquire()函数来生成随机数据,但rand()函数。

谢谢mt_dialog.