新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 在晶心平臺運(yùn)行具 OSC 的 FreeRTOS

在晶心平臺運(yùn)行具 OSC 的 FreeRTOS

作者:沈智明,資深經(jīng)理,晶心科技股份有限公司 時間:2016-01-08 來源: 收藏

設(shè)計 IP 的目的,是滿足客戶實際需求,提供低功耗高效率的產(chǎn)品 給客戶,讓客戶可以做出極具競爭力的 SoC,達(dá)到客戶與雙贏的目的, 本文介紹具 OSC 的 FreeRTOS 產(chǎn)品,巧妙地與 AndesCore?結(jié)合,客戶導(dǎo)入產(chǎn)品 后,具競爭力與實用性,本文的目的是期望能夠讓更多的讀者清楚這個產(chǎn)品的特 性與優(yōu)勢進(jìn)而使用此產(chǎn)品。

本文引用地址:http://m.butianyuan.cn/article/201601/285497.htm

某些電子產(chǎn)品的應(yīng)用是不同的時間需要運(yùn)行不同的功能,這時需要大空間的 ROM  與  RAM  來存放在運(yùn)行時會用到的各式各樣的功能。因為 CPU 同時間只 會運(yùn)行一種功能。所以在務(wù)實與經(jīng)濟(jì)的考慮下可以使用 overlay 的方式來滿足此 類型產(chǎn)品的需求,將大幅降低 RAM 空間的使用,讓硬件成本降低,使得產(chǎn)品競 爭力大大的提升。達(dá)成 overlay 的方式有兩種,純軟件 overlay 與硬件加速  overlay。 純軟件的 overlay 不需增加硬件,但軟件工程師寫程序時需自己配置 functions 擺 放的位置,容易出錯;呼叫 functions 時需要經(jīng)過額外的處理,降低程序效能。 因此純軟件的方法多用于只需偶爾更換 overlay 的應(yīng)用。例如 audio player,一條 歌播完,下一條開始前,才需要檢查是否要用不同 decoder。我們有另一篇文章 針對軟件 overlay 做介紹,本文不多加探討。

硬件加速的  overlay  使用少許硬 件 , gate  count  <  2K  (OSC,  Overlay  SRAM Controller),提供軟件透明的 overlay 處理。軟件工程師寫程序時,可以假設(shè)有一 個很大的連續(xù)程序空間,完全不需配置 functions 擺放的位置,這大大增加開發(fā) 程序的效率;同時,呼叫 functions 時完全沒有任何純軟件方式的 overhead。上 述之 OSC 優(yōu)點可以符合客戶這類的需求,如果客戶系統(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 的寄存器與動作解說

■   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è)計中SRAM分為兩個區(qū)域,一個是”fixed region” ,另一個是 “overlay region”,fixed region  為低地址的  SRAM  ,其大小由OVLFS  寄存器設(shè) 定。  overlay region  是一個動態(tài)的區(qū)域,其地址由OVLBASE寄存器設(shè)定,大小 由  OVL_SZ 設(shè)定。當(dāng)CPU運(yùn)行時存取地址落在寄存器  OVLBASE與OVLEND之 間時OSC將自動轉(zhuǎn)址到SRAM的overlay region內(nèi),如圖1所示。

因應(yīng)實際需求設(shè)定多個Overlay  區(qū)域,當(dāng)發(fā) 生  ”O(jiān)verlay  Miss”  時 ,經(jīng)由 Overlay Exception的機(jī)制與軟件的搭配,可以將storage 中的  overlay   page N  復(fù) 制到 SRAM 中的Overlay Region,如圖1所示。關(guān)于overlay page 置換的工作原 理將于下兩個章節(jié)中做說明。

圖 1. Overlay 范例說明

CPU運(yùn)行時存取地址不在fixed region  或是當(dāng)時有效的  overlay page  時,會 發(fā)生 Overlay  Miss 。當(dāng) Overlay  Miss  發(fā) 生時 OSC 會產(chǎn) 生 illegal  instruction (32’hcoddcodd)造成general exception。因為也有其他原因會產(chǎn)生general exception, 如何區(qū)分出overlay miss  與其他general exception,將于下個章節(jié)說明。

1.2 Overlay Exception 偵測

當(dāng)進(jìn)入  general  exception  時可透過軟件檢驗下列程序來判斷是否為overlay miss:

Step 1 如果  interrupt level  已經(jīng)到達(dá)最大值  (PSW.INTL == Max INTL)  ,這是  fetal error 不是overlay miss。

Step 2 必須是ITYPE.EYPE==1,才有機(jī)會是overlay miss。

Step 3  檢查IPC值,如果是落在fixed region  或是當(dāng)時有效的  overlay page 時 這是真 正的  illegal  exception  case.  如果 不 是在這 兩個 區(qū)域 則是 overlay miss。

經(jīng)過前面3步驟驗證,如果確定是overlay miss  ,則可進(jìn)行Overlay exception handling 的動作。

1.3 執(zhí)行 Overlay Exception Handling 的動作

確定  overlay miss  后,做更新overlay region的動作。

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ā)生時的地址。

2. 具 OSC 的 FreeRTOS 介紹

Andes 結(jié)合OSC 與 FreeRTOS設(shè)計出具 OSC的FreeRTOS ,OSC的功能與 原理已經(jīng)于上個章節(jié)介紹,本章節(jié)將說明具 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í)行時)的內(nèi)存配置模式,當(dāng)系統(tǒng)運(yùn)行進(jìn)入 overlay1,  2...  時產(chǎn)生overlay  miss  觸發(fā)  exception  將overlayN 內(nèi)的 數(shù)據(jù)復(fù)制到 overlay region  中,這樣的設(shè)計達(dá)到一份Overlay Region  的SRAM空間可以在不同 時間執(zhí)行對應(yīng)不同的overlayN程序代碼的目的。

圖 2.具 OSC 的 FreeRTOS 內(nèi)存配置圖

2.2 osc_hisr task

從圖2的overlay0, 1, 2 中可以發(fā)現(xiàn)系統(tǒng)會運(yùn)行task1與task2。說明FreeRTOS 做overlay region置換時也會執(zhí)行scheduler 做置換task 的工作。本范例程序設(shè)計 是在standard FreeRTOS 中增加一個 osc_hisr task 做overlay region 置換與管理 的工作。如何達(dá)到OSC 與  osc_hisr task的結(jié)合需從Overlay Exception Handling的 動作開始研討:

●    當(dāng) overlay exception  被觸發(fā)時,送 message 給  queue 啟動  osc_hisr task。

●    因為 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è)計的原則:

●    此 task  必須是最高 priority task.

●    此  task 必須放在 fixed region.

2.3 范例程序運(yùn)行

具 OSC 的 FreeRTOS  在 Andes EVB 上直接運(yùn)行得到的結(jié)果如圖 3,范例程 序中鍵入 3 時,是進(jìn)行 task 轉(zhuǎn)換,因為不同 task 運(yùn)行相對應(yīng)的 overlay function 從 console task  轉(zhuǎn)成 task1  再轉(zhuǎn)成 task2 也會產(chǎn)生相對應(yīng)的 page fault 執(zhí)行 osc_hisr task。由圖 3 紅色箭頭與數(shù)字轉(zhuǎn)變可以得知 task 轉(zhuǎn)換啟動 function  overlay 運(yùn)作, 從此范例程序中可同時驗證 OSC 與 FreeRTOS 兩者的功能。

圖 3.范例程序執(zhí)行結(jié)果

3.  結(jié)語

本文第一章說明 Andes OSC 的工作原理與功能,第二章說明 FreeRTOS 如何 與 Andes  OSC 整合運(yùn)作,在 OSC 的 FreeROTS 中也增加一個最高 priority task “osc_hisr” 來執(zhí)行 OSC 相對應(yīng)的功能,進(jìn)而說明了具 OSC 的 FreeRTOS 需注意 的設(shè)計原則,具 OSC 之 FreeRTOS 是由軟件與硬件單元所組成,兼具硬件的效 能與軟件的彈性。

已經(jīng)有業(yè)界客戶取得 Andes 具 OSC 之 FreeRTOS,開發(fā)出具競爭力產(chǎn)品在市 面上銷售,由此可知具 OSC 之 FreeRTOS 具有經(jīng)濟(jì)實用的價值,可以協(xié)助客戶 在使用 AndesCore?時,設(shè)計出具有彈性且高附加價值之產(chǎn)品。



關(guān)鍵詞: andescore soc 晶心科技 freertos

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉