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