ZYNQ上運(yùn)行FreeRTOS
該項(xiàng)目演示如何在 Zynq SoC 上開(kāi)始使用 FreeRTOS。
介紹
AMD Zynq SoC 器件將典型 FPGA 的可編程邏輯結(jié)構(gòu)和 ARM 處理器內(nèi)核提供的處理能力組合到單個(gè)芯片中,可用作構(gòu)建各種嵌入式系統(tǒng)應(yīng)用的平臺(tái)。可以在 PL 中設(shè)計(jì)專用邏輯結(jié)構(gòu)來(lái)處理計(jì)算密集型任務(wù),而 PS 可以控制 PL 并提供用戶應(yīng)用程序。
內(nèi)窺鏡就是可以利用這種功能的產(chǎn)品的一個(gè)例子。視頻鏈在 PL 中實(shí)現(xiàn),處理來(lái)自攝像頭的圖像信號(hào),并提供視頻保存、分辨率更改、色彩校正等額外功能。然后可以將處理后的視頻發(fā)送到顯示接收器。
在本教程中,將展示如何在 Zynq PS 中在 FreeRTOS 內(nèi)核上運(yùn)行應(yīng)用程序。
FreeRTOS 實(shí)時(shí)操作系統(tǒng)
在了解什么是 FreeRTOS 之前,我們先來(lái)看看開(kāi)發(fā)嵌入式系統(tǒng)的三種方式:
三種方法的區(qū)別在于軟件部分的開(kāi)發(fā)方式。軟件可以分為用戶空間(應(yīng)用程序所在的位置)和內(nèi)核空間(驅(qū)動(dòng)程序和庫(kù)所在的位置)。軟件的大小從裸機(jī)到嵌入式操作系統(tǒng)遞增。
FreeRTOS 是一款專用于實(shí)時(shí)應(yīng)用程序的開(kāi)源操作系統(tǒng)。它們提供了可以構(gòu)建應(yīng)用程序的內(nèi)核空間。開(kāi)發(fā)人員能夠定制 FreeRTOS 內(nèi)核,允許構(gòu)建具有實(shí)時(shí)約束的應(yīng)用程序。不適合 RTOS 的應(yīng)用程序的一個(gè)示例是運(yùn)行成熟的 GUI。
接下來(lái)讓我們深入了解如何在 Zynq PS 上設(shè)置 FreeRTOS。
打開(kāi)Vivado并在新創(chuàng)建的block design中添加Zynq PS。
在PS中自定義外設(shè),我們這里主要注意添加 UART 外設(shè)。其他諸如GPIO、SD0、USB0 等按照自己的硬件啟用。
保存并驗(yàn)證設(shè)計(jì)。然后創(chuàng)建 HDL wrapper、生成輸出產(chǎn)品并生成比特流。將硬件平臺(tái)信息導(dǎo)出為 XSA。
Vitis 軟件開(kāi)發(fā)
啟動(dòng) Vitis IDE,并使用 XSA 創(chuàng)建一個(gè)新的平臺(tái)項(xiàng)目。選擇 freeRTOS 內(nèi)核作為操作系統(tǒng)。
創(chuàng)建平臺(tái)項(xiàng)目后,修改其BSP禁用xiltimer軟件庫(kù)。
然后搭建平臺(tái)。現(xiàn)在使用 freeRTOS Hello World 模板創(chuàng)建一個(gè)新的應(yīng)用程序項(xiàng)目。
在解釋主要應(yīng)用程序代碼之前,我想提一下 freeRTOS 內(nèi)核內(nèi)的調(diào)度程序需要將計(jì)時(shí)器配置為默認(rèn)頻率 100Hz 才能運(yùn)行。這可以是軟件或硬件定時(shí)器。這就是為什么我選擇在 BSP 中禁用軟件定時(shí)器及其庫(kù)。否則,應(yīng)用程序運(yùn)行時(shí)會(huì)與硬件定時(shí)器發(fā)生沖突。
主應(yīng)用程序使用 xTaskCreate() 函數(shù)定義兩個(gè) FreeRTOS 任務(wù):
然后,它將硬件定時(shí)器配置為 10 秒,之后就會(huì)過(guò)期。
現(xiàn)在重要的是要弄清楚該設(shè)計(jì)使用的是哪個(gè)硬件定時(shí)器?請(qǐng)記住,在 Vivado 中自定義 Zynq PS 時(shí),我們沒(méi)有啟用任何此類定時(shí)器 (TTC/SWDT)。我們可以查看平臺(tái)項(xiàng)目中存在的移植代碼。
portZynq7000.c 文件包含有關(guān)如何移植 freeRTOS 內(nèi)核以適應(yīng)基于 Zynq 7000 SoC 的設(shè)備的信息。打開(kāi)后我們可以看到如下的條件定義:
因此,在禁用 xiltimer 后,設(shè)計(jì)依賴于使用 scutimer 生成定時(shí)器中斷。此 scutimer 是指每個(gè) ARM-A9 內(nèi)核內(nèi)存在的 CPU 專用定時(shí)器。
如果詳細(xì)閱讀 portZynq7000.c,就可以看到如何使用 scutimer 和 scugic 來(lái)設(shè)置定時(shí)器中斷。
定時(shí)器啟動(dòng)后,使用 vTaskStartScheduler() 調(diào)用啟動(dòng) freeRTOS 內(nèi)核的調(diào)度程序。調(diào)度程序?qū)?dòng)上面定義的兩個(gè)任務(wù),并且程序?qū)?zhí)行這兩個(gè)任務(wù)中定義的任何代碼。
最終結(jié)果
成功構(gòu)建軟件后,在板上運(yùn)行應(yīng)用程序。就會(huì)看到以下文本打印在 UART 控制臺(tái)中:
結(jié)論
就是這樣!您已準(zhǔn)備好開(kāi)始在 Zynq SoC 上運(yùn)行的 freeRTOS 內(nèi)核上開(kāi)發(fā)更復(fù)雜的程序。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1629文章
21729瀏覽量
602977 -
soc
+關(guān)注
關(guān)注
38文章
4161瀏覽量
218157 -
可編程邏輯
+關(guān)注
關(guān)注
7文章
515瀏覽量
44083 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62138 -
Zynq
+關(guān)注
關(guān)注
10文章
609瀏覽量
47174
原文標(biāo)題:ZYNQ上運(yùn)行FreeRTOS
文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論