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

關于4G模組LuatOS開發(fā):通用加解密函數(shù)(crypto)|全攻略

解析Air780E模組LuatOS開發(fā)的隨機數(shù)(random) 示例篇

Air780E模組LuatOS開發(fā)實戰(zhàn) —— 手把手教你搞定數(shù)據(jù)打包解包

評論