杰发科技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 进阶封神之路(十八):RTC 实战全攻略 —— 时间设置 + 秒中断 + 串口更新 + 闹钟功能(库函数 + 代码落地)
c++·stm32·单片机·嵌入式硬件·mcu·架构·硬件架构
学嵌入式的小杨同学14 小时前
STM32 进阶封神之路(十七):RTC 实时时钟深度解析 —— 从时钟源到寄存器配置(底层原理 + 面试重点)
c++·stm32·单片机·嵌入式硬件·mcu·硬件架构·pcb
EVERSPIN1 天前
32位MCU副屏方案
mcu·32位mcu
学嵌入式的小杨同学1 天前
STM32 进阶封神之路(十五):DHT11 单总线实战 —— 温湿度检测从时序解析到代码落地(库函数 + 寄存器)
vscode·stm32·单片机·嵌入式硬件·mcu·智能硬件·pcb工艺
学嵌入式的小杨同学2 天前
STM32 进阶封神之路(十六):PWM 波深度实战 —— 定时器输出 + LED 调光 + 电机调速(库函数 + 寄存器)
stm32·单片机·嵌入式硬件·mcu·硬件架构·硬件工程·智能硬件
liu_endong3 天前
RTOS基于7840——任务创建、启动、切换、删除
mcu·rtos·杰发科技·autochips·车规芯片
豆豆饿啦4 天前
【瑞萨AI挑战赛】#01 快速开始
嵌入式硬件·mcu·物联网·iot
进击的小头4 天前
第8篇:PI控制器设计实战演练
c语言·python·mcu·算法
豆豆饿啦4 天前
【瑞萨AI挑战赛】#02 DL任务说明及训练
人工智能·嵌入式硬件·mcu·物联网·iot
学嵌入式的小杨同学6 天前
STM32 进阶封神之路(十二):串口实战全攻略 —— 发送 / 接收 / 中断 /printf 重定向(库函数 + 寄存器)
stm32·单片机·嵌入式硬件·mcu·硬件架构·pcb·嵌入式实时数据库