本次學習的實戰是關于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核心板,如下圖所示:
此核心板的詳細使用說明參考:
https://docs.openluat.com/air780e/product/
Air780E產品手冊中的《開發板Core_Air780E使用說明》,寫這篇文章時最新版本的使用說明為:《開發板Core_Air780E使用說明》;若在使用過程中遇到任何問題,可以直接參考這份使用說明文檔。
3.2 SIM 卡
中國大陸環境下,可以上網的sim卡,一般來說,使用移動,電信,聯通的物聯網卡或者手機卡都行。
3.3 PC 電腦
電腦操作系統為:
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/
Air780E 的底層固件在 Luatools 解壓后目錄的:
4.2.2燒錄的腳本代碼
首先要下載 Air780 的 LuatOS 示例代碼到一個合適的項目目錄,
示例代碼網站:
https://gitee.com/openLuat/LuatOS-Air780E
下載流程參考下圖:
下載的文件解壓,找到 LuatOS-Air780E-masterdemocryptomain.lua
如圖:
正確連接電腦和 4G 模組電路板
使用帶有數據通信功能的數據線,不要使用僅有充電功能的數據線;
識別 4G 模組的 BOOT 引腳
在下載之前,要用模組的 BOOT 引腳觸發下載, 也就是說,要把 4G 模組的 BOOT 引腳拉到 1.8v,或者直接把 BOOT 引腳和 VDD_EXT 引腳相連.我們要在按下 BOOT 按鍵時讓模塊開機,就可以進入下載模式了.
具體到 Air780E 開發板:
1、當我們模塊沒開機時,按著 BOOT 鍵然后長按 POW 開機.
2、當我們模塊開機時,按著 BOOT 鍵然后點按重啟鍵即可.
識別電腦的正確端口
判斷是否進入 BOOT 模式:模塊上電,此時在電腦的設備管理器中,查看串口設備, 會出現一個端口表示進入了 BOOT 下載模式,如下圖所示:
新建項目
首先,確保你的 Luatools 的版本,大于等于 3.0.6 版本的.
在 Luatools 的左上角上有版本顯示的,如圖所示:
Luatools 版本沒問題的話, 就點擊 LuaTools 右上角的“項目管理測試”按鈕,如下圖所示:
這時會彈出項目管理和燒錄管理的對話框,可以新建一個項目,如下圖:
開始燒錄
選擇 Air780E 板子對應的底層 core 和剛改的 main.lua 腳本文件.下載到板子中.
點擊下載后,我們需要進入 BOOT 模式才能正常下載.
如果沒進入 BOOT 模式會出現下圖情況:
進入 BOOT 模式下載,如圖:
五、API 說明
5.1 crypto.trng(len)
生成真隨機數
返回值
例子
5.2 math.random([n [,m]])
生成偽隨機數
參數
返回值
例子
5.3 math.randomseed(n)
用法:設置一個整數 n 作為隨機序列的種子.
參數
返回值
無
例子
六、功能演示
6.1 修改示例
首先找到 LuatOS-Air780E-masterdemocryptomain.lua 腳本文件,復制一份 main.lua 文件到任意目錄,我復制到 D:DesktopLuatOS-Air780E-masterrandom 這個目錄。
然后修改代碼:
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 鍵然后點按重啟鍵即可。
6.2.3識別電腦的正確端口
判斷是否進入 BOOT 模式:模塊上電,此時在電腦的設備管理器中,查看串口設備, 會出現一個端口表示進入了 BOOT 下載模式,如下圖所示:
一旦進入了boot下載模式,表示硬件連接上已經處于就緒狀態,此時就可以使用Luatools工具進行燒錄了!
6.2.4 用 Luatools 工具燒錄
新建項目
首先,確保你的 Luatools 的版本,大于等于 3.0.6 版本的。
在 Luatools 的左上角上有版本顯示的,如圖所示:
Luatools 版本沒問題的話, 就點擊 LuaTOols 右上角的“項目管理測試”按鈕,如下圖所示:
這時會彈出項目管理和燒錄管理的對話框,可以新建一個項目,如下圖:
開始燒錄
選擇 Air780E 板子對應的底層 core 和剛改的 main.lua 腳本文件,下載到板子中。
點擊下載后,我們需要進入 BOOT 模式才能正常下載。
如果沒進入 BOOT 模式會出現下圖情況:
進入 BOOT 模式下載,如圖:
6.3 對應 Log
七、總結
通過本章內容的學習,你可以學習到有關隨機數的函數,
例如:
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()作為種子是一個簡單而有效的方法:
然而,如果程序在很短的時間內多次運行,可能會發現生成的隨機數序列幾乎不變.這是因為os.time()返回的是秒級的時間戳,不夠精確.為了解決這個問題,可以將時間戳轉換為字符串,然后反轉并截取高位數字作為種子:
這種方法通過提高種子數值的變化量,使得即使在短時間內多次運行程序,也能產生更好的偽隨機序列。
分享完畢。
-
生成器
+關注
關注
7文章
315瀏覽量
21002 -
模組
+關注
關注
6文章
1487瀏覽量
30360 -
隨機數
+關注
關注
0文章
18瀏覽量
12016 -
LuatOS
+關注
關注
0文章
76瀏覽量
1936
發布評論請先 登錄
相關推薦
評論