杰发科技AC7840——真随机数和伪随机数

0. 真随机数和伪随机数

1. CSE_DRV_InitRNG

CSE_DRV_InitRNG****初始化真随机数生成器

2. CSE_DRV_GenerateRND

CSE_DRV_GenerateRND****生成一个128bit真随机数,即16bytes

3. 随机数的重复概率

实测非常小,至少1000w次不会出现同一个值

cpp 复制代码
unsigned int count = 0;
int main(void)
{
    status_t Res;
    uint8_t RNG[16] = {0x00};
    uint8_t OldRNG[16] = {0x00};

    SystemClock_Config();
    InitDebug();
    printf("demo start...\r\n");

    FLASH_DRV_Init(&Flash1_InitConfig, &flash_Config);

    if (flash_Config.flexRAMSize == 0)
    {
        FLASH_DRV_UnlockCtrl();
        Res = FLASH_DRV_Partition(&flash_Config, 0x00, 0x03, 0);
        printf("FLASH_DRV_Partition,Res = 0x%x \r\n", Res);
        NVIC_SystemReset();
    }

    /*initialize CSE*/
    CSE_DRV_Init(&cse_State);

    /*initialize RNG*/
    Res = CSE_DRV_InitRNG();
    printf("CSE_DRV_InitRNG,Res = 0x%x \r\n", Res);

    Res = CSE_DRV_GenerateRND(OldRNG);
    unsigned int countflag = 1000000;
		unsigned int addTimes = 0;
    while (1)
    {
        Res = CSE_DRV_GenerateRND(RNG);

        for (int i = 0; i < 16; i++)
        {

            if (OldRNG[i] == RNG[i])
            {
                count++;
            }
            if (count >= 15)
            {
								printf("RNG: ");
                Numpy_Put(RNG, 16);
            }
        }
        count = 0;
        countflag--;
        if (countflag == 0)
        {
						addTimes++;
						printf("RNG 1000000 times :  addTimes %d \r\n",addTimes);
            countflag = 1000000;
        }
    }
}

4. CSE_DRV_ExtendSeed

此过程应该就是伪随机数了,因为人为操作了

5. 重复情况测试结果

没有扩展种子的测试结果

100 万次×130=130000000(即 1.3 亿)次没有重复值

100w次太快了,6s就算完了

改成1000w次

大概1分钟打印一次

加了扩展种子之后和没加的一起计时

从打印结果来看,加了扩展种子,计算1000w次大约1min40s,没加扩展种子大概1min4s

测试到今早,没有重复值

扩展种子之后413*1000w次无重复

没扩展种子的643*1000w次无重复

相关推荐
电子科技圈16 小时前
赋能高端音频功能促进多样化设备创新——XMOS USB Audio平台实现四大功能升级
人工智能·mcu·音视频·智能家居·边缘计算·语音识别·智能硬件
笨笨饿19 小时前
42_C语言查找算法
linux·服务器·c语言·人工智能·mcu·学习方法·嵌入式软件
匿名了匿名了2 天前
直流无刷与直流有刷电机
stm32·嵌入式硬件·mcu
笨笨饿3 天前
29_Z变换在工程中的实际意义
c语言·开发语言·人工智能·单片机·mcu·算法·机器人
R6bandito_5 天前
自实现FLASH读取函数中的隐式类型转换bug踩坑记录
c语言·开发语言·经验分享·stm32·单片机·mcu·bug
Redemption5 天前
嵌软面试每日一阅----freeRTOS(三)
stm32·单片机·嵌入式硬件·mcu·物联网·面试·51单片机
学嵌入式的小杨同学5 天前
STM32 进阶封神之路(三十九)FreeRTOS 临界区、挂起 / 删除、钩子函数、调度底层原理|从应用到内核深度解析
c++·stm32·单片机·嵌入式硬件·mcu·硬件架构·pcb
Dotrust东信创智5 天前
轻量化、低成本、高可靠:MCU控制器引领汽车执行单元升级
mcu·汽车电子
苏灵凯6 天前
智能环境监测终端全栈设计:从单片机到微信小程序,手把手搞定!
单片机·嵌入式硬件·mcu·物联网·微信小程序·小程序·蓝牙模块
学嵌入式的小杨同学7 天前
STM32 进阶封神之路(三十四):TFT LCD 深度全解 —— 显示原理、ILI9341 控制器、8080 并行接口与底层驱动体系
vscode·stm32·单片机·嵌入式硬件·mcu·智能硬件·嵌入式实时数据库