在晶心平臺運行具 OSC 的 FreeRTOS
晶心科技設計 IP 的目的,是滿(mǎn)足客戶(hù)實(shí)際需求,提供低功耗高效率的產(chǎn)品 給客戶(hù),讓客戶(hù)可以做出極具競爭力的 SoC,達到客戶(hù)與晶心科技雙贏(yíng)的目的, 本文介紹具 OSC 的 FreeRTOS 產(chǎn)品,巧妙地與 AndesCore?結合,客戶(hù)導入產(chǎn)品 后,具競爭力與實(shí)用性,本文的目的是期望能夠讓更多的讀者清楚這個(gè)產(chǎn)品的特 性與優(yōu)勢進(jìn)而使用此產(chǎn)品。
本文引用地址:http://dyxdggzs.com/article/201601/285497.htm某些電子產(chǎn)品的應用是不同的時(shí)間需要運行不同的功能,這時(shí)需要大空間的 ROM 與 RAM 來(lái)存放在運行時(shí)會(huì )用到的各式各樣的功能。因為 CPU 同時(shí)間只 會(huì )運行一種功能。所以在務(wù)實(shí)與經(jīng)濟的考慮下可以使用 overlay 的方式來(lái)滿(mǎn)足此 類(lèi)型產(chǎn)品的需求,將大幅降低 RAM 空間的使用,讓硬件成本降低,使得產(chǎn)品競 爭力大大的提升。達成 overlay 的方式有兩種,純軟件 overlay 與硬件加速 overlay。 純軟件的 overlay 不需增加硬件,但軟件工程師寫(xiě)程序時(shí)需自己配置 functions 擺 放的位置,容易出錯;呼叫 functions 時(shí)需要經(jīng)過(guò)額外的處理,降低程序效能。 因此純軟件的方法多用于只需偶爾更換 overlay 的應用。例如 audio player,一條 歌播完,下一條開(kāi)始前,才需要檢查是否要用不同 decoder。我們有另一篇文章 針對軟件 overlay 做介紹,本文不多加探討。
硬件加速的 overlay 使用少許硬 件 , gate count < 2K (OSC, Overlay SRAM Controller),提供軟件透明的 overlay 處理。軟件工程師寫(xiě)程序時(shí),可以假設有一 個(gè)很大的連續程序空間,完全不需配置 functions 擺放的位置,這大大增加開(kāi)發(fā) 程序的效率;同時(shí),呼叫 functions 時(shí)完全沒(méi)有任何純軟件方式的 overhead。上 述之 OSC 優(yōu)點(diǎn)可以符合客戶(hù)這類(lèi)的需求,如果客戶(hù)系統復雜,要做的事比較多, 需要用到多任務(wù)(Multi-tasking),則晶心科技「支援 OSC 的 FreeRTOS 產(chǎn)品」 就是最佳解方案。
1. Andes OSC 工作原理
先設定AndesCore? NCEOSC100 IP中寄存器,再與運行軟件做整合搭配, 即可執行OSC的功能。
1.1 設定 OSC IP 的寄存器與動(dòng)作解說(shuō)
■ OSC Control Register, OSCCTRL (+0x00)
■ OVL_SZ: 3’h4 (16KB) RO/WI
■ OVL_VALID: 0
■ Fixed Region Size Register, OVLFS (+0x04)
■ OVL_FSZ: 8’h18 (96KB) RW
■ Overlay Region Base Register, OVLBASE (+0x08)
■ Overlay Region End Register, OVLEND (+0x0C)
在OSC設計中SRAM分為兩個(gè)區域,一個(gè)是”fixed region” ,另一個(gè)是 “overlay region”,fixed region 為低地址的 SRAM ,其大小由OVLFS 寄存器設 定。 overlay region 是一個(gè)動(dòng)態(tài)的區域,其地址由OVLBASE寄存器設定,大小 由 OVL_SZ 設定。當CPU運行時(shí)存取地址落在寄存器 OVLBASE與OVLEND之 間時(shí)OSC將自動(dòng)轉址到SRAM的overlay region內,如圖1所示。
因應實(shí)際需求設定多個(gè)Overlay 區域,當發(fā) 生 ”Overlay Miss” 時(shí) ,經(jīng)由 Overlay Exception的機制與軟件的搭配,可以將storage 中的 overlay page N 復 制到 SRAM 中的Overlay Region,如圖1所示。關(guān)于overlay page 置換的工作原 理將于下兩個(gè)章節中做說(shuō)明。
圖 1. Overlay 范例說(shuō)明
CPU運行時(shí)存取地址不在fixed region 或是當時(shí)有效的 overlay page 時(shí),會(huì ) 發(fā)生 Overlay Miss 。當 Overlay Miss 發(fā) 生時(shí) OSC 會(huì )產(chǎn) 生 illegal instruction (32’hcoddcodd)造成general exception。因為也有其他原因會(huì )產(chǎn)生general exception, 如何區分出overlay miss 與其他general exception,將于下個(gè)章節說(shuō)明。
1.2 Overlay Exception 偵測
當進(jìn)入 general exception 時(shí)可透過(guò)軟件檢驗下列程序來(lái)判斷是否為overlay miss:
Step 1 如果 interrupt level 已經(jīng)到達最大值 (PSW.INTL == Max INTL) ,這是 fetal error 不是overlay miss。
Step 2 必須是ITYPE.EYPE==1,才有機會(huì )是overlay miss。
Step 3 檢查IPC值,如果是落在fixed region 或是當時(shí)有效的 overlay page 時(shí) 這是真 正的 illegal exception case. 如果 不 是在這 兩個(gè) 區域 則是 overlay miss。
經(jīng)過(guò)前面3步驟驗證,如果確定是overlay miss ,則可進(jìn)行Overlay exception handling 的動(dòng)作。
1.3 執行 Overlay Exception Handling 的動(dòng)作
確定 overlay miss 后,做更新overlay region的動(dòng)作。
Step 1 得到新的overlay region 地址:
- 從IPC得到更新overlay page的起始位置。
- 更新OVLBASE 寄存器。
Step 2 更新的overlay page內容復制到 SRAM 中的overlay region
Step 3 最后執行iret返回overlay miss發(fā)生時(shí)的地址。
2. 具 OSC 的 FreeRTOS 介紹
Andes 結合OSC 與 FreeRTOS設計出具 OSC的FreeRTOS ,OSC的功能與 原理已經(jīng)于上個(gè)章節介紹,本章節將說(shuō)明具 OSC的FreeRTOS與一般FreeRTOS 的差異處,并列舉范例程序的運行,展現OSC與FreeRTOS的功能。
2.1 具OSC的FreeRTOS內存配置
具OSC的FreeRTOS其內存配置如圖2,范例程序的linker script設定了LMA(系 統image)的內存配置模式,其中loverlay0, overlay1 與 overlay2是仿真 storage 的 地址。linker script 設定VMA(系統執行時(shí))的內存配置模式,當系統運行進(jìn)入 overlay1, 2... 時(shí)產(chǎn)生overlay miss 觸發(fā) exception 將overlayN 內的 數據復制到 overlay region 中,這樣的設計達到一份Overlay Region 的SRAM空間可以在不同 時(shí)間執行對應不同的overlayN程序代碼的目的。
圖 2.具 OSC 的 FreeRTOS 內存配置圖
2.2 osc_hisr task
從圖2的overlay0, 1, 2 中可以發(fā)現系統會(huì )運行task1與task2。說(shuō)明FreeRTOS 做overlay region置換時(shí)也會(huì )執行scheduler 做置換task 的工作。本范例程序設計 是在standard FreeRTOS 中增加一個(gè) osc_hisr task 做overlay region 置換與管理 的工作。如何達到OSC 與 osc_hisr task的結合需從Overlay Exception Handling的 動(dòng)作開(kāi)始研討:
● 當 overlay exception 被觸發(fā)時(shí),送 message 給 queue 啟動(dòng) osc_hisr task。
● 因為 osc_hisr task 做 overlay region 資料的置換,所以 osc_hisr task 尚未執 行完成前,不可以執行 Overlay Exception Handling 的 iret.
osc_hisr task 的主要工作在:
● Map overlay region
● overlay region 數據的復制。
osc_hisr task 設計的原則:
● 此 task 必須是最高 priority task.
● 此 task 必須放在 fixed region.
2.3 范例程序運行
具 OSC 的 FreeRTOS 在 Andes EVB 上直接運行得到的結果如圖 3,范例程 序中鍵入 3 時(shí),是進(jìn)行 task 轉換,因為不同 task 運行相對應的 overlay function 從 console task 轉成 task1 再轉成 task2 也會(huì )產(chǎn)生相對應的 page fault 執行 osc_hisr task。由圖 3 紅色箭頭與數字轉變可以得知 task 轉換啟動(dòng) function overlay 運作, 從此范例程序中可同時(shí)驗證 OSC 與 FreeRTOS 兩者的功能。
圖 3.范例程序執行結果
3. 結語(yǔ)
本文第一章說(shuō)明 Andes OSC 的工作原理與功能,第二章說(shuō)明 FreeRTOS 如何 與 Andes OSC 整合運作,在 OSC 的 FreeROTS 中也增加一個(gè)最高 priority task “osc_hisr” 來(lái)執行 OSC 相對應的功能,進(jìn)而說(shuō)明了具 OSC 的 FreeRTOS 需注意 的設計原則,具 OSC 之 FreeRTOS 是由軟件與硬件單元所組成,兼具硬件的效 能與軟件的彈性。
已經(jīng)有業(yè)界客戶(hù)取得 Andes 具 OSC 之 FreeRTOS,開(kāi)發(fā)出具競爭力產(chǎn)品在市 面上銷(xiāo)售,由此可知具 OSC 之 FreeRTOS 具有經(jīng)濟實(shí)用的價(jià)值,可以協(xié)助客戶(hù) 在使用 AndesCore?時(shí),設計出具有彈性且高附加價(jià)值之產(chǎn)品。
評論