我使用trng_acquire(uint8_t* rnd_no)函数。我不能每次都得到随机数。下面是我的示例代码。
空白aes_test(空白)
{
uint8_t random_number [16];
trng_acquire (random_number);//随机数成功接收
memcpy (aes_env.aes_key。4、4、16);
rwip_schedule ();
trng_acquire (random_number);//随机数成功接收
aes_init (false, NULL);
aes_operation(key, sizeof(key),明文,sizeof(明文),aes_out, sizeof(aes_out), 0, NULL, 0);
rwip_schedule ();
trng_acquire (random_number);//不能接收随机数
aes_operation(key, sizeof(key), aes_out, sizeof(Plaintext), aes_result, sizeof(aes_out), 1, aes_done_cb, 0);
rwip_schedule ();
trng_acquire (random_number);//不能接收随机数
}
当我调试上面的代码,我能够产生随机数的前两次。在接下来的两个试验中,我没有收到随机数。表示random_number变量未升级。
所以,现在我使用rand()函数,它工作得很好。
但我还是想知道,在上面的例子中,为什么我没有每次都得到一个新的随机数。
设备:
嗨Ankit,
trng_aquire的目的()只有种子随机函数,而不是直接使用,原因您不能使用trng_aquire()直接是为了获得从580年一个随机数SDK使用无线电模块和通过改变无线电寄存器的值获取随机数,因此,正如您可以想象的那样,反复这样做是不建议的,因为如果BLE中断发生时,无线电是在一个未定义的状态,那么这将会有意想不到的结果。正确的用法是通过rand()函数。现在关于值没有在调试期间更新,我认为这与你在调试模式,因为我试图重复调用多次trng_aquire(),但我总是得到一个新的生成的数字值和打印它的事实有关。问题发生时,试图有一个BLE操作(例如广告),并运行trng_aquire()函数,如前所述,将有意外的结果,至少在我的方面,我总是得到0时,一个随机值,不能找到BLE设备。总之,不要使用trng_aquire()函数来生成随机数据,而是使用rand()函数。
由于MT_dialog