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