杰发科技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次无重复

相关推荐
帅次14 小时前
系统分析师-信息物理系统分析与设计
stm32·单片机·嵌入式硬件·mcu·物联网·iot·rtdbs
MounRiver_Studio19 小时前
RISC-V IDE MRS2进阶分享(三):MRS语言服务器
ide·mcu·risc-v·嵌入式开发
MounRiver_Studio19 小时前
RISC-V IDE MRS2进阶分享(四):CH32H417双核芯片项目开发
ide·mcu·risc-v·嵌入式开发
EVERSPIN2 天前
符合新国标要求的充电宝低功耗MCU解决方案
单片机·mcu·低功耗mcu
想放学的刺客3 天前
单片机嵌入式试题(第25)嵌入式系统可靠性设计与外设驱动异常处理
stm32·单片机·嵌入式硬件·mcu·物联网
菜鸟的学习日记、3 天前
CPU/MCU/SOC/FPGA概念对比
mcu·cpu·soc
赤~峰3 天前
S32DS for S32 Platform PWM输出实践
mcu
liu_endong4 天前
杰发科技AC7840——PWM触发多路ADC采样
mcu·国产·杰发科技·autochips
猫猫的小茶馆5 天前
【Linux 驱动开发】五. 设备树
linux·arm开发·驱动开发·stm32·嵌入式硬件·mcu·硬件工程
意法半导体STM325 天前
【官方原创】如何基于DevelopPackage开启安全启动(MP15x) LAT6036
javascript·stm32·单片机·嵌入式硬件·mcu·安全·stm32开发