0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LuatOS开发之4G模组随机数(random)|实战指南

合宙LuatOS 来源:合宙LuatOS 作者:合宙LuatOS 2024-11-30 09:51 次阅读

本次学习的实战是关于4G模组LuatOS开发的随机数示例指南,希望大家有所收获。

一、随机数概述

随机数是专门的随机试验的结果。在统计学的不同技术中需要使用随机数,比如在从统计总体中抽取有代表性的样本的时候,或者在将实验动物分配到不同的试验组的过程中,或者在进行蒙特卡罗模拟法计算的时候等等。产生随机数有多种不同的方法,这些方法被称为随机数生成器。随机数最重要的特性是它在产生时后面的那个数与前面的那个数毫无关系。

根据密码学原理,随机数的随机性检验可以分为三个标准:

1)统计学伪随机性:
统计学伪随机性指的是在给定的随机比特流样本中,1的数量大致等于0的数量,同理,“10”“01”“00”“11”四者数量大致相等.类似的标准被称为统计学随机性.满足这类要求的数字在人类“一眼看上去”是随机的。

2)密码学安全伪随机性:
其定义为,给定随机样本的一部分和随机算法,不能有效的演算出随机样本的剩余部分。

3)真随机性:
其定义为随机样本不可重现.实际上只要给定边界条件,真随机数并不存在,可是如果产生一个真随机数样本的边界条件十分复杂且难以捕捉(比如计算机当地的本底辐射波动值),可以认为用这个方法演算出来了真随机数。

相应的,随机数也分为三类:

1)伪随机数:
满足第一个条件的随机数。

2)密码学安全的伪随机数:
同时满足前两个条件的随机数,可以通过密码学安全伪随机数生成器计算得出。

3)真随机数:
同时满足三个条件的随机数。

我们知道,随机数是通过一些复杂的数学算法得到的,那么 随机种子就是这些随机数的初始值。

一般计算机里面产生的随机数都是伪随机数。伪随机数,也是就一个一直不变的数,所以我们可以通过输入随机种子得到一个初始固定的随机数。

例如,随机数的种子设置为x,产生的随机数序列为: [123, 456,789,...],那么只要输入相同的随机种子x,就能得到相同的随机数序列:[123, 456,789,...],否则就无法还原出随机数序列,也就无法通过密码学安全的随机数生成器计算出随机数序列.

二、演示功能概述

本文通过 Air780 的核心板烧录底层固件和修改LuatOS示例代码,来演示有关随机数的各种API的功能。

三、硬件准备

3.1 Air780E 核心板

使用Air780E核心板,如下图所示:

wKgZomdAs5eATZ5zAAKXMvbgsUA961.png

此核心板的详细使用说明参考:
https://docs.openluat.com/air780e/product/

Air780E产品手册中的《开发板Core_Air780E使用说明》,写这篇文章时最新版本的使用说明为:《开发板Core_Air780E使用说明》;若在使用过程中遇到任何问题,可以直接参考这份使用说明文档。

3.2 SIM

中国大陆环境下,可以上网的sim卡,一般来说,使用移动,电信,联通的物联网卡或者手机卡都行。

3.3 PC 电脑

请准备一台配备USB接口且能够正常上网的电脑。

电脑操作系统为:
WIN10以及以上版本的WINDOWS系统

3.4 数据通信线

TYPE-C口的USB数据线

四、软件环境

4.1 Luatools 工具

要想烧录 LuatOS 固件到 4G 模组中,需要用到的调试工具:Luatools

详细使用说明参考:
Luatools 工具使用说明:
https://docs.openluat.com/Luatools/

Luatools工具集具备以下几大核心功能:

一键获取最新固件:自动连接服务器,轻松下载最新的模组固件.

固件与脚本烧录:便捷地将固件及脚本文件烧录至目标模组中.

串口日志管理:实时查看模组通过串口输出的日志信息,并支持保存功能.

串口调试助手:提供简洁的串口调试界面,满足基本的串口通信测试需求.

Luatools下载之后,新建一个命名为 "Luatools" 的文件夹,将下载的Luatools_v3.exe拷贝或移动到新建的Luatools文件夹内,点击 Luatools_v3.exe 即可运行.

4.2 准备需要烧录的代码

首先要说明一点:脚本代码, 要和固件的soc文件一起烧录。

4.2.1烧录的底层固件文件

底层core下载地址:

LuatOS 固件版本下载地址

https://docs.openluat.com/air780e/luatos/firmware/

wKgaomdAs7OAWbn0AAG8KgWQ3no090.png

Air780E 的底层固件在 Luatools 解压后目录的:

wKgaomdAs8CAfL4fAAFkrdT1kks900.png

4.2.2烧录的脚本代码

首先要下载 Air780 的 LuatOS 示例代码到一个合适的项目目录,
示例代码网站:
https://gitee.com/openLuat/LuatOS-Air780E

下载流程参考下图:

wKgaomdAs9yAFi0OAAYOMOjMtrU035.png

下载的文件解压,找到 LuatOS-Air780E-masterdemocryptomain.lua

如图:

wKgZomdAs-mASOZwAAEKN3pNuNc205.png

正确连接电脑和 4G 模组电路板

使用带有数据通信功能的数据线,不要使用仅有充电功能的数据线;

识别 4G 模组的 BOOT 引脚

在下载之前,要用模组的 BOOT 引脚触发下载, 也就是说,要把 4G 模组的 BOOT 引脚拉到 1.8v,或者直接把 BOOT 引脚和 VDD_EXT 引脚相连.我们要在按下 BOOT 按键时让模块开机,就可以进入下载模式了.

具体到 Air780E 开发板:

1、当我们模块没开机时,按着 BOOT 键然后长按 POW 开机.

2、当我们模块开机时,按着 BOOT 键然后点按重启键即可.

wKgaomdAs_6AZLPBABWY-kphjMc223.png

识别电脑的正确端口

判断是否进入 BOOT 模式:模块上电,此时在电脑的设备管理器中,查看串口设备, 会出现一个端口表示进入了 BOOT 下载模式,如下图所示:

wKgZomdAtAiAO5QxAAK_ZqUu500414.png

新建项目

首先,确保你的 Luatools 的版本,大于等于 3.0.6 版本的.

在 Luatools 的左上角上有版本显示的,如图所示:

wKgZomdAtBGAcK8xAAFD68V1Wv4441.png

Luatools 版本没问题的话, 就点击 LuaTools 右上角的“项目管理测试”按钮,如下图所示:

wKgaomdAtByAfJA1AAD6Mr4Ip0A402.png

这时会弹出项目管理和烧录管理的对话框,可以新建一个项目,如下图:

wKgaomdAtCiAK8T_AAP1TpVypps429.png

开始烧录

选择 Air780E 板子对应的底层 core 和刚改的 main.lua 脚本文件.下载到板子中.

wKgZomdAtDKALqjkAARxt0RBRkA757.png

点击下载后,我们需要进入 BOOT 模式才能正常下载.

如果没进入 BOOT 模式会出现下图情况:

wKgaomdAtD6AHRkrAACYgOgbP0s400.png

进入 BOOT 模式下载,如图:

wKgZomdAtEuAC_Y3AAORe2JnLV0716.png

五、API 说明

5.1 crypto.trng(len)

生成真随机数

参数

wKgaomdAtFeAEjZLAAAsLMoQis4041.png

返回值

wKgZomdAtGCAfhYIAAA2P2taMqs914.png

例子

wKgZomdAtGmAXXBJAAC31M2qrMM029.png

5.2 math.random([n [,m]])

生成伪随机数

参数

wKgZomdAtHOADV9jAABppioKwQo742.png

返回值

wKgaomdAtHyAMrV-AAApyBiuOIs521.png

例子

wKgaomdAtIaAFHR4AAFlAmvC4Eg520.png

5.3 math.randomseed(n)

用法:设置一个整数 n 作为随机序列的种子.

参数

wKgZomdAtJGANizFAAAw3yATWM8002.png

返回值

例子

wKgZomdAtJ2AabzmAAHakBIfGDc958.png

六、功能演示

6.1 修改示例

首先找到 LuatOS-Air780E-masterdemocryptomain.lua 脚本文件,复制一份 main.lua 文件到任意目录,我复制到 D:DesktopLuatOS-Air780E-masterrandom 这个目录。

wKgaomdAtK-AJanAAAHtVjSqTbA639.png

然后修改代码:

wKgZomdAtL6ACKVoAAQX6KS6YYw533.png

6.2 烧录固件

6.2.1正确连接电脑和 4G 模组电路板

使用带有数据通信功能的数据线,不要使用仅有充电功能的数据线.

6.2.2识别 4G 模组的 BOOT 引脚

在下载之前,要用模组的 BOOT 引脚触发下载, 也就是说,要把 4G 模组的 BOOT 引脚拉到1.8V,或者直接把 BOOT 引脚和 VDD_EXT 引脚相连.我们要在按下 BOOT 按键时让模块开机,就可以进入下载模式了.

具体到Air780E开发板:

1、当我们模块没开机时,按着BOOT键然后长按PWR开机;

2、当我们模块开机时,按着 BOOT 键然后点按重启键即可。

wKgaomdAtOWAUZzQABLElOjsQeI936.png

6.2.3识别电脑的正确端口

判断是否进入 BOOT 模式:模块上电,此时在电脑的设备管理器中,查看串口设备, 会出现一个端口表示进入了 BOOT 下载模式,如下图所示:

wKgaomdAtO-AI6olAAK-g-ffR54355.png

一旦进入了boot下载模式,表示硬件连接上已经处于就绪状态,此时就可以使用Luatools工具进行烧录了!

6.2.4 用 Luatools 工具烧录

新建项目

首先,确保你的 Luatools 的版本,大于等于 3.0.6 版本的。

在 Luatools 的左上角上有版本显示的,如图所示:

wKgZomdAtPmAJP4CAAE_UfNqeDk723.png

Luatools 版本没问题的话, 就点击 LuaTOols 右上角的“项目管理测试”按钮,如下图所示:

wKgZomdAtQKAG5KAAAD7ICIp900993.png

这时会弹出项目管理和烧录管理的对话框,可以新建一个项目,如下图:

wKgaomdAtQyAci2WAAP4CaCDZJ0291.png

开始烧录

选择 Air780E 板子对应的底层 core 和刚改的 main.lua 脚本文件,下载到板子中。

wKgZomdAtReANz_FAARHmQAr-fw063.png

点击下载后,我们需要进入 BOOT 模式才能正常下载。

如果没进入 BOOT 模式会出现下图情况:

wKgZomdAtSKAPsRfAACaDUeDsbI451.png

进入 BOOT 模式下载,如图:

wKgaomdAtS-AD4veAAOJCamiKhA231.png

6.3 对应 Log

wKgZomdAtT2AAIkWAAeCfJ-K-DU072.pngwKgaomdAtU2AGKnDAAWXfvwwjOE556.pngwKgZomdAtVyAIEurAAYLOtY0rzM820.pngwKgZomdAtWyANs28AAWMpayuOgg002.pngwKgaomdAtXmALIh0AANprtsAdOY425.png

七、总结

通过本章内容的学习,你可以学习到有关随机数的函数,
例如:
crypto.trng(len)、math.random([n [,m]])、math.randomseed(n) 等函数。

八、扩展

8.1注意事项

需要注意的是,Lua中的随机数算法可能存在一些问题。

例如,math.random(1, 3276700)返回的值最后两位必为 0,这是由于 Lua 本身的随机函数算法决定的。

因此,在使用Lua生成随机数时,应当注意这些潜在的限制,并尽可能通过设置合适的随机种子来避免生成可预测的随机数序列。

通过以上方法,可以在Lua中有效地生成随机数,并确保每次运行程序时都能得到不同的随机数序列,从而满足各种需要随机性的应用场景。

8.2设置随机数种子

为了确保每次运行程序时都能生成不同的随机数序列,需要使用math.randomseed来设置一个随机种子.通常,使用系统时间os.time()作为种子是一个简单而有效的方法:

wKgaomdAtYaAGoCQAAA0DyNt0cw667.png

然而,如果程序在很短的时间内多次运行,可能会发现生成的随机数序列几乎不变.这是因为os.time()返回的是秒级的时间戳,不够精确.为了解决这个问题,可以将时间戳转换为字符串,然后反转并截取高位数字作为种子:

wKgZomdAtZCASLqdAABhK0oXeQg544.png

这种方法通过提高种子数值的变化量,使得即使在短时间内多次运行程序,也能产生更好的伪随机序列。

分享完毕。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 生成器
    +关注

    关注

    7

    文章

    315

    浏览量

    21031
  • 模组
    +关注

    关注

    6

    文章

    1496

    浏览量

    30411
  • 随机数
    +关注

    关注

    0

    文章

    18

    浏览量

    12025
  • LuatOS
    +关注

    关注

    0

    文章

    76

    浏览量

    1961
收藏 人收藏

    评论

    相关推荐

    matlab中产生随机数的十七种方式

    ) 的该分布的随机数。例如: (1) R = random('Normal',0,1,2,4): 生成期望为 0,标准差为 1 的(2 行 4 列)2×
    发表于 01-16 11:05

    【NUCLEO-F412ZG试用体验】硬件随机数

    的,对安全要求比较高的产品这样不安全的。本想分享下随机数,对称加解密和哈希算法。但写完程序才发现F412并不支持对称加解密,F4系列有的型号支持对称加解密如STM32F415xx/417xx
    发表于 01-14 23:47

    什么是随机数

    开发的工程师们应该或多或少都接触过随机数,可能认为它就是一个随机生成的数字嘛,使用时也很简单,只要调用开发语言提供的函数即可。但实际上随机数
    发表于 07-22 09:42

    单片机生成随机数的方法

    大家都知道单片机要生成随机数有一个比较简单的方法,就是用定时器的计数值来生成。但是如果是要求在一定数据范围内生成一个随机数,并且与之前生成的随机数不能重复,那该怎么做?想了个很傻瓜式的方法,用数组
    发表于 01-18 06:07

    全志R128应用开发案例——获取真随机数

    路独立的环形振荡器,由模拟器件电源噪声产生频率抖动,用低频始终重采样,然后进行弹性抽取和熵提取处理,最终输出128bit真随机数。 载入方案 我们使用的开发板是 R128-Devkit,需要开发
    发表于 10-24 17:05

    全志R128应用开发案例——获取真随机数

    路独立的环形振荡器,由模拟器件电源噪声产生频率抖动,用低频始终重采样,然后进行弹性抽取和熵提取处理,最终输出128bit真随机数。 载入方案 我们使用的开发板是 R128-Devkit,需要开发
    发表于 11-13 16:31

    C语言random函数伪随机数产生

    由C语言的stalib.h库里面的random函数可以得到一个0-0x7FFFh的随机数,当然,调用随机数函数之前,是要进行种子的筛选的,以当前的时间参数作为种子,可以使得伪随机数至少
    发表于 08-25 17:56 1.3w次阅读

    产生随机数

    一个自己写的产生随机数的工程
    发表于 12-01 15:45 13次下载

    单片机C语言如何产生随机数

    C语言中有三个通用的随机数发生器,分别为 rand函数、random函数、randomize 函数,但是rand函数产生的并不是真意正义上的随机数,是一个伪随机数,是根据一个
    的头像 发表于 11-26 14:25 7571次阅读

    YIE002开发探索10-随机数生成器

    font color=#ff5555 size=2 >(请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365)YIE002开发探索随机数
    发表于 01-17 13:06 2次下载
    YIE002<b class='flag-5'>开发</b>探索10-<b class='flag-5'>随机数</b>生成器

    4G模组LuatOS开发|iconv字符集转换技术篇

    本次我要讲的是4G模组LuatOS开发的iconv字符集转换,已整理成文,今天便分享供大家。
    的头像 发表于 11-30 09:53 213次阅读
    <b class='flag-5'>4G</b><b class='flag-5'>模组</b><b class='flag-5'>LuatOS</b><b class='flag-5'>开发</b>|iconv字符集转换技术篇

    关于4G模组LuatOS开发:通用加解密函数(crypto)|全攻略

    本次我要说的攻略是关于4G模组LuatOS开发的通用加解密函数,我以我常用的Air780E模组为例子供大家参考。
    的头像 发表于 11-30 09:52 313次阅读
    关于<b class='flag-5'>4G</b><b class='flag-5'>模组</b><b class='flag-5'>LuatOS</b><b class='flag-5'>开发</b>:通用加解密函数(crypto)|全攻略

    解析Air780E模组LuatOS开发随机数(random) 示例篇

    本文主要解析的是低功耗4G模组Air780E的LuatOS开发随机数(random)实例,我以整
    的头像 发表于 11-29 20:23 135次阅读
    解析Air780E<b class='flag-5'>模组</b><b class='flag-5'>LuatOS</b><b class='flag-5'>开发</b>的<b class='flag-5'>随机数</b>(<b class='flag-5'>random</b>) 示例篇

    4G模组Air780E的LuatOS开发位运算(bit)示例

    本文我要说的是低功耗4G模组Air780E的LuatOS开发,关于位运算(bit)示例,我将详细解析分享给大家。
    的头像 发表于 12-02 14:33 175次阅读
    <b class='flag-5'>4G</b><b class='flag-5'>模组</b>Air780E的<b class='flag-5'>LuatOS</b><b class='flag-5'>开发</b><b class='flag-5'>之</b>位运算(bit)示例

    Air780E模组LuatOS开发实战 —— 手把手教你搞定数据打包解包

    本文要说的是低功耗4G模组Air780E的LuatOS开发实战,我将手把手教你搞定数据打包解包。
    的头像 发表于 12-03 11:17 177次阅读
    Air780E<b class='flag-5'>模组</b><b class='flag-5'>LuatOS</b><b class='flag-5'>开发</b><b class='flag-5'>实战</b> —— 手把手教你搞定数据打包解包