主题:SysConfig 中讨论的其他器件
工具/软件:
您好、
在使用 CC2745 LaunchPad 和 simple_ble 示例开发工程时、我使用 TRNG.h 创建了一个函数、以获取所需长度的随机字节(lub_size 输入参数)到 laub_Rnd 数组中。 实现的代码 如下所示(我在 SysConfig 中手动添加了 TRNG、名称:CONFIG_TRNG_0、并且没有更改 TRNG syscfg 的任何值)。
#define RANDOM_BYTE_SIZE 4
// Added TRNG_init() immediately after Board_init() inside the main() function in main_freertos.c.
uint8 BLE_F_IF_Get_RandomByte(uint8* laub_Rnd, uint8 lub_size)
{
TRNG_Handle handle;
TRNG_Params params;
int_fast16_t result;
uint8 randomBytesArray[RANDOM_BYTE_SIZE] = {0};
uint8 lub_byte_cnt = 0;
uint8 lub_size_cnt = lub_size;
uint8 lub_copy_len;
TRNG_Params_init(¶ms);
handle = TRNG_open(CONFIG_TRNG_0, ¶ms);
if (!handle) {
// Handle error
return BLE_D_FALSE;
}
while(lub_size_cnt > 0)
{
result = TRNG_getRandomBytes(handle, randomBytesArray, RANDOM_BYTE_SIZE);
if (result != TRNG_STATUS_SUCCESS) {
// Handle error
TRNG_close(handle);
return BLE_D_FALSE;
}
lub_copy_len = (lub_size_cnt >= RANDOM_BYTE_SIZE) ? RANDOM_BYTE_SIZE : lub_size_cnt;
memcpy(&laub_Rnd[lub_byte_cnt], randomBytesArray, lub_copy_len);
lub_byte_cnt += lub_copy_len;
lub_size_cnt -= lub_copy_len;
}
TRNG_close(handle);
return BLE_D_TRUE;
}
#define RANDOM_BYTE_SIZE 4
// Added TRNG_init() immediately after Board_init() inside the main() function in main_freertos.c.
uint8 BLE_F_IF_Get_RandomByte(uint8* laub_Rnd, uint8 lub_size)
{
TRNG_Handle handle;
// TRNG_Params params;
int_fast16_t result;
uint8 randomBytesArray[RANDOM_BYTE_SIZE] = {0};
uint8 lub_byte_cnt = 0;
uint8 lub_size_cnt = lub_size;
uint8 lub_copy_len;
// TRNG_Params_init(¶ms);
// handle = TRNG_open(CONFIG_TRNG_0, ¶ms);
handle = TRNG_open(0, NULL);
if (!handle) {
// Handle error
return BLE_D_FALSE;
}
while(lub_size_cnt > 0)
{
result = TRNG_getRandomBytes(handle, randomBytesArray, RANDOM_BYTE_SIZE);
if (result != TRNG_STATUS_SUCCESS) {
// Handle error
TRNG_close(handle);
return BLE_D_FALSE;
}
lub_copy_len = (lub_size_cnt >= RANDOM_BYTE_SIZE) ? RANDOM_BYTE_SIZE : lub_size_cnt;
memcpy(&laub_Rnd[lub_byte_cnt], randomBytesArray, lub_copy_len);
lub_byte_cnt += lub_copy_len;
lub_size_cnt -= lub_copy_len;
}
TRNG_close(handle);
return BLE_D_TRUE;
}
执行该代码时、在调用 TRNG_getRandomBytes 函数后、LaunchPad 会落入 Exception_handlerSpin () 中。 调试时,我发现在执行 HSMLPF3_waitForResult 函数期间,它在 SemaphoreP_pend() 处属于一个异常。
如果我错过了任何其他设置或使用 API 时出现错误、我很好奇。
任何人都能帮助解决这个问题、或者在 simple_fble 示例中提供有关正确使用 TRNG_getRandomBytes () 的指导吗?
(SDK 版本:8.40.2.01、SysConfig:1.22.0)
谢谢你。