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

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

3天内不再提示

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

青山老竹农 来源:jf_82863998 作者:jf_82863998 2024-11-29 20:23 次阅读

本文主要解析的是低功耗4G模组Air780E的LuatOS开发随机数(random)实例,我以整理成文分享给大家。

一、随机数概述

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

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

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核心板,如下图所示:

wKgZO2dJrYaAJumCAAL7d1pCzSg077.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/

wKgZPGdJraWAe_UeAAIIOApIxiA073.png

Air780E 的底层固件在 Luatools 解压后目录的:
LuatOS-SoC_V1112_EC618_FULL.soc

wKgZO2dJrbCAASXqAAGZArfbz4Y379.png

4.2.2烧录的脚本代码

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

下载流程参考下图:

wKgZPGdJrb-AIkvOAAciwdIsgzc461.png

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

如图:

wKgZO2dJrdCALcXDAAE2PI6ZZZ0460.png

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

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

识别 4G 模组的 BOOT 引脚

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

具体到 Air780E 开发板:

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

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

wKgZPGdJreeAD6gmABY8QxhqetA960.png

识别电脑的正确端口

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

wKgZO2dJrfOAIyPuAANDDsWhjOc412.png

新建项目

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

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

wKgZPGdJrf2AfABrAAF2YR5meK8311.png

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

wKgZO2dJrgqAYZsZAAEoVek3d8I295.png

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

wKgZPGdJrhaABwffAAS0DlqDr9E950.png

开始烧录

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

wKgZPGdJriGAEvleAAVMZaTobvM875.png

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

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

wKgZO2dJriyAEOC_AAC6Vyeod8M871.png

进入 BOOT 模式下载,如图:

wKgZPGdJrj6AMupxAAQ644Kk8Bs627.png

五、API 说明

5.1 crypto.trng(len)

生成真随机数

参数

wKgZO2dJrk-Acx4uAAAyQc8i_7Y634.png

返回值

wKgZPGdJrleAB0xVAAA-0rEG6rs743.png

例子

wKgZO2dJrmKAIM_aAADHe4NPhgM858.png

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

生成伪随机数

参数

wKgZO2dJrm2AI1UfAAB2yhO0QPA565.png

返回值

wKgZPGdJrnaAVqW7AAAv56_HrrI412.png

例子

wKgZO2dJroCAC8UmAAGhj8dVjHA434.png

5.3 math.randomseed(n)

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

参数

wKgZO2dJromABhkWAAA7v1Eb1fA827.png

返回值

例子

wKgZPGdJrpSACI_dAAIuPr_4hxI154.png

六、功能演示

6.1 修改示例

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

wKgZO2dJrqWAKuzmAAI_E9GmJd0416.png

然后修改代码:

wKgZO2dJruGAL694AAS1k0X-Cqc931.pngwKgZPGdJru6ALWdVAAAmA14fPi4147.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 键然后点按重启键即可。

wKgZPGdJrwKACh4fABthVYVuJwA277.png

6.2.3识别电脑的正确端口

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

wKgZO2dJrw2AaW1DAANG0pXrl9A544.png

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

6.2.4 用 Luatools 工具烧录

新建项目

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

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

wKgZO2dJrxuAe06cAAF6xYUCdzw679.png

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

wKgZO2dJrySADzT7AAEtB43gxgM681.png

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

wKgZPGdJry-AO1XlAAS4qWi5s3g705.png

开始烧录

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

wKgZO2dJr0GAGsGOAAUY3xdpfWo827.png

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

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

wKgZPGdJr0yAVzVYAAC3c6KkzYE932.png

进入 BOOT 模式下载,如图:

wKgZPGdJr12ATxVZAAQ1vAjpw9s199.png

6.3 对应 Log

wKgZO2dJr2-ASGyEAAjld6otkws003.pngwKgZPGdJsdCAFUDzAAYbeg6UGCs049.pngwKgZO2dJseaAacz2AAaI8PWhb-g546.pngwKgZPGdJsfqADYvVAAXq8r0zYqc603.pngwKgZO2dJsgqAVRhxAAXhLFpijj4100.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()作为种子是一个简单而有效的方法:

wKgZO2dJshqAS2jfAAA6XHXXX5k380.png

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

wKgZO2dJsiWAGsdTAABzp3EINog759.png

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

分享完毕

审核编辑 黄宇

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

    关注

    2909

    文章

    44704

    浏览量

    374013
  • LuatOS
    +关注

    关注

    0

    文章

    76

    浏览量

    1964
收藏 人收藏

    评论

    相关推荐

    【合宙Air780E开发板趣味应用】Air780E开发板方言打麻将

    合宙10月份推出的Air780E模组,是一款LTE Cat.1 bis通信模块,采用移芯EC618平台,支持4G全网通。合宙也推出了相应的开发板,别看开发板身材小,价格低,但是身手不差
    发表于 01-04 13:45

    基于Air780E的远程报警器方案

    恒博A780E-S智能远程报警器方案板,基于合宙低功耗4G Cat.1模组Air780E设计,支持LuatOS二次开发,无需额外添加单片机;
    发表于 03-01 11:51 1898次阅读

    LuatOS全新版本发布,支持Air780E/Air600E系列Cat.1模组(EC618平台)

    ,合宙全新发布LuatOS-SoC@EC618V1001最新固件,适用基于移芯EC618平台设计研发的Air780E/Air600E系列低功耗4GCat.1模组。最
    的头像 发表于 12-05 10:16 1858次阅读
    <b class='flag-5'>LuatOS</b>全新版本发布,支持<b class='flag-5'>Air780E</b>/<b class='flag-5'>Air600E</b>系列Cat.1<b class='flag-5'>模组</b>(EC618平台)

    合宙Air780E硬件设计手册02

    合宙低功耗4G模组Air780E硬件设计介绍
    的头像 发表于 09-06 12:02 501次阅读
    合宙<b class='flag-5'>Air780E</b>硬件设计手册02

    合宙4G模组Air780E开发板使用手册

    合宙开发Air780E使用说明
    的头像 发表于 09-09 18:22 738次阅读
    合宙4G<b class='flag-5'>模组</b><b class='flag-5'>Air780E</b><b class='flag-5'>开发</b>板使用手册

    RNDIS网卡应用看这篇!合宙Air780EP低功耗4G模组AT开发示例

    Air780EP是合宙的低功耗4G模组之一,支持全系列的AT指令以及LuatOS脚本二次开发。 本文应各位大佬邀请,特别讲解Air780E
    的头像 发表于 09-30 06:59 595次阅读
    RNDIS网卡应用看这篇!合宙<b class='flag-5'>Air780</b>EP低功耗4G<b class='flag-5'>模组</b>AT<b class='flag-5'>开发</b><b class='flag-5'>示例</b>

    Air780E模组AT指令下的MQTT应用:技术指南

    今天我要讲的是Air780E模组AT指令下的MQTT应用,希望对大家有所帮助。
    的头像 发表于 11-07 14:02 382次阅读
    <b class='flag-5'>Air780E</b><b class='flag-5'>模组</b>AT指令下的MQTT应用:技术指南

    LuatOS与ADC:Air780E模组开发的新篇章!

    今天我们学习的是Air780E模组LuatOS开发之ADC应用,希望能帮助到大家。
    的头像 发表于 11-07 14:12 278次阅读
    <b class='flag-5'>LuatOS</b>与ADC:<b class='flag-5'>Air780E</b><b class='flag-5'>模组</b><b class='flag-5'>开发</b>的新篇章!

    Air780E模组的ADC之旅 LuatOS开发实例

    今天学习一个新的示例,关于Air780E模组LuatOS开发的ADC应用实例,希望大家有所收获。
    的头像 发表于 11-11 09:33 219次阅读
    <b class='flag-5'>Air780E</b><b class='flag-5'>模组</b>的ADC之旅  <b class='flag-5'>LuatOS</b><b class='flag-5'>开发</b>实例

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

    本次学习的实战是关于4G模组LuatOS开发随机数示例指南,希望大家有所收获。
    的头像 发表于 11-30 09:51 224次阅读
    <b class='flag-5'>LuatOS</b><b class='flag-5'>开发</b>之4G<b class='flag-5'>模组</b><b class='flag-5'>随机数</b>(<b class='flag-5'>random</b>)|实战指南

    Air780E模组LuatOS开发的位运算(bit)教程

    本次我们要学习的是4G模组Air780ELuatOS开发,关于位运算(bit)教程分享给大家。
    的头像 发表于 11-26 11:58 170次阅读
    <b class='flag-5'>Air780E</b><b class='flag-5'>模组</b><b class='flag-5'>LuatOS</b><b class='flag-5'>开发</b>的位运算(bit)教程<b class='flag-5'>篇</b>!

    低功耗模组Air780E的AT指令:FTP示例

    本文说的是关于4G模组AT指令的FTP示例,以Air780E为例,希望大家有所收获。
    的头像 发表于 11-30 09:40 209次阅读
    低功耗<b class='flag-5'>模组</b><b class='flag-5'>Air780E</b>的AT指令:FTP<b class='flag-5'>示例</b>!

    4G模组Air780ELuatOS开发:关于通用加解密函数(crypto)教程!

    本次我将讲解低功耗4G模组Air780ELuatOS开发,关于通用加解密函数(crypto)教程分享给大家。我会从加解密概述、演示功能概述、硬件准备、软件环境、API 说明等全面讲述
    的头像 发表于 12-01 15:50 221次阅读
    4G<b class='flag-5'>模组</b><b class='flag-5'>Air780E</b>的<b class='flag-5'>LuatOS</b><b class='flag-5'>开发</b>:关于通用加解密函数(crypto)教程!

    4G模组Air780ELuatOS开发之位运算(bit)示例

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

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

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