找回密码
 立即注册
查看: 371|回复: 9

【已解决^o^】STC8H和STC32的随机数是怎么实现真随机的?

[复制链接]
  • TA的每日心情
    开心
    22 分钟前
  • 签到天数: 133 天

    [LV.7]常住居民III

    13

    主题

    145

    回帖

    1353

    积分

    荣誉版主

    积分
    1353
    发表于 2024-1-10 17:44:17 | 显示全部楼层 |阅读模式
    本帖最后由 大明狐 于 2024-1-12 09:55 编辑

    ////////////////////////////////////////////////////////////////

    ////    现象1

    ////////////////////////////////////////////////////////////////


    1704877493576.gif



    最近在STC8H8K64U上用OLED做小动画的时候,用到了随机数,让画面里的雪花和猫头在随机的位置出现。

    程序调用的是 stdlib.h 里的 rand() 函数,而且并没有配置随机数种子。
    结果突然发现,每次给单片机重新上电,雪花和猫头并没有在相同的地方出现,而是每次都不一样。
    然后单独写了一个随机数显示程序试了一下

                    while( i < 8 )
                    {
                                    RandomNum = rand() % 100;
                                    OLED_ShowNum( i % 2 * 64 , i / 2 * 2, RandomNum, 5, 16);
                                    i ++;
                    }

    1704877209819.gif


    结果同样也是每次生成的数列都不一样。
    这跟印象里的随机函数的用法有很大不同。

    同样的程序,再在STC8A、STC32G、STC32F上试了下,同样也是真随机的。
    Screenshot_2024-01-10-17-22-57-884_com.miui.media.jpg Screenshot_2024-01-10-17-23-34-453_com.miui.media.jpg Screenshot_2024-01-10-17-23-14-718_com.miui.media.jpg



    ////////////////////////////////////////////////////////////////
    ////    现象2
    ////////////////////////////////////////////////////////////////



    然后发现,随机数真随机的这四个单片机,用的都是在官方提供的带USB-HID自动下载功能的程序模板的基础上写的程序。
    另外还配置了硬件I2C和硬件SPI。

    1、
    于是尝试把硬件I2C和硬件SPI改回模拟I2C和模拟SPI,
    结果 -> 产生的随机数依旧随机

    2、
    继续尝试把模板里的
    stc32_stc8_usb.h 去掉
    P_SW2 = 0x80;   删掉
    usb_init 和 EA = 1 也都删掉
    结果 -> 产生的随机数依旧随机


    3、
    新建一个空白工程,运行随机数函数
    结果 -> 产生的随机数不随机了





    ////////////////////////////////////////////////////////////////
    ////    疑问
    ////////////////////////////////////////////////////////////////


    所以可以确定是某一个功能,导致了随机函数生成的随机数真的变随机了。
    但是查资料却找不到具体是那个功能产生的这个效果。
    比如可以通过配置哪个寄存器,或者执行哪条命令,可以开启这个真随机数的功能。


    以下是能产生随机数的程序源码
    20240109_1OLED8H_USB下载_硬件IIC_随机数有效.rar (62.27 KB, 下载次数: 21)


    好奇的闹心好几天了,特来求教。









    1704876585505.jpg
    能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
    回复 送花

    使用道具 举报

    该用户从未签到

    566

    主题

    9982

    回帖

    1万

    积分

    管理员

    积分
    14473
    发表于 2024-1-10 17:57:29 | 显示全部楼层
    随机数:
    1, 启动 T0/T1/T2
    2, 轮流 启动  ADC【0 ~ 15】

    3, 读 ADC 的值与读 T0/T1/T2的值 简单 运算

    点评

    不是这个意思老大制造“噪声”来改变随机数种子我能理解。。。 我是说,发现STC8A、8H、32G、32F这几个型号,如果用官方提供的USB-HID自动下载模板工程来写程序,在不通过获取那些随机条件来更改随机数种子seed的情  详情 回复 发表于 2024-1-10 18:07
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    22 分钟前
  • 签到天数: 133 天

    [LV.7]常住居民III

    13

    主题

    145

    回帖

    1353

    积分

    荣誉版主

    积分
    1353
     楼主| 发表于 2024-1-10 18:07:17 | 显示全部楼层
    神农鼎 发表于 2024-1-10 17:57
    随机数:
    1, 启动 T0/T1/T2
    2, 轮流 启动  ADC【0 ~ 15】

    不是这个意思老大制造“噪声”来改变随机数种子我能理解。。。

    我是说,发现STC8A、8H、32G、32F这几个型号,如果用官方提供的USB-HID自动下载模板工程来写程序,在不通过获取那些随机条件来更改随机数种子seed的情况下,就能每次上电都产生不一样的随机数;而用空白模板写,却每次都一样。
    但是找不到原因是什么。。。。。
    能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 12:28
  • 签到天数: 97 天

    [LV.6]常住居民II

    12

    主题

    61

    回帖

    564

    积分

    高级会员

    积分
    564
    发表于 2024-1-10 23:53:48 来自手机 | 显示全部楼层
    我在抖音上刷到你了,还给你点赞了
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    擦汗
    昨天 07:31
  • 签到天数: 183 天

    [LV.7]常住居民III

    152

    主题

    214

    回帖

    1858

    积分

    金牌会员

    积分
    1858
    发表于 2024-1-11 07:53:28 | 显示全部楼层
    8[GLDELPB_83H919OOAO4.png


    设置了这个的原因,xdata上电未初始化

    点评

    果然是这个原因!!!太棒了!!! 在STC8G单片机上试了下也有效果!  详情 回复 发表于 2024-1-11 12:03
    1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    22 分钟前
  • 签到天数: 133 天

    [LV.7]常住居民III

    13

    主题

    145

    回帖

    1353

    积分

    荣誉版主

    积分
    1353
     楼主| 发表于 2024-1-11 11:15:34 | 显示全部楼层
    yywf2021544699 发表于 2024-1-10 23:53
    我在抖音上刷到你了,还给你点赞了

    能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    22 分钟前
  • 签到天数: 133 天

    [LV.7]常住居民III

    13

    主题

    145

    回帖

    1353

    积分

    荣誉版主

    积分
    1353
     楼主| 发表于 2024-1-11 12:03:06 | 显示全部楼层
    QQ624353765 发表于 2024-1-11 07:53
    设置了这个的原因,xdata上电未初始化

    果然是这个原因!!!太棒了!!!

    在STC8G单片机上试了下也有效果!



    能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    2

    主题

    26

    回帖

    356

    积分

    中级会员

    积分
    356
    发表于 2024-1-11 12:17:40 | 显示全部楼层
    yywf2021544699 发表于 2024-1-10 23:53
    我在抖音上刷到你了,还给你点赞了

    B站上也有。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 175 天

    [LV.7]常住居民III

    34

    主题

    326

    回帖

    745

    积分

    高级会员

    积分
    745
    发表于 2024-1-11 15:11:21 | 显示全部楼层
    伪随机数就好了,用个计时器不断地加,然后做加减乘除就好了,没有真随机

    点评

    又不是为了应用能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐,是我的荣幸。  详情 回复 发表于 2024-1-11 16:25
    纸上得到终觉浅,绝知此事要躬行。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    22 分钟前
  • 签到天数: 133 天

    [LV.7]常住居民III

    13

    主题

    145

    回帖

    1353

    积分

    荣誉版主

    积分
    1353
     楼主| 发表于 2024-1-11 16:25:12 | 显示全部楼层
    飞捷 发表于 2024-1-11 15:11
    伪随机数就好了,用个计时器不断地加,然后做加减乘除就好了,没有真随机 ...

    又不是为了应用能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐,是我的荣幸。
    能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-6-17 14:11 , Processed in 0.088592 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表