本次學(xué)習(xí)的實(shí)戰(zhàn)是關(guān)于4G模組LuatOS開發(fā)的隨機(jī)數(shù)示例指南,希望大家有所收獲。
一、隨機(jī)數(shù)概述
隨機(jī)數(shù)是專門的隨機(jī)試驗(yàn)的結(jié)果。在統(tǒng)計(jì)學(xué)的不同技術(shù)中需要使用隨機(jī)數(shù),比如在從統(tǒng)計(jì)總體中抽取有代表性的樣本的時(shí)候,或者在將實(shí)驗(yàn)動(dòng)物分配到不同的試驗(yàn)組的過程中,或者在進(jìn)行蒙特卡羅模擬法計(jì)算的時(shí)候等等。產(chǎn)生隨機(jī)數(shù)有多種不同的方法,這些方法被稱為隨機(jī)數(shù)生成器。隨機(jī)數(shù)最重要的特性是它在產(chǎn)生時(shí)后面的那個(gè)數(shù)與前面的那個(gè)數(shù)毫無(wú)關(guān)系。
根據(jù)密碼學(xué)原理,隨機(jī)數(shù)的隨機(jī)性檢驗(yàn)可以分為三個(gè)標(biāo)準(zhǔn):
1)統(tǒng)計(jì)學(xué)偽隨機(jī)性:
統(tǒng)計(jì)學(xué)偽隨機(jī)性指的是在給定的隨機(jī)比特流樣本中,1的數(shù)量大致等于0的數(shù)量,同理,“10”“01”“00”“11”四者數(shù)量大致相等.類似的標(biāo)準(zhǔn)被稱為統(tǒng)計(jì)學(xué)隨機(jī)性.滿足這類要求的數(shù)字在人類“一眼看上去”是隨機(jī)的。
2)密碼學(xué)安全偽隨機(jī)性:
其定義為,給定隨機(jī)樣本的一部分和隨機(jī)算法,不能有效的演算出隨機(jī)樣本的剩余部分。
3)真隨機(jī)性:
其定義為隨機(jī)樣本不可重現(xiàn).實(shí)際上只要給定邊界條件,真隨機(jī)數(shù)并不存在,可是如果產(chǎn)生一個(gè)真隨機(jī)數(shù)樣本的邊界條件十分復(fù)雜且難以捕捉(比如計(jì)算機(jī)當(dāng)?shù)氐谋镜纵椛洳▌?dòng)值),可以認(rèn)為用這個(gè)方法演算出來(lái)了真隨機(jī)數(shù)。
相應(yīng)的,隨機(jī)數(shù)也分為三類:
1)偽隨機(jī)數(shù):
滿足第一個(gè)條件的隨機(jī)數(shù)。
2)密碼學(xué)安全的偽隨機(jī)數(shù):
同時(shí)滿足前兩個(gè)條件的隨機(jī)數(shù),可以通過密碼學(xué)安全偽隨機(jī)數(shù)生成器計(jì)算得出。
3)真隨機(jī)數(shù):
同時(shí)滿足三個(gè)條件的隨機(jī)數(shù)。
我們知道,隨機(jī)數(shù)是通過一些復(fù)雜的數(shù)學(xué)算法得到的,那么 隨機(jī)種子就是這些隨機(jī)數(shù)的初始值。
一般計(jì)算機(jī)里面產(chǎn)生的隨機(jī)數(shù)都是偽隨機(jī)數(shù)。偽隨機(jī)數(shù),也是就一個(gè)一直不變的數(shù),所以我們可以通過輸入隨機(jī)種子得到一個(gè)初始固定的隨機(jī)數(shù)。
例如,隨機(jī)數(shù)的種子設(shè)置為x,產(chǎn)生的隨機(jī)數(shù)序列為: [123, 456,789,...],那么只要輸入相同的隨機(jī)種子x,就能得到相同的隨機(jī)數(shù)序列:[123, 456,789,...],否則就無(wú)法還原出隨機(jī)數(shù)序列,也就無(wú)法通過密碼學(xué)安全的隨機(jī)數(shù)生成器計(jì)算出隨機(jī)數(shù)序列.
二、演示功能概述
本文通過 Air780 的核心板燒錄底層固件和修改LuatOS示例代碼,來(lái)演示有關(guān)隨機(jī)數(shù)的各種API的功能。
三、硬件準(zhǔn)備
3.1 Air780E 核心板
使用Air780E核心板,如下圖所示:
此核心板的詳細(xì)使用說(shuō)明參考:
https://docs.openluat.com/air780e/product/
Air780E產(chǎn)品手冊(cè)中的《開發(fā)板Core_Air780E使用說(shuō)明》,寫這篇文章時(shí)最新版本的使用說(shuō)明為:《開發(fā)板Core_Air780E使用說(shuō)明》;若在使用過程中遇到任何問題,可以直接參考這份使用說(shuō)明文檔。
3.2 SIM 卡
中國(guó)大陸環(huán)境下,可以上網(wǎng)的sim卡,一般來(lái)說(shuō),使用移動(dòng),電信,聯(lián)通的物聯(lián)網(wǎng)卡或者手機(jī)卡都行。
3.3 PC 電腦
請(qǐng)準(zhǔn)備一臺(tái)配備USB接口且能夠正常上網(wǎng)的電腦。
電腦操作系統(tǒng)為:
WIN10以及以上版本的WINDOWS系統(tǒng)
3.4 數(shù)據(jù)通信線
帶TYPE-C口的USB數(shù)據(jù)線
四、軟件環(huán)境
4.1 Luatools 工具
要想燒錄 LuatOS 固件到 4G 模組中,需要用到的調(diào)試工具:Luatools
詳細(xì)使用說(shuō)明參考:
Luatools 工具使用說(shuō)明:
https://docs.openluat.com/Luatools/
Luatools工具集具備以下幾大核心功能:
一鍵獲取最新固件:自動(dòng)連接服務(wù)器,輕松下載最新的模組固件.
固件與腳本燒錄:便捷地將固件及腳本文件燒錄至目標(biāo)模組中.
串口日志管理:實(shí)時(shí)查看模組通過串口輸出的日志信息,并支持保存功能.
串口調(diào)試助手:提供簡(jiǎn)潔的串口調(diào)試界面,滿足基本的串口通信測(cè)試需求.
Luatools下載之后,新建一個(gè)命名為 "Luatools" 的文件夾,將下載的Luatools_v3.exe拷貝或移動(dòng)到新建的Luatools文件夾內(nèi),點(diǎn)擊 Luatools_v3.exe 即可運(yùn)行.
4.2 準(zhǔn)備需要燒錄的代碼
首先要說(shuō)明一點(diǎn):腳本代碼, 要和固件的soc文件一起燒錄。
4.2.1燒錄的底層固件文件
底層core下載地址:
LuatOS 固件版本下載地址
https://docs.openluat.com/air780e/luatos/firmware/
Air780E 的底層固件在 Luatools 解壓后目錄的:
4.2.2燒錄的腳本代碼
首先要下載 Air780 的 LuatOS 示例代碼到一個(gè)合適的項(xiàng)目目錄,
示例代碼網(wǎng)站:
https://gitee.com/openLuat/LuatOS-Air780E
下載流程參考下圖:
下載的文件解壓,找到 LuatOS-Air780E-masterdemocryptomain.lua
如圖:
正確連接電腦和 4G 模組電路板
使用帶有數(shù)據(jù)通信功能的數(shù)據(jù)線,不要使用僅有充電功能的數(shù)據(jù)線;
識(shí)別 4G 模組的 BOOT 引腳
在下載之前,要用模組的 BOOT 引腳觸發(fā)下載, 也就是說(shuō),要把 4G 模組的 BOOT 引腳拉到 1.8v,或者直接把 BOOT 引腳和 VDD_EXT 引腳相連.我們要在按下 BOOT 按鍵時(shí)讓模塊開機(jī),就可以進(jìn)入下載模式了.
具體到 Air780E 開發(fā)板:
1、當(dāng)我們模塊沒開機(jī)時(shí),按著 BOOT 鍵然后長(zhǎng)按 POW 開機(jī).
2、當(dāng)我們模塊開機(jī)時(shí),按著 BOOT 鍵然后點(diǎn)按重啟鍵即可.
識(shí)別電腦的正確端口
判斷是否進(jìn)入 BOOT 模式:模塊上電,此時(shí)在電腦的設(shè)備管理器中,查看串口設(shè)備, 會(huì)出現(xiàn)一個(gè)端口表示進(jìn)入了 BOOT 下載模式,如下圖所示:
新建項(xiàng)目
首先,確保你的 Luatools 的版本,大于等于 3.0.6 版本的.
在 Luatools 的左上角上有版本顯示的,如圖所示:
Luatools 版本沒問題的話, 就點(diǎn)擊 LuaTools 右上角的“項(xiàng)目管理測(cè)試”按鈕,如下圖所示:
這時(shí)會(huì)彈出項(xiàng)目管理和燒錄管理的對(duì)話框,可以新建一個(gè)項(xiàng)目,如下圖:
開始燒錄
選擇 Air780E 板子對(duì)應(yīng)的底層 core 和剛改的 main.lua 腳本文件.下載到板子中.
點(diǎn)擊下載后,我們需要進(jìn)入 BOOT 模式才能正常下載.
如果沒進(jìn)入 BOOT 模式會(huì)出現(xiàn)下圖情況:
進(jìn)入 BOOT 模式下載,如圖:
五、API 說(shuō)明
5.1 crypto.trng(len)
生成真隨機(jī)數(shù)
返回值
例子
5.2 math.random([n [,m]])
生成偽隨機(jī)數(shù)
參數(shù)
返回值
例子
5.3 math.randomseed(n)
用法:設(shè)置一個(gè)整數(shù) n 作為隨機(jī)序列的種子.
參數(shù)
返回值
無(wú)
例子
六、功能演示
6.1 修改示例
首先找到 LuatOS-Air780E-masterdemocryptomain.lua 腳本文件,復(fù)制一份 main.lua 文件到任意目錄,我復(fù)制到 D:DesktopLuatOS-Air780E-masterrandom 這個(gè)目錄。
然后修改代碼:
6.2 燒錄固件
6.2.1正確連接電腦和 4G 模組電路板
使用帶有數(shù)據(jù)通信功能的數(shù)據(jù)線,不要使用僅有充電功能的數(shù)據(jù)線.
6.2.2識(shí)別 4G 模組的 BOOT 引腳
在下載之前,要用模組的 BOOT 引腳觸發(fā)下載, 也就是說(shuō),要把 4G 模組的 BOOT 引腳拉到1.8V,或者直接把 BOOT 引腳和 VDD_EXT 引腳相連.我們要在按下 BOOT 按鍵時(shí)讓模塊開機(jī),就可以進(jìn)入下載模式了.
具體到Air780E開發(fā)板:
1、當(dāng)我們模塊沒開機(jī)時(shí),按著BOOT鍵然后長(zhǎng)按PWR開機(jī);
2、當(dāng)我們模塊開機(jī)時(shí),按著 BOOT 鍵然后點(diǎn)按重啟鍵即可。
6.2.3識(shí)別電腦的正確端口
判斷是否進(jìn)入 BOOT 模式:模塊上電,此時(shí)在電腦的設(shè)備管理器中,查看串口設(shè)備, 會(huì)出現(xiàn)一個(gè)端口表示進(jìn)入了 BOOT 下載模式,如下圖所示:
一旦進(jìn)入了boot下載模式,表示硬件連接上已經(jīng)處于就緒狀態(tài),此時(shí)就可以使用Luatools工具進(jìn)行燒錄了!
6.2.4 用 Luatools 工具燒錄
新建項(xiàng)目
首先,確保你的 Luatools 的版本,大于等于 3.0.6 版本的。
在 Luatools 的左上角上有版本顯示的,如圖所示:
Luatools 版本沒問題的話, 就點(diǎn)擊 LuaTOols 右上角的“項(xiàng)目管理測(cè)試”按鈕,如下圖所示:
這時(shí)會(huì)彈出項(xiàng)目管理和燒錄管理的對(duì)話框,可以新建一個(gè)項(xiàng)目,如下圖:
開始燒錄
選擇 Air780E 板子對(duì)應(yīng)的底層 core 和剛改的 main.lua 腳本文件,下載到板子中。
點(diǎn)擊下載后,我們需要進(jìn)入 BOOT 模式才能正常下載。
如果沒進(jìn)入 BOOT 模式會(huì)出現(xiàn)下圖情況:
進(jìn)入 BOOT 模式下載,如圖:
6.3 對(duì)應(yīng) Log
七、總結(jié)
通過本章內(nèi)容的學(xué)習(xí),你可以學(xué)習(xí)到有關(guān)隨機(jī)數(shù)的函數(shù),
例如:
crypto.trng(len)、math.random([n [,m]])、math.randomseed(n) 等函數(shù)。
八、擴(kuò)展
8.1注意事項(xiàng)
需要注意的是,Lua中的隨機(jī)數(shù)算法可能存在一些問題。
例如,math.random(1, 3276700)返回的值最后兩位必為 0,這是由于 Lua 本身的隨機(jī)函數(shù)算法決定的。
因此,在使用Lua生成隨機(jī)數(shù)時(shí),應(yīng)當(dāng)注意這些潛在的限制,并盡可能通過設(shè)置合適的隨機(jī)種子來(lái)避免生成可預(yù)測(cè)的隨機(jī)數(shù)序列。
通過以上方法,可以在Lua中有效地生成隨機(jī)數(shù),并確保每次運(yùn)行程序時(shí)都能得到不同的隨機(jī)數(shù)序列,從而滿足各種需要隨機(jī)性的應(yīng)用場(chǎng)景。
8.2設(shè)置隨機(jī)數(shù)種子
為了確保每次運(yùn)行程序時(shí)都能生成不同的隨機(jī)數(shù)序列,需要使用math.randomseed來(lái)設(shè)置一個(gè)隨機(jī)種子.通常,使用系統(tǒng)時(shí)間os.time()作為種子是一個(gè)簡(jiǎn)單而有效的方法:
然而,如果程序在很短的時(shí)間內(nèi)多次運(yùn)行,可能會(huì)發(fā)現(xiàn)生成的隨機(jī)數(shù)序列幾乎不變.這是因?yàn)閛s.time()返回的是秒級(jí)的時(shí)間戳,不夠精確.為了解決這個(gè)問題,可以將時(shí)間戳轉(zhuǎn)換為字符串,然后反轉(zhuǎn)并截取高位數(shù)字作為種子:
這種方法通過提高種子數(shù)值的變化量,使得即使在短時(shí)間內(nèi)多次運(yùn)行程序,也能產(chǎn)生更好的偽隨機(jī)序列。
分享完畢。
-
生成器
+關(guān)注
關(guān)注
7文章
315瀏覽量
21011 -
模組
+關(guān)注
關(guān)注
6文章
1492瀏覽量
30390 -
隨機(jī)數(shù)
+關(guān)注
關(guān)注
0文章
18瀏覽量
12017 -
LuatOS
+關(guān)注
關(guān)注
0文章
76瀏覽量
1941
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論