[toc] # Linux運維工程師面試題(6) > 祝各位小伙伴們早日找到自己心儀的工作。 > 持續學習才不會被淘汰。 > 地球不爆炸,我們不放假。 > 機會總是留給有有準備的人的。 > 加油,打工人! ## 1 資料庫事務的四個特性及含義 資料庫事務的4個特性:原⼦性、持久性、⼀致性、隔離性 - ...
0 PlatformIO通往卓越嵌入式軟體開發的門戶
利用PlatformIO的協作生態系統,發掘嵌入式軟體開發的真正潛力,採用聲明式原則、測試驅動方法和現代工具鏈,取得無與倫比的成功。
- 開放源代碼、最大許可的Apache 2.0許可證
- 跨平臺集成開發環境和統一調試器
- 靜態代碼分析器和遠程單元測試
- 多平臺和多架構構建系統
- 固件文件資源管理器和記憶體檢測。
1 什麼是PlatformIO?
開發和團隊自由發揮!不再被供應商鎖定!
PlatformIO 是一款跨平臺、跨體繫結構、多框架的專業工具,適用於嵌入式系統工程師和為嵌入式產品編寫應用程式的軟體開發人員。
1.1 榮譽
PlatformIO 榮獲2015/16年度物聯網大獎最佳軟體和工具提名。
Microsoft PlatformIO IDE for VSCode編輯器的原生PlatformIO IDE擴展是整個 Microsoft Marketplace 中評分/評論最高的擴展,五星級評論超過2,500 條。全球有超過 3,000,000 名開發人員安裝了該擴展。
https://github.com/platformio/platformio-core 7K+星。
1.2 理念
PlatformIO在嵌入式市場的獨特理念為開發人員提供了現代化的集成開發環境(雲和桌面集成開發環境),該環境可跨平臺運行,支持多種不同的軟體開發工具包(SDK)或框架,並包括複雜的調試、單元測試、自動代碼分析和遠程管理。它的架構最大限度地提高了開發人員的靈活性和選擇性,開發人員可以使用圖形或命令行編輯器(PlatformIO Core (CLI)),也可以同時使用這兩種編輯器。
對於在多個特定平臺上開發解決方案的專業嵌入式系統工程師來說,PlatformIO是一款必備工具。此外,PlatformIO採用分散式架構,為新老開發人員提供了快速集成的途徑,以開發可用於商業用途的產品,並縮短了產品的整體上市時間。
此外,PlatformIO還可在您最喜愛的任何現代操作系統(macOS、MS Windows、Linux、FreeBSD)上運行。
1.3 技術
PlatformIO將最新的可擴展和靈活的軟體技術應用於嵌入式市場,該領域傳統上由複雜的軟體工具提供服務,經驗豐富的硬體工程師需要長期學習才能掌握這些工具(通常非常痛苦)。有了PlatformIO,用戶可以是業餘愛好者,也可以是專業人士。他們可以導入經典的Arduino "Blin "草圖,也可以為商業產品開發複雜的底層嵌入式C程式。任何支持框架的示例代碼都能在幾分鐘內編譯並上傳到目標平臺。
構建系統結構可自動標記軟體依賴關係,並使用模塊化層次結構進行應用,從而消除了通常的複雜性和痛苦。開發人員不再需要手動查找和組裝工具鏈、編譯器和庫依賴環境,就能為特定目標開發應用程式。有了PlatformIO,點擊編譯按鈕就能自動引入所有必要的依賴項。這就好比你是一名傢具設計師,而你的CAD程式有"構建"按鈕,可以讓機器人獲取所有必要的部件和緊固件,並將它們正確地組裝起來。
PlatformIO Core(CLI是獨特的、從零開始開發的構建系統,它消除了開發人員在超越特定SDK或嵌入式應用實例的範圍時通常會遇到的軟體集成、打包和庫依賴性等問題。它可與各種代碼開發環境配合使用,並可與眾多雲平臺和網路服務源輕鬆集成。用戶在快速上手方面不會遇到任何障礙:無需許可證費用,無需法律合同。用戶可以保持構建環境的充分靈活性,因為這些工具是開源的,並且獲得了許可(修改這些工具不需要許可,也不要求共用修改內容)。
1.4 解決問題
人們對嵌入式世界望而卻步的主要問題是為特定MCU/板設置開發軟體的複雜過程:工具鏈、專有供應商的集成開發環境(有時不是免費的),更重要的是,要在電腦上安裝支持該軟體的操作系統。
- 多種硬體平臺(MCU:Microcontroller Unit、板卡board)需要不同的工具鏈、集成開發環境等,還分別需要花時間學習新的開發環境。
- 尋找適當的庫和代碼示例,說明如何使用常用的感測器、執行器等。
- 團隊成員之間共用嵌入式項目,無論他們喜歡使用哪種操作系統。
1.5 如何工作
在不深入探討PlatformIO實施細節的情況下,使用 PlatformIO 開發項目的工作周期如下:
- 用戶在"platformio.ini"(項目配置文件)中選擇感興趣的電路板。
- PlatformIO根據電路板列表下載所需的工具鏈並自動安裝。
- 用戶開發代碼,PlatformIO 確保代碼已編譯、準備就緒並上傳到板上。
2 PlatformIO IDE
PlatformIO IDE是下一代物聯網集成開發環境。
- 跨平臺構建系統,與操作系統軟體無外部依賴關係:
- 1,000多種板卡
- 40多個開發平臺
- 20多個框架
- 調試
- 遠程開發
- 單元測試
- C/C++智能代碼自動完成
- 用於快速專業開發的C/C++智能代碼篩選器
- 數百個常用庫的庫管理器
- 多窗格的多項目工作流程
- 支持深色和淺色主題
- 串列埠監控器
- 內置帶有 PlatformIO Core (CLI)和 CLI 工具(pio、platformio)的終端
- 內置PlatformIO Home
我們為最流行的集成開發環境和文本編輯器提供官方軟體包(插件、擴展)。
根據我們的經驗,PlatformIO IDE for VSCode有更好的系統性能,用戶也發現它更容易上手。
2.1 VSCode PlatformIO擴展
Visual Studio Code是一款輕量級但功能強大的源代碼編輯器,可在桌面上運行,適用於 Windows、macOS 和 Linux。它內置了對JavaScript、TypeScript和Node.js的支持,併為其他語言(如 Python、C++、C#、PHP、Go)和運行時(如 .NET 和 Unity)提供了豐富的擴展生態系統。
2.1 CLion PlatformIO擴展
CLion是適用於Linux、OS X和Windows的跨平臺C/C++集成開發環境。CLion包括智能編輯器、代碼生成、代碼質量保證、自動重構、即時代碼分析、項目管理器、集成版本控制系統和調試器等功能。
3 PlatformIO Core (CLI)
PlatformIO Core(CLI 工具)是整個 PlatformIO 生態系統的核心,包括
- 多平臺構建系統
- 統一軟體包管理器
- 庫管理
- 庫依賴關係查找器(LDF Library Dependency Finder)
- 串列埠監控器
- 集成組件(雲和桌面集成開發環境以及持續集成)。
PlatformIO Core由Python編寫,可在Windows、macOS、Linux、FreeBSD和基於ARM的信用卡大小的電腦(Raspberry Pi、BeagleBone、CubieBoard、Samsung ARTIK 等上運行。
PlatformIO Core提供內容豐富、文檔齊全的命令行界面(CLI)。其他基於PlatformIO的軟體和集成開發環境都基於 PlatformIO Core CLI,如 PlatformIO IDE。換句話說,它們用自己的圖形用戶界麵包裝 PlatformIO Core。
請註意,如果要使用 PlatformIO IDE,則無需安裝 PlatformIO Core。PlatformIO Core 內置於 PlatformIO IDE中,您可以在PlatformIO IDE終端中使用它。
如果您需要在PlatformIO IDE之外使用 PlatformIO Core 命令,請安裝 Shell Commands( https://docs.platformio.org/en/latest/core/installation/shell-commands.html#piocore-install-shell-commands )。
3.1 安裝
3.1.1 Super-Quick (macOS / Linux)
curl -fsSL -o get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
python3 get-platformio.py
# 或
pip install -U platformio
其他系統參考 https://docs.platformio.org/en/latest/core/installation/methods/installer-script.html
PlatformIO Core(CLI)由系統中的2個獨立工具組成:
- platformio 或 pio(簡稱)
- piodebuggdb - pio調試
Linux 用戶必須為支持 PlatformIO 的板卡/設備安裝 udev 規則。最新版本的規則可在 https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/system/99-platformio-udev.rules 上找到。
請檢查您的板卡的PID和VID是否列在規則中。您可以使用pio device lis 命令列出已連接的設備及其PID/VID。
該文件必須放置在/etc/udev/rules.d/99-platformio-udev.rules (首選位置)或 /lib/udev/rules.d/99-platformio-udev.rules (某些壞系統需要)。
請打開系統終端並鍵入
curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/system/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules
或手動下載文件並複製到目標文件夾
sudo cp 99-platformio-udev.rules /etc/udev/rules.d/99-platformio-udev.rules
重啟 "udev "管理工具:
sudo service udev restart
或
sudo udevadm control --reload-rules
sudo udevadm trigger
如果 Ubuntu/Debian 用戶不是 "root",可能需要將自己的 "username "添加到 "dialout "組。
sudo usermod -a -G dialout $USER
sudo usermod -a -G plugdev $USER
同樣,Arch 用戶可能需要將自己的用戶添加到 "uucp "組中
sudo usermod -a -G uucp $USER
sudo usermod -a -G lock $USER
註意您需要註銷並重新登錄(或重啟)用戶組更改才能生效。
安裝此文件後,拔下並重新連接板卡。
參考資料
- 軟體測試精品書籍文檔下載持續更新 https://github.com/china-testing/python-testing-examples 請點贊,謝謝!
- 本文涉及的python測試開發庫 謝謝點贊! https://github.com/china-testing/python_cn_resouce
- python精品書籍下載 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
- Linux精品書籍下載 https://www.cnblogs.com/testing-/p/17438558.html
- https://docs.platformio.org/en/latest
3.1.1.1 與自定義應用程式(擴展、插件)集成
當您將PlatformIO Core集成到應用程式(如集成開發環境的擴展或插件)中時,我們建議您使用PlatformIO Core安裝程式腳本。
3.1.1.1.1 前提條件
- Python解釋器
PlatformIO Core安裝腳本由Python編寫,相容Python 2.7+和Python 3.5+。我們強烈建議使用最新的Python 3。
- 安裝程式腳本
將get-platformio.py文件捆綁到您的應用程式中;或按需下載 get-platformio.py 文件。
在這兩種情況下您都需要在最終用戶機器上安裝get-platformio.py腳本。您可以將其複製或下載到緩存/臨時文件夾中。
幫助:
$ python get-platformio.py --help
Usage: get-platformio.py [OPTIONS] COMMAND [ARGS]...
Options:
--version Show the version and exit.
--verbose Verbose output
--shutdown-piohome / --no-shutdown-piohome
--dev
--ignore-python TEXT A path to Python to be ignored (multiple
options and unix wildcards are allowed)
--pypi-index-url TEXT Custom base URL of the Python Package Index
(default `https://pypi.org/simple`)
--help Show this message and exit.
Commands:
check
pack
3.1.1.1.2 Workflow
我們將介紹一個簡單的工作流程,說明如何為應用程式/擴展的最終用戶自動安 PlatformIO Core (CLI)。
- 步驟1. PlatformIO Core安裝在何處?
每次用戶啟動應用程式時,您都應檢查 PlatformIO Core的安裝狀態。您需要調用帶有檢查核心參數的安裝程式腳本:
$ python get-platformio.py check core
Found compatible PlatformIO Core 6.1.10 -> /home/andrew/.platformio/penv/bin/platformio
如果需要 PlatformIO Core 安裝狀態的完整信息,請使用 --dump-state 選項運行,並指定一個文件夾或完整路徑,以 JSON 格式保存數據:
python get-platformio.py check core --dump-state pioinstaller-state.json
Found compatible PlatformIO Core 6.1.10 -> /home/andrew/.platformio/penv/bin/platformio
$ cat pioinstaller-state.json
{"core_version": "6.1.10", "python_version": "3.10.12", "core_dir": "/home/andrew/.platformio", "cache_dir": "/home/andrew/.platformio/.cache", "penv_dir": "/home/andrew/.platformio/penv", "penv_bin_dir": "/home/andrew/.platformio/penv/bin", "platformio_exe": "/home/andrew/.platformio/penv/bin/platformio", "installer_version": "1.2.1", "python_exe": "/home/andrew/.platformio/penv/bin/python", "system": "linux_x86_64", "is_develop_core": false}
現在,讀取JSON文件並使用platformio_exe 二進位文件通過 CLI 調用 PlatforIO Core(參見 CLI 指南)。也可以在系統環境PATH變數中導出 penv_bin_dir,這樣 platformio 命令就無需完整路徑即可使用了。
- 步驟2安裝 PlatformIO Core
要以自動模式將PlatformIO Core安裝到虛擬環境中,請調用安裝程式腳本,無需任何參數:
3.1.1.1.3 實例
參見https://github.com/platformio/platformio-node-helpers
3.2 快速入門
本節將向您介紹 PlatformIO Core (CLI) 命令行界面 (CLI)工作流程的基礎知識,並向您展示一個簡單的跨平臺 "Blink "項目的創建過程。學完之後,您將對如何使用多種開發平臺和嵌入式板有一個大致的瞭解。
3.2.1 設置項目(工程)
PlatformIO Core (CLI)為配置項目提供了特殊的 pio project init 命令。它允許初始化新的空項目或使用新數據更新現有項目。
此外pio project init 可用於雲和桌面 IDE。這意味著您可以使用最喜歡的集成開發環境導入預生成的PlatformIO 項目,並使用物聯網開發的專業工具對其進行擴展。
本教程基於ESP8266。
3.2.2 板識別
$ pio boards teensy
Platform: teensy
=================================================================================================================================================================
ID MCU Frequency Flash RAM Name
--------- ----------- ----------- ------- -------- ------------------------
teensymm IMXRT1062 600MHz 7.75MB 512KB SparkFun MicroMod Teensy
teensy2 ATMEGA32U4 16MHz 31.50KB 2.50KB Teensy 2.0
teensy30 MK20DX128 48MHz 128KB 16KB Teensy 3.0
teensy31 MK20DX256 72MHz 256KB 64KB Teensy 3.1 / 3.2
teensy35 MK64FX512 120MHz 512KB 255.99KB Teensy 3.5
teensy36 MK66FX1M0 180MHz 1MB 256KB Teensy 3.6
teensy40 IMXRT1062 600MHz 1.94MB 512KB Teensy 4.0
teensy41 IMXRT1062 600MHz 7.75MB 512KB Teensy 4.1
teensylc MKL26Z64 48MHz 62KB 8KB Teensy LC
teensy2pp AT90USB1286 16MHz 127KB 8KB Teensy++ 2.0
根據上表,Teensy3.1/3.2的ID是teensy31。此外,Arduino Uno的ID是 uno,NodeMCU 1.0(ESP-12E 模塊)的 ID 是 nodemcuv2。
3.2.3 初始化項目
PlatformIO生態系統包含一個大型資料庫,其中有最常用嵌入式板的預配置設置。它可以幫助您省去安裝工具鏈、編寫構建腳本或配置上傳過程的麻煩。只需告訴PlatformIO板ID,您就會收到包含預裝工具的完整工作項目,用於專業開發。
$ mkdir tmp_8266
$ cd tmp_8266
$ pio project init --board uno --board nodemcuv2 --board teensy31
The following files/directories have been created in /home/andrew/tmp_8266
include - Put project header files here
lib - Put project specific (private) libraries here
src - Put project source files here
platformio.ini - Project Configuration File
Resolving uno dependencies...
Platform Manager: Installing atmelavr
Downloading [####################################] 100%
Unpacking [####################################] 100%
Platform Manager: [email protected] has been installed!
Tool Manager: Installing platformio/toolchain-atmelavr @ ~1.70300.0
Downloading [####################################] 100%
Unpacking [####################################] 100%
Tool Manager: [email protected] has been installed!
Tool Manager: Installing platformio/framework-arduino-avr @ ~5.1.0
Downloading [####################################] 100%
Unpacking [####################################] 100%
Tool Manager: [email protected] has been installed!
Resolving nodemcuv2 dependencies...
Platform Manager: Installing espressif8266
Downloading [####################################] 100%
Unpacking [####################################] 100%
Platform Manager: [email protected] has been installed!
Tool Manager: Installing platformio/toolchain-xtensa @ ~2.100300.220621
Downloading [####################################] 100%
Unpacking [####################################] 100%
Tool Manager: [email protected] has been installed!
Tool Manager: Installing platformio/framework-arduinoespressif8266 @ ~3.30102.0
Downloading [####################################] 100%
Unpacking [####################################] 100%
Tool Manager: [email protected] has been installed!
Tool Manager: Installing platformio/tool-esptool @ <2
Downloading [####################################] 100%
Unpacking [####################################] 100%
Tool Manager: [email protected] has been installed!
Tool Manager: Installing platformio/tool-esptoolpy @ ~1.30000.0
Downloading [####################################] 100%
Unpacking [####################################] 100%
Tool Manager: [email protected] has been installed!
Resolving teensy31 dependencies...
Platform Manager: Installing teensy
Downloading [####################################] 100%
Unpacking [####################################] 100%
Platform Manager: [email protected] has been installed!
Tool Manager: Installing platformio/toolchain-gccarmnoneeabi-teensy @ ~1.110301.0
Downloading [####################################] 100%
Unpacking [####################################] 100%
Tool Manager: [email protected] has been installed!
Tool Manager: Installing platformio/framework-arduinoteensy @ ~1.158.0
Downloading [####################################] 100%
Unpacking [####################################] 100%
Tool Manager: [email protected] has been installed!
Project has been successfully initialized!
$ ls -R
.:
include lib platformio.ini src test
./include:
README
./lib:
README
./src:
./test:
README
恭喜!您剛剛創建了第一個基於PlatformIO的項目,其結構如下:
- "platformio.ini"(項目配置文件)
- src 目錄,用於放置源代碼(.h、.c、.cpp、.S、*.ino 等)。
- lib 目錄可用於存放項目專用(私有)庫。更多詳情請參見 lib/README 文件。
- 支持 VCS 和持續集成的其他文件。
如果需要在現有項目中添加新電路板,請再次使用pio project init。
剛剛生成的 latformio.ini的結果:
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:uno]
platform = atmelavr
board = uno
framework = arduino
[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
[env:teensy31]
platform = teensy
board = teensy31
framework = arduino
現在,我們需要創建main.cpp文件,並將其放到新創建項目的src文件夾中。src/main.cpp 的內容:
/**
* Blink
*
* Turns on an LED on for one second,
* then off for one second, repeatedly.
*/
#include "Arduino.h"
#ifndef LED_BUILTIN
#define LED_BUILTIN 13
#endif
void setup()
{
// initialize LED digital pin as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
// turn the LED on (HIGH is the voltage level)
digitalWrite(LED_BUILTIN, HIGH);
// wait for a second
delay(1000);
// turn the LED off by making the voltage LOW
digitalWrite(LED_BUILTIN, LOW);
// wait for a second
delay(1000);
}
最終的項目結構:
project_dir
├── lib
│ └── README
├── platformio.ini
└── src
└── main.cpp
3.2.3 項目處理
PlatformIO Core (CLI) 提供特殊的 pio run 命令來處理項目。如果不帶任何參數調用該命令,PlatformIO 編譯系統將處理所有項目環境(這些環境是根據上述指定的每個板創建的)。下麵是一些有用的命令:
- pio run. 處理(構建)"platformio.ini"(項目配置文件)中指定的所有環境
- pio run --target upload。構建項目並將固件上傳到 "platformio.ini"(項目配置文件)中指定的所有設備上
- pio run --target clean. 清理項目(刪除編譯對象)
- pio run -e uno. 僅處理 uno 環境
- pio run -e uno -t upload。僅為 uno 構建項目並上傳固件。
其他目標請參考 pio run --list-targets 文檔。