新聞中心

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

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

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

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

本文引用地址:http://www.butianyuan.cn/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)滿足此 類(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)可以符合客戶這類(lèi)的需求,如果客戶系統(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è)界客戶取得 Andes 具 OSC 之 FreeRTOS,開(kāi)發(fā)出具競(jìng)爭(zhēng)力產(chǎn)品在市 面上銷(xiāo)售,由此可知具 OSC 之 FreeRTOS 具有經(jīng)濟(jì)實(shí)用的價(jià)值,可以協(xié)助客戶 在使用 AndesCore?時(shí),設(shè)計(jì)出具有彈性且高附加價(jià)值之產(chǎn)品。



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

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉