色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

深入解析Zephyr RTOS的技術細節(jié)

麥克泰技術 ? 來源:嵌入式系統(tǒng)專家之聲 ? 2024-10-22 16:47 ? 次閱讀

以下文章來源于嵌入式系統(tǒng)專家之聲

作者:Clemens Valens(Elektor) 編譯:何靈淵

摘要

Zephyr是一個針對資源受限設備優(yōu)化的小型、可縮放、多體系架構實時操作系統(tǒng)(RTOS)。Zephyr由Linux基金會維護[1],是一個以構建業(yè)界最佳的RTOS為目標的開源合作項目。近年來,Zephyr OS在嵌入式開發(fā)中的知名度逐漸增加,新的微控制器和開發(fā)板都支持Zephyr。本文將深入討論Zephyr RTOS的技術細節(jié)。

Zephyr有著可縮放性,這讓它能夠寬泛地適用于資源限制各不相同的多種設備。Zephyr模塊化的結構讓開發(fā)者能夠只包括他們需要的組件,從而降低系統(tǒng)尺寸,達到系統(tǒng)的可縮放性。Zephyr在網(wǎng)站上聲稱可以在內存小到8KB,大到GB的系統(tǒng)上運行。

1. 寬泛的硬件支持

Zephyr支持眾多體系結構,包括Arm、x86、RISC-V、Xtensa、MIPS等,并借由Nios2和MicroBlaze軟核支持FPGA。本文成文時,Zephyr支持超過600種開發(fā)板,包括Arduino UNO R4 Minima、GIGA R1 WiFi和Portenta H7、多種ESP32板、BBC micro:bit的所有版本、樹莓派Pico(甚至是樹莓派4B+)、nRF51和nRF52板、NXP MIMXRT1010-EVK和其家族,以及STM32 Nucleo和Discovery家族。以上我只列舉了在Elektor上常看到的開發(fā)板,還有其他許多Zephyr支持的硬件。

除了包含處理器的開發(fā)板,Zephyr還支持許多附加板(背板),并包括了各類接口和超過150種傳感器的驅動。

2. 多任務、網(wǎng)絡電源管理

作為一款實時操作系統(tǒng)(RTOS),Zephyr提供搶占式多任務調度、任務間通信實時時鐘支持。OS還支持多種網(wǎng)絡技術與協(xié)議,例如TCP/IP、藍牙、IEEE 802.15.4(在Zigbee中使用)、MQTT、NFS與LoRaWAN。網(wǎng)絡支持加上電源管理功能讓Zephyr適合強調能源效率的物聯(lián)網(wǎng)IoT)應用和使用電池驅動的設備。

Zephyr中的一組軟件庫和中間件能夠簡化常見的任務,像是通信協(xié)議、文件系統(tǒng)和設備驅動。

Zephyr還針對安全認證設計,比如ISO 26262,這讓它適用于安全關鍵應用。

3. 受Linux啟發(fā)

Zephyr并不是Linux,但是它借鑒了Linux的概念、技術和工具。例如Zephyr使用Kconfig配置操作系統(tǒng),硬件的屬性和配置則用設備樹規(guī)范(Device Tree Specification——DTS)[2]描述。因此,Linux開發(fā)者能快速上手Zephyr編程

4. 開源

Zephyr使用較為寬松的Apache 2.0許可證,允許商業(yè)和非商業(yè)用途。Zephyr的用戶社區(qū)提供支持和文檔,你也可以加入社區(qū)。

5. 嘗試Zephyr

我一直都想要嘗試Zephyr,但是我對它的第一印象不太好,所以就一直沒有深入了解。我之前遇到的主要問題(除了順利編譯源代碼以外)是它需要一個能對目標控制器進行編程的連接器,這對于創(chuàng)客不太友好。多虧了Arduino和其引導程序,我們不再需要特別的編程工具。

5.1 選擇一個開發(fā)板

自從我上次嘗試Zephyr以來,其發(fā)展日新月異。今天,Zephyr支持超過600種不同的微控制器開發(fā)板,你很可能已經(jīng)擁有幾塊支持Zephyr的開發(fā)板了。閱讀詳細的支持列表,我發(fā)現(xiàn)我已經(jīng)擁有十幾塊支持Zephyr的開發(fā)板了。

5.2 BBC micro:bit

我嘗試了許多塊開發(fā)板,最后決定在BBC micro:bit上進行實驗(見圖1,取決于型號,Zephyr使用目標名bbc_microbit或者bbc_microbit_v2)。micro:bit除了很常見以外,它對Zephyr的支持可能是最好的,所有的外設都可以使用,而且有樣例代碼。最好的是,編程和調試都不需要額外的工具。流行的ESP-WROOM-32(Zephyr目標名esp32_devkitc_wroom)也是個很好的選擇,但是調試需要外部工具。

dc3c1a72-9051-11ef-a511-92fbcf53809c.png

圖1:迷你的BBC micro:bit開發(fā)板非常適合嘗試Zephyr RTOS。誰能想到了為了讓兒童學習MakeCode(一門類似Scratch的圖形語言)的小板子也適合幫助一位專業(yè)嵌入式軟件開發(fā)者熟悉一款工業(yè)級RTOS呢?

Arduino GIGA R1 WiFi也是一個不錯的備選方案,但是使用Zephyr的時候會覆寫它的引導程序。即使之后你可以手動恢復,這也會添加不需要的副作用。

官方說法是Arduino UNO R4 Minima需要SWD(串行線調試)連接器。許多其他開發(fā)板也需要SWD,包括樹莓派Pico。但是我發(fā)現(xiàn)使用dfu-util(見下文)可以繞過這一要求。和GIGA R1類似,Arduino引導程序會被覆蓋。

5.3 使用仿真器

如果你沒有合適的開發(fā)板,但是還是非常想要嘗試Zephyr,Zephyr內建QEMU仿真器支持(只在Linux和macOS上),讓你可以虛擬地運行和測試應用。Antmicro的Renode也能達到同樣效果,但是我沒有親自嘗試。

5.4 安裝Zephyr

我在運行Windows 11的計算機上安裝了Zephyr,我沒有嘗試Linux或macOS。在線可以找到詳細的安裝指南[3],所有步驟都非常清晰,我不需要尋找其他參考資料。按照指南,我使用了虛擬的Python環(huán)境,這意味著需要把創(chuàng)建環(huán)境的命令記下來,因為每次開始開發(fā)時都需要用到。如果你使用Windows PowerShell,可以運行腳本activate.ps1;命令行中則是activate.bat批處理文件。Windows PowerShell處理編譯器和鏈接器輸出的表現(xiàn)會更好(圖2)。

dc6ea294-9051-11ef-a511-92fbcf53809c.png

圖2:Zephyr的west構建工具是針對命令行終端設計的,Windows的cmd.exe雖然也可以運行,但它不是一個終端。Windows PowerShell是一個終端,更適合運行構建。

Zephyr包括兩個部分,OS本身和包含一組MCU工具鏈的軟件開發(fā)套件(SDK)。截至本文成文,有21套不同的工具鏈。

OS和SDK并不需要在同一個位置安裝,在我的環(huán)境中兩個總共需要12GB的存儲空間,你可以刪除不需要的工具鏈以節(jié)約空間。

安裝完成后,讓我們測試安裝是否成功。通過下面的命令構建一個樣例代碼,上傳到開發(fā)板上(將替換為你的開發(fā)板的目標名,例如arduino_uno_r4_minima):

west build -p always -b samples/basic/blinky

如果你想直接使用上述命令,必須先更改工作路徑。運行下面的命令(.venv表示你正在虛擬環(huán)境中):

(.venv) zephyrprojectzephyr

如果樣例能成功構建,運行下面的命令將其上傳到開發(fā)板上:

west flash

板上的“默認”LED會以0.5Hz的速率開始閃爍。

前面已經(jīng)提到過,燒錄可能需要額外的編程工具,像是J-Link適配器,或是另一種JTAG/SWD兼容的編程器(圖3)。west程序也必須能夠找到驅動程序(即在搜索路徑中,對Windows而言是%PATH%),如果不能的話程序會告知你(但是消息經(jīng)常又長又難以理解)。

dc931430-9051-11ef-a511-92fbcf53809c.jpg

圖3:在許多情況下(不是全部),你都需要一個JTAG或者SWD編程/調試工具來進行你的Zephyr實驗。

在BBC micro:bit V2上,第一次燒錄的時候我需要參考標準micro:bit編程步驟將HEX文件手工復制到板上,之后flash命令就可以順利運行了。可執(zhí)行的zephyr.hex文件在zephyrprojectzephyruildzephyr路徑中。

Arduino板的默認flash命令(UNO R4 Minima和GIGA R1 WiFi)需要將dfu-util編程工具加入到搜索路徑中(在啟動虛擬環(huán)境之前)。這一工具在Arduino IDE中可以找到,但是具體路徑取決于你的環(huán)境(默認為%HOMEPATH%AppDataLocalArduino15packagesarduino oolsdfu-util<最新的Arduino版本>)。開發(fā)板還必須在DFU模式下,按下reset按鍵兩次即可。當LED開始“呼吸”時你就可以燒錄程序了。

5.5 閃燈(Blinky)樣例的兼容性

你也許注意到了,我建議用Arduino UNO R4 Minima開發(fā)板運行閃燈樣例,而不是BBC micro:bit,這是因為盡管板上有25個LED(不包括電源指示),它們和閃燈樣例并不兼容。ESP-WROOM-32也有類似問題,但是R4 Minima沒有。

GIGA R1也與樣例兼容,板上的MCU有兩個核(Cortex M4和M7),Zephyr允許你在構建命令中使用arduino_giga_r1_m4或者arduino_giga_r1_m7來選擇其一。構建和燒錄閃燈樣例兩次,一次M4,一次M7,你就可以發(fā)現(xiàn)兩個核互為獨立。GIGA有RGB LED,閃燈樣例在不同核上會使用不同的顏色,M4為藍色,M7為紅色。還可以通過改變閃爍速率(samplesasiclinkysrcmain.c中的SLEEP_TIME_MS)進一步區(qū)分兩次運行的行為。

5.6 Hello World

對于缺少用于閃爍的LED的開發(fā)板而言,下面是在串口輸出字符串的hello_world樣例:

west build -p always -b samples/hello_world

west flash

這一樣例在BBC micro:bit和ESP-WROOM-32上都可以運行。要看到輸出字符串的話,需要在你的計算機上運行任一串口終端程序。數(shù)據(jù)率一般為115200(115200,n,8,1)。消息只會輸出一次,如果錯過了就需要對開發(fā)板進行重置(圖4)。

dca2b5e8-9051-11ef-a511-92fbcf53809c.png

圖4:hello_world樣例很簡短,如果打開串口終端太慢的話就會錯過輸出。

在R4 Minima和GIGA R1上,串口輸出在1號引腳上,而不是使用Arduino IDE時的USB-C端口。這是因為USB端口是MCU的外設,而不在一個單獨的芯片上。Zephyr是一個模塊化和可擴展的OS,每一個模塊和外設都需要被專門啟用。在工程的配置文件中可以啟用外設,我們在后面會討論。

對于沒有內建串口到USB轉換器的開發(fā)板,你必須找到串口(MCU上有超過一個端口時,一般為0號端口)并通過外置的串口到USB轉換器連接到你的計算機。

6. 進階實驗

如果你已經(jīng)能夠在你的開發(fā)板上運行閃燈和hello_world樣例,接下來你就可以開始創(chuàng)建你的第一個應用了。如果只有一個樣例能運行,你應該調試另一個樣例,因為接下來的內容很快會變得復雜起來。

雖然BBC micro:bit和閃燈樣例不兼容,這并不會有什么嚴重的影響,我還是選擇它作為實驗板。Zephyr中還有幾個針對它的樣例(在samplesoardsbc_microbit文件夾中),“顯示”(display)樣例比單一LED閃爍樣例要更好。Zephyr只針對600多種支持的開發(fā)板的不到5%提供了樣例。另外,許多樣例是更加進階或者少見的用例。

當你針對BBC micro:bit、ESP-WROOM-32或者其他不兼容的開發(fā)板構建閃燈樣例時,編譯會給出一個難以理解的錯誤。錯誤信息想要告訴你,led0是一個未知的對象,led0是默認的閃燈LED(類似Arduino中的LED_BUILTIN)。micro:bit有著可以連接LED和其他外設的擴展端口,讓我們將其中一個定義為led0。

在此之前,讓我們復制一份samples/basic/blinky文件夾作為備份。下面的步驟中我們會修改samples/basic/blinky中的內容。

6.1 設備樹

為了定義led0,我們需要使用設備樹。設備樹由一個或者更多文本文件定義,其中列出了電路板上或者控制器中的外設和可用存儲。在Zephyr中,這些文件的后綴名為.dts或.dtsi(i表示include——包含),一個文件可以包含另一個文件。處理器.dtsi文件在dts文件夾中,開發(fā)板.dts和.dtsi文件在boards文件夾中,兩個文件夾內容都按照處理器架構分類。

你可以使用Visual Studio Code中的DeviceTree插件[4]查看DTS/DTSI文件,這一插件支持語法高亮和查找,增加文件的可讀性(DTS文件的語法類似C語言)。圖5所示的是nRF51822(BBC micro:bit V1的核心)的.dtsi文件的一部分,開發(fā)板的DTS文件包含這一文件。注意到uart0的狀態(tài)是“disabled”(禁用),但是在開發(fā)板的DTS文件中將其覆蓋為“okay”,即可以使用,gpio2和i2c0也是同樣。

dcdc931c-9051-11ef-a511-92fbcf53809c.png

圖5:nrf51822.dtsi文件的一部分,從右側的縮略圖可以看到文件十分長。

6.2 設備樹中的I2C總線

圖6所示的是BBC micro:bit的.dts文件的一部分,其中展示了I2C總線的設備樹。micro:bit的總線上有一個或兩個傳感器(根據(jù)不同的V1板種類有所不同),在樹中分別為mma8653fc和lsm303agr(后者中有兩個傳感器,所以在樹中出現(xiàn)兩次)。前者狀態(tài)為“okay”,后者則為“disabled”,這對我的初代micro:bit V1開發(fā)板而言是正確的。

dcffbfea-9051-11ef-a511-92fbcf53809c.png

圖6:設備樹的這一部分代表了BBC micro:bit板的I2C總線,而不是處理器;出自bbc_microbit.dts文件。

片段中所示的傳感器與FXOS8700和MMA8653FC兼容,在I2C總線上的地址為0x1d,兩個被聲明的中斷信號(int)分別與GPIO引腳27和28相連。該傳感器有一個代碼樣例供實驗用:

west build -p always -b bbc_microbit samples/sensor/fxos8700

west flash

這個樣例無法在BBC micro:bit V2上工作,因為其設備樹上的傳感器有所不同。

樣例的輸出如圖7所示。

dd1f0a62-9051-11ef-a511-92fbcf53809c.png

圖7:samples/sensor/fxos8700樣例在BBC micro:bit上的輸出。

6.3 設備樹的覆蓋

回到前面提到過的led0,設備樹中沒有提及l(fā)ed0,所以我們需要進行添加。我們可以直接在設備樹文件中添加,但這并不正確,開發(fā)板上并沒有l(wèi)ed0。正確的方法是在設備樹上添加一個覆蓋層,已有的設備樹會根據(jù)覆蓋文件的內容進行擴展(新的項目)或是覆寫(項目已經(jīng)在樹中存在)。在這里我們需要添加新的項目。

覆蓋文件必須放置在工程文件夾的boards子文件夾中。當這一子文件夾存在時,構建過程會在其中搜索名為.overlay的文件。對我來說文件名是bbc_microbit.overlay,對于V2用戶則是bbc_microbit_v2.overlay。圖8所示的是文件內容。

dd3d4752-9051-11ef-a511-92fbcf53809c.png

圖8:讓BBC micro:bit V1與閃燈樣例兼容的設備樹覆蓋文件。

6.4 增加一個閃燈LED

Zephyr針對LED有一個特殊的設備樹關鍵字leds。當創(chuàng)建一個節(jié)點(分支)時,你可以起任何名字,但是需要將其放置在leds下,這樣才能覆蓋已有的leds節(jié)點。這一新節(jié)點會被添加到設備樹的根上,所以在節(jié)點前添加一個正斜杠“/”,在DT語言中表示根。下一行代表這一分支與Zephyr內建的gpio-leds驅動兼容(驅動的接口可以在zephyrincludezephyrdriversled.h中找到)。

6.5 子節(jié)點

接下來是一組LED子節(jié)點,因為我只有一盞LED,所以只有一個子節(jié)點led_0,我將其標記為led0。標簽(label)是可選的,但是標簽讓你可以在設備樹的其他地方引用這一節(jié)點。另外,應用中(開發(fā)者)可以通過標簽訪問節(jié)點和節(jié)點的屬性。

一個子結點必須指定設備的屬性,這里的設備是LED,必需屬性只有GPIO引腳,可選標簽可以用于向應用提供文檔或是用戶可讀信息,除此之外沒有其他用途。

GPIO引腳我選擇了1,即micro:bit擴展連接器上的2號大孔。如果你使用BBC micro:bit V2的話,在這里使用4(而不是1)。

6.6 創(chuàng)建一個別稱

接下來這一步是閃燈樣例所必需的:為我們的LED創(chuàng)建led0別稱(alias)。你也許會覺得為子節(jié)點添加一個標簽就足夠了,但實際上并非如此。閃燈樣例使用DT_ALIAS宏訪問LED子節(jié)點,所以我們必須配合這個宏。這個宏需要使用別稱,因此我們在設備樹中添加了aliases塊。如果閃燈樣例使用的是DT_NODELABEL宏,別稱就沒有必要了,因為這個宏會直接獲取led0子節(jié)點。標簽和別稱同為led0會有些令人疑惑,這是為了后面能夠更好地解釋。

6.7 Zephyr宏

盡管在C/C++編程中宏的名聲并不好,Zephyr大量使用宏。有許多像DT_ALIAS和DT_NODELABEL這樣的宏幫助應用和配置工具從設備樹提取信息,Zephyr手冊的“設備樹API”(“Devicetree API”)章節(jié)有對它們的介紹。

一個有趣的發(fā)現(xiàn):許多(也許是全部?)Zephyr宏都要求參數(shù)為小寫字母和數(shù)字,其他符號都會被替代為下劃線,這被稱為“小寫字母和下劃線兼容”。舉例來說,如果我將LED子節(jié)點標記為LED-0(而不是led0),那么傳遞給DT_NODELABEL的參數(shù)將會成為led_0,即DT_NODELABEL(led_0),這是因為‘-’不是字母或者數(shù)字,而且字母必須都為小寫。換言之,對于使用設備樹宏的應用開發(fā)者而言,下劃線就是一個通配符,led_0可以指led_0、led-0、Led_0、LED-0或者ledé0等等。建議你仔細閱讀Zephyr的宏文檔。

6.8 你不能犯錯誤

注意,如果你在設備樹上犯了錯誤,編譯器會顯示致命錯誤,而并不會提供有用的信息。

6.9 純凈構建

當你修改設備樹時,你很可能會經(jīng)常需要重新構建你的應用。為了加快速度,去掉build命令中的“-p always”(p代表pristine——純凈),這樣命令就不會從頭構建所有文件。但是,如果你在逐個嘗試不同的樣例,你需要保留這個選項,否則你會看到構建文件夾不正確的錯誤。

flash命令也會運行最后執(zhí)行的build命令,所以每次你做出更改之后可以直接運行flash命令。

6.10 使用設備驅動

閃燈樣例通過調用gpio_pin_toggle_dt()函數(shù)改變LED的狀態(tài),該函數(shù)在GPIO驅動中。這一方法當然沒有問題,Zephyr還另外有一組LED驅動。使用LED驅動可以讓代碼變得更可讀,還可以提高程序的彈性和可移植性。這是因為LED驅動可以快速替換,應用代碼不需改變。Zephyr的可縮放性和模塊化在這里就體現(xiàn)出來了。

6.11 Kconfig的圖形用戶界面

將LED設備驅動整合到程序中需要幾個步驟。首先,重新配置工程以包含驅動。工程的配置由Kconfig處理,即在Linux中使用的內核構建配置系統(tǒng)。有多種方式可以和Kconfig交互,其中一種是通過圖形用戶界面(GUI)。在Zephyr中通過以下命令打開圖形界面:

west build -t guiconfig

GUI需要些時間才會打開,你會看到類似圖9這樣的界面,其中可以看到許多當前工程的信息。為了保證Kconfig能夠配合你的工程,在運行GUI前先進行一次純凈構建(-p always選項)。

dd5a6f4e-9051-11ef-a511-92fbcf53809c.png

圖9:Kconfig工程配置工具的GUI,其中有許多選項。

6.12 眾多的配置選項

先花一點時間熟悉Kconfig的配置樹,點擊加號展開分支,點擊選項進行標記,在下方的面板中能看到說明。可以看到printf()的浮點數(shù)支持是一個C++語言支持的配置選項。與此類似,還可以在Build and Link Features(構建和鏈接功能)中找到編譯器優(yōu)化選項。

配置樹中有許多選項,Device Driver(設備驅動)分支下的選項和我們相關。展開分支,向下滾動,LED驅動大概是在一半的位置:Light Emitting Diode (LED) Drivers(LED驅動),選中這一選項。選項下的子分支不需要改變,保持默認值即可(圖10)。點擊Save(保存)鍵,記下窗口底端顯示的配置文件位置,之后你可以打開這一文件查看內容。最后關閉GUI。

dd7e1fe8-9051-11ef-a511-92fbcf53809c.png

圖10:選擇Light Emitting Diode (LED) Drivers(LED驅動),子分支的值保持默認不變。

接下來在構建時就不要使用-p always選項了,否則會將你前面改變的配置復原。之后會介紹如何將選項永久保存。

6.13 使用LED設備驅動的閃燈樣例

現(xiàn)在我們可以編寫新的閃燈程序了,見圖11。首先包含設備和LED驅動的頭文件,然后在主函數(shù)中通過DEVICE_DT_GET_ANY宏從設備樹取得LED設備的引用。注意到宏的參數(shù)“gpio_leds”是“小寫字母和下劃線兼容”的,對應設備樹中l(wèi)eds節(jié)點compatible(兼容)屬性的值“gpio-leds”(上文已經(jīng)解釋過)。如果你傳入了錯誤的參數(shù),程序無法找到節(jié)點,會輸出“No device with compatible gpio-leds found”(無法找到具有gpio-leds兼容的設備)。如果設備的status屬性被設為“disabled”,同樣的消息也會出現(xiàn)。

dda045d2-9051-11ef-a511-92fbcf53809c.png

圖11重新編寫了 Blinky 程序以與 LED 設備驅動程序一起使用。請注意,該代碼沒有局限在某種開發(fā)板。該程序可以在任何設備驅動中列出了 gpio_leds(或 GPIO-LED) 設備樹的開發(fā)板上運行。

Zephyr將兼容用作名詞這件事需要花時間習慣,上面的錯誤信息不意味著沒有兼容的設備,而是沒有設備的“兼容”屬性的值為“gpio-leds”(也就是“gpio_leds”,下劃線替代了a到z和0到9以外的字符)。

第二個檢查驗證設備是否正確地初始化,如果是的話,我們將繼續(xù)。

在無限while()循環(huán)中,代碼通過驅動提供的led_on和led_off命令[6]點亮和熄滅LED,參數(shù)0代表DEVICE_DT_GET_ANY宏找到的第一個(也是唯一一個)設備,也就是led0。

6.14 檢查返回值

因為我們使用設備驅動,而不是在硬件寄存器層直接切換GPIO引腳狀態(tài),所以應當檢查驅動函數(shù)調用的返回值,確保沒有發(fā)生錯誤。驅動必須提供函數(shù)和回調,也有可選的功能。舉例來說,LED驅動必須實現(xiàn)led_on和led_off,但是led_blink是可選的。在本實驗中,led_blink未被實現(xiàn),如果你調用的話,什么也不會發(fā)生。這一函數(shù)存在,但是其中沒有內容,返回值會告訴你這一點。一般來講,檢查每個函數(shù)調用的返回值是良好的編程習慣。

通過下面的命令構建和上傳程序(注意沒有添加-p always選項):

west build -b bbc_microbit samples/basic/blinky

west flash

6.15 配置工程

當LED以0.5HZ的頻率開始閃爍,就說明我們的程序能夠運行。這時我們需要永久保存當前的配置,打開閃燈文件夾prj.conf文件,添加下面一行(Kconfig配置文件使用Python語法,不像設備樹使用C語言語法):

CONFIG_LED=y

為了檢查配置成功,進行一次純凈構建,并將可執(zhí)行文件上傳到開發(fā)板上。

6.16 調試

如果你的開發(fā)板允許調試(比如BBC micro:bit),或者你有合適的調試工具,運行下面的命令進行調試:

west debug

該命令會啟動GDB服務器,并打開GDB命令行界面(圖12)。你可以在線學習如何使用GDB,這一部分不屬于本文的范疇之內。

ddcc6130-9051-11ef-a511-92fbcf53809c.png

圖12:BBC micro:bit有原生gdb調試支持,不需要額外的工具。

7. Zephyr與Arduino的對比

現(xiàn)在你上手了Zephyr,你可能會想:為什么要使用它?Arduino難道不是更簡單?Arduino與Zephyr類似,支持許多處理器架構和數(shù)百款開發(fā)板。Arduino還有著數(shù)千種驅動和軟件庫,如果一款應用或者一個軟件庫使用Arduino核心API,它可以被快速移植到有著類似外設的兼容平臺上。Arduino的軟件也是開源的,所以Zephyr有什么優(yōu)勢?

Zephyr是作為一款工業(yè)級、健壯的RTOS設計的,支持任務調度、內存管理和設備驅動等功能。Zephyr能夠適應不同的項目復雜度,從小型的IoT設備到復雜的嵌入式系統(tǒng)。Zephyr提供更大的彈性,但是需要開發(fā)者對嵌入式開發(fā)有著深入的理解。

Arduino提供一定的實時性,但它不是一款RTOS,而是一款強調簡潔和易用的單線程應用框架。Arduino將許多底層細節(jié)都進行了抽象化,讓它對初學者非常友好。對于更加復雜的應用,Arduino可以在RTOS上使用,例如Mbed OS。將Arduino核心API移植到Zephyr的工作正在進行中。

在下一個項目中是否要使用Zephyr取決于你。至少你應該稍微進行嘗試,畢竟Zephyr會為任何一位嵌入式開發(fā)者的簡歷添彩。

8. 進一步的閱讀

本文到這里就結束了,你應該已經(jīng)發(fā)現(xiàn)Zephyr OS很復雜,學習曲線也比較陡峭。我希望本文讓你的學習過程變得簡單了一些,但這些只是基礎知識,關于Zephyr還有非常多需要學習的課題。參考資料[8]和[9]包含一些我認為有用的內容。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7542

    瀏覽量

    151316
  • 嵌入式
    +關注

    關注

    5082

    文章

    19104

    瀏覽量

    304798
  • Linux
    +關注

    關注

    87

    文章

    11292

    瀏覽量

    209323
  • RTOS
    +關注

    關注

    22

    文章

    811

    瀏覽量

    119593
  • Zephyr
    +關注

    關注

    0

    文章

    21

    瀏覽量

    5963

原文標題:Zephyr RTOS入門 —— 復雜但是強大

文章出處:【微信號:麥克泰技術,微信公眾號:麥克泰技術】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    深入理解和實現(xiàn)RTOS_連載

    一下。于是征得機工社編輯同意,開始嘗試把書稿的內容進行修改不再像書稿那樣嚴肅,而是更輕松的方式把trochili rtos細節(jié)向網(wǎng)友公布。在正式書籍出版之前,我們會連載一系列關于rtos
    發(fā)表于 05-29 11:20

    深入理解和實現(xiàn)RTOS_連載

    一下。于是征得機工社編輯同意,開始嘗試把書稿的內容進行修改不再像書稿那樣嚴肅,而是更輕松的方式把trochili rtos細節(jié)向網(wǎng)友公布。在正式書籍出版之前,我們會連載一系列關于rtos
    發(fā)表于 05-30 01:02

    應用Bluetooth Smart技術的全套智能騎行設備的技術細節(jié)和應用場景,不看肯定后悔

    應用Bluetooth Smart技術的全套智能騎行設備的技術細節(jié)和應用場景,不看肯定后悔
    發(fā)表于 05-21 06:47

    Zephyr與FreeRTOS實時性測試比較

    1、Zephyr與FreeRTOS實時性測試比較分析用Rhealstone基準程序方法,分別測試Zephyr和FreeRTOS兩個RTOS的六個實時性能指標,發(fā)現(xiàn)Zephyr指標較差。
    發(fā)表于 08-19 16:12

    MIT公布“盲動”機器人技術細節(jié)

    7月7日美國麻省理工學院近日發(fā)布公報稱,該校研究人員最新公布了一種“盲動”機器人的技術細節(jié)。這種機器人不需要借助視覺系統(tǒng),可在崎嶇地形中穿行跳躍,有望在危險工作環(huán)境中得到廣泛應用。
    的頭像 發(fā)表于 07-11 15:49 ?3070次閱讀

    意法半導體公布ST54J系統(tǒng)芯片(SoC)的技術細節(jié)

    意法半導體日前公布了其集成NFC(近場通信)控制器、安全單元和eSIM的高集成度移動安全解決方案ST54J系統(tǒng)芯片(SoC)的技術細節(jié)
    的頭像 發(fā)表于 10-10 11:01 ?6772次閱讀

    要想電流測得準,一定不能忽視的技術細節(jié)(第二講)

    要想電流測得準,一定不能忽視的技術細節(jié)(第二講)
    的頭像 發(fā)表于 07-02 11:40 ?2827次閱讀

    小米手表e-SIM技術細節(jié)揭露,明天發(fā)布

    11月4日消息,小米生態(tài)鏈總經(jīng)理屈恒揭秘了小米手表e-SIM技術細節(jié)
    的頭像 發(fā)表于 11-04 15:31 ?4657次閱讀

    一文解析鴻蒙系統(tǒng)誕生背景、技術細節(jié)生態(tài)圈

    從鴻蒙系統(tǒng)的產(chǎn)生背景、開源技術細節(jié)和產(chǎn)業(yè)鏈生態(tài)圈全面解析鴻蒙系統(tǒng)。 華為6月2日正式發(fā)布的鴻蒙系統(tǒng)無疑占據(jù)了最近熱點話題的C位,雖然不全是贊美的聲音,但這種努力打破美國壟斷,挑戰(zhàn)谷歌、蘋果在移動
    的頭像 發(fā)表于 06-11 16:14 ?6163次閱讀

    深入了解目標檢測深度學習算法的技術細節(jié)

    本文將討論目標檢測的基本方法(窮盡搜索、R-CNN、Fast R-CNN和Faster R-CNN),并嘗試理解每個模型的技術細節(jié)。為了讓經(jīng)驗水平各不相同的讀者都能夠理解,文章不會使用任何公式來進行講解。
    發(fā)表于 01-05 16:27 ?443次閱讀

    Zephyr RTOS和HC-SR04超聲波傳感器開源

    電子發(fā)燒友網(wǎng)站提供《Zephyr RTOS和HC-SR04超聲波傳感器開源.zip》資料免費下載
    發(fā)表于 06-20 09:44 ?0次下載
    <b class='flag-5'>Zephyr</b> <b class='flag-5'>RTOS</b>和HC-SR04超聲波傳感器開源

    使用Zephyr RTOS的碳漫游者

    電子發(fā)燒友網(wǎng)站提供《使用Zephyr RTOS的碳漫游者.zip》資料免費下載
    發(fā)表于 06-28 14:54 ?0次下載
    使用<b class='flag-5'>Zephyr</b> <b class='flag-5'>RTOS</b>的碳漫游者

    瑞薩正式加入Zephyr項目,攜手共建開源實時操作系統(tǒng)新生態(tài)

    近日,業(yè)界領先的半導體解決方案提供商瑞薩宣布正式加入Zephyr?項目,并榮升為銀級會員。Zephyr作為Linux基金會的開源項目,致力于面向未來、資源受限的設備打造安全、互聯(lián)且靈活的實時操作系統(tǒng)(RTOS)。瑞薩的加入無疑將
    的頭像 發(fā)表于 03-12 09:18 ?673次閱讀

    深入了解目標檢測深度學習算法的技術細節(jié)

    本文將討論目標檢測的基本方法(窮盡搜索、R-CNN、FastR-CNN和FasterR-CNN),并嘗試理解每個模型的技術細節(jié)。為了讓經(jīng)驗水平各不相同的讀者都能夠理解,文章不會使用任何公式來進行講解
    的頭像 發(fā)表于 04-30 08:27 ?336次閱讀
    <b class='flag-5'>深入</b>了解目標檢測深度學習算法的<b class='flag-5'>技術細節(jié)</b>

    LED顯示屏的換幀頻率與刷新頻率:技術細節(jié)與市場發(fā)展

    在當今數(shù)字化時代,LED顯示屏已成為信息傳遞和廣告宣傳的重要工具。然而,對于普通消費者來說,LED顯示屏背后的技術細節(jié)可能仍然是一個謎。今天,我們將深入探討LED顯示屏中的兩個關鍵概念:換幀頻率和刷新頻率,以及它們之間的關系,帶領大家了解這些
    的頭像 發(fā)表于 06-23 02:22 ?690次閱讀
    LED顯示屏的換幀頻率與刷新頻率:<b class='flag-5'>技術細節(jié)</b>與市場發(fā)展
    主站蜘蛛池模板: 亚洲精品AV无码永久无码| SM调教贱屁股眼哭叫求饶H| 成年妇女免费播放| 久久黄视频| 涩涩电影网| 99精品视频在线观看| 国产三级级在线电影| 人妻体内射精一区二区| 在线看无码的免费网站| 国产亚洲tv在线观看| 三男强一女90分钟在线观看| 97蜜桃网123| 久草大| 午夜亚洲WWW湿好爽| 成年免费三级视频| 免费果冻传媒2021在线看| 亚洲精品国偷拍自产在线观看蜜臀| 大乳牛奶女在线观看| 欧美乱妇日本无乱码特黄大片| 一本到道免费线观看| 国产亚洲一区在线| 四虎成人影院| 饱满奶大30p| 免费的好黄的漫画| 永久免费精品影视网站| 国内卡一卡二卡三免费网站| 我半夜摸妺妺的奶C了她软件| 被两根巨大同时进去高H| 男人天堂2018亚洲男人天堂| 在线观看黄色小说| 精品在线观看一区| 亚洲三区视频| 国产永久免费观看视频软件| 学校捏奶揉下面污文h| 国产精品高清视频在线| 天美传媒 免费观看| 国产69精品久久久久APP下载| 日本aa大片| 耻辱诊察室1一4集动漫在线观看| 嗯啊好爽视频| ⅹxx日本护土|