新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 在晶心平台运行具 OSC 的 FreeRTOS

在晶心平台运行具 OSC 的 FreeRTOS

作者:沈智明,资深经理,晶心科技股份有限公司时间:2016-01-08来源:收藏

设计 IP 的目的,是满足客户实际需求,提供低功耗高效率的产品 给客户,让客户可以做出极具竞争力的 SoC,达到客户与双赢的目的, 本文介绍具 OSC 的 FreeRTOS 产品,巧妙地与 AndesCore™结合,客户导入产品 后,具竞争力与实用性,本文的目的是期望能够让更多的读者清楚这个产品的特 性与优势进而使用此产品。

本文引用地址:http://www.eepw.com.cn/article/201601/285497.htm

某些电子产品的应用是不同的时间需要运行不同的功能,这时需要大空间的 ROM  与  RAM  来存放在运行时会用到的各式各样的功能。因为 CPU 同时间只 会运行一种功能。所以在务实与经济的考虑下可以使用 overlay 的方式来满足此 类型产品的需求,将大幅降低 RAM 空间的使用,让硬件成本降低,使得产品竞 争力大大的提升。达成 overlay 的方式有两种,纯软件 overlay 与硬件加速  overlay。 纯软件的 overlay 不需增加硬件,但软件工程师写程序时需自己配置 functions 摆 放的位置,容易出错;呼叫 functions 时需要经过额外的处理,降低程序效能。 因此纯软件的方法多用于只需偶尔更换 overlay 的应用。例如 audio player,一条 歌播完,下一条开始前,才需要检查是否要用不同 decoder。我们有另一篇文章 针对软件 overlay 做介绍,本文不多加探讨。

硬件加速的  overlay  使用少许硬 件 , gate  count  <  2K  (OSC,  Overlay  SRAM Controller),提供软件透明的 overlay 处理。软件工程师写程序时,可以假设有一 个很大的连续程序空间,完全不需配置 functions 摆放的位置,这大大增加开发 程序的效率;同时,呼叫 functions 时完全没有任何纯软件方式的 overhead。上 述之 OSC 优点可以符合客户这类的需求,如果客户系统复杂,要做的事比较多, 需要用到多任务(Multi-tasking),则「支援 OSC 的 FreeRTOS 产品」 就是最佳解方案。

1. Andes OSC  工作原理

先设定AndesCore™ NCEOSC100 IP中寄存器,再与运行软件做整合搭配, 即可执行OSC的功能。

1.1 设定 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设计中SRAM分为两个区域,一个是”fixed region” ,另一个是 “overlay region”,fixed region  为低地址的  SRAM  ,其大小由OVLFS  寄存器设 定。  overlay region  是一个动态的区域,其地址由OVLBASE寄存器设定,大小 由  OVL_SZ 设定。当CPU运行时存取地址落在寄存器  OVLBASE与OVLEND之 间时OSC将自动转址到SRAM的overlay region内,如图1所示。

因应实际需求设定多个Overlay  区域,当发 生  ”Overlay  Miss”  时 ,经由 Overlay Exception的机制与软件的搭配,可以将storage 中的  overlay   page N  复 制到 SRAM 中的Overlay Region,如图1所示。关于overlay page 置换的工作原 理将于下两个章节中做说明。

图 1. Overlay 范例说明

CPU运行时存取地址不在fixed region  或是当时有效的  overlay page  时,会 发生 Overlay  Miss 。当 Overlay  Miss  发 生时 OSC 会产 生 illegal  instruction (32’hcoddcodd)造成general exception。因为也有其他原因会产生general exception, 如何区分出overlay miss  与其他general exception,将于下个章节说明。

1.2 Overlay Exception 侦测

当进入  general  exception  时可透过软件检验下列程序来判断是否为overlay miss:

Step 1 如果  interrupt level  已经到达最大值  (PSW.INTL == Max INTL)  ,这是  fetal error 不是overlay miss。

Step 2 必须是ITYPE.EYPE==1,才有机会是overlay miss。

Step 3  检查IPC值,如果是落在fixed region  或是当时有效的  overlay page 时 这是真 正的  illegal  exception  case.  如果 不 是在这 两个 区域 则是 overlay miss。

经过前面3步骤验证,如果确定是overlay miss  ,则可进行Overlay exception handling 的动作。

1.3 执行 Overlay Exception Handling 的动作

确定  overlay miss  后,做更新overlay region的动作。

Step 1 得到新的overlay region  地址:

-    从IPC得到更新overlay page的起始位置。

-    更新OVLBASE  寄存器。

Step 2 更新的overlay page内容复制到  SRAM  中的overlay region

Step 3 最后执行iret返回overlay miss发生时的地址。

2. 具 OSC 的 FreeRTOS 介绍

Andes 结合OSC 与 FreeRTOS设计出具 OSC的FreeRTOS ,OSC的功能与 原理已经于上个章节介绍,本章节将说明具 OSC的FreeRTOS与一般FreeRTOS 的差异处,并列举范例程序的运行,展现OSC与FreeRTOS的功能。

2.1 具OSC的FreeRTOS内存配置

具OSC的FreeRTOS其内存配置如图2,范例程序的linker script设定了LMA(系 统image)的内存配置模式,其中loverlay0, overlay1  与  overlay2是仿真  storage 的 地址。linker script 设定VMA(系统执行时)的内存配置模式,当系统运行进入 overlay1,  2...  时产生overlay  miss  触发  exception  将overlayN 内的 数据复制到 overlay region  中,这样的设计达到一份Overlay Region  的SRAM空间可以在不同 时间执行对应不同的overlayN程序代码的目的。

图 2.具 OSC 的 FreeRTOS 内存配置图

2.2 osc_hisr task

从图2的overlay0, 1, 2 中可以发现系统会运行task1与task2。说明FreeRTOS 做overlay region置换时也会执行scheduler 做置换task 的工作。本范例程序设计 是在standard FreeRTOS 中增加一个 osc_hisr task 做overlay region 置换与管理 的工作。如何达到OSC 与  osc_hisr task的结合需从Overlay Exception Handling的 动作开始研讨:

●    当 overlay exception  被触发时,送 message 给  queue 启动  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 时,是进行 task 转换,因为不同 task 运行相对应的 overlay function 从 console task  转成 task1  再转成 task2 也会产生相对应的 page fault 执行 osc_hisr task。由图 3 红色箭头与数字转变可以得知 task 转换启动 function  overlay 运作, 从此范例程序中可同时验证 OSC 与 FreeRTOS 两者的功能。

图 3.范例程序执行结果

3.  结语

本文第一章说明 Andes OSC 的工作原理与功能,第二章说明 FreeRTOS 如何 与 Andes  OSC 整合运作,在 OSC 的 FreeROTS 中也增加一个最高 priority task “osc_hisr” 来执行 OSC 相对应的功能,进而说明了具 OSC 的 FreeRTOS 需注意 的设计原则,具 OSC 之 FreeRTOS 是由软件与硬件单元所组成,兼具硬件的效 能与软件的弹性。

已经有业界客户取得 Andes 具 OSC 之 FreeRTOS,开发出具竞争力产品在市 面上销售,由此可知具 OSC 之 FreeRTOS 具有经济实用的价值,可以协助客户 在使用 AndesCore™时,设计出具有弹性且高附加价值之产品。



评论


相关推荐

技术专区

关闭