将μC/OS-II移植到AndesCore™ N1033A-S处理器

发布者:泥匠手最新更新时间:2018-04-11 来源: eefocus关键字:μC  OS-II  移植  AndesCore™  N1033A-S  处理器 手机看文章 扫描二维码
随时随地手机看文章

    μC/OS-II是一种代码公开、可裁剪的嵌入式实时多任务操作系统。该内核通过实现抢占式任务调度算法和多任务间通信等功能,使之具有执行效率高、实时性能优良等特点。另外,其占用空间非常小(最小可裁剪至2KB)并且具有高度可移植性,因此被广泛的应用于微处理器和微控制器上。

    晶心科技 (Andes)作为亚洲首家原创性32位微处理器IP与系统芯片平台设计公司,推出的AndesCore™ N10系列产品N1033A-S, 搭配应用广泛的嵌入式实时操作系统μC/OS-II以及相关的软硬件开发资源,有效的帮助客户降低现有成本、提升系统效能、减少系统功耗,并缩短产品开发上市时程。本文将介绍如何将μC/OS-II移植到AndesCore™ N1033A-S处理器上。


    1. 开发环境及处理器介绍

    1.1 软/硬件开发环境

    本移植过程使用的软件环境是AndeSight? v1.4集成开发套件,它是晶心科技最新推出的针对各种AndesCore?的软件集成开发环境,包括编译器、调试器、分析器以及强大的ESL工具。硬件平台采用晶心科技的FPGA评估板ADP-XC5,该评估板采用AndesCore? N1033A-S作为处理器内核,并具有丰富的片上资源。

    AndesCore™ N1033A-S介绍

    AndesCore™ N10系列产品N1033A-S是一款哈弗结构的32位RISC处理器内核,具有5级流水线(pipeline)及动态分支预测(DynamIC branch preDICTION)架构。N1033A-S新加入了最新AndeSTar™ V2 指令集,把CPU效能推至1.66DMIPS/MHz之上。同时还实现完整的Audio指令集,达到完全整合CPU与DSP功能的目标。N1033A-S还支持向量中断模式以及2D 直接内存访问(DMA)功能,更为实时信号处理添增效能。

    2. μC/OS-II在N1033A-S上的可移植性分析

    μC/OS-II具有高度可移植性,目前已经移植到近40多种处理器体系上,涵盖从8位到64位的各种CPU(包括DSP)。

    μC/OS-II的正常运行需要处理器平台满足以下要求: 1)处理器的C编译器能产生可重入代码;2)用C语言就可以打开和关闭中断;3)处理器支持中断,并且能产生定时中断;4)处理器支持能够容纳一定量数据的硬件堆栈;5)处理器有将堆栈指针和其它CPU寄存器读出和存储到堆栈或内存中的指令。

    AndesCore? N1033A-S内部提供了32个通用寄存器,其中R31被用来做专门的堆栈指针。32根地址线最多可访问4GB存储单元,因此只要系统RAM空间允许,堆栈空间理论不会产生限制。N1033A-S处理器提供的AndeStar? V2指令集包含了丰富且十分高效的对堆栈进行操作的指令。例如指令SMW(store multiple word)可实现仅使用一条指令将多个寄存器的值存储到堆栈中并同时更新堆栈指针位置,而且还能很好的处理地址非对齐字的存取。N1033A-S支持中断并能产生定时器中断,处理器中的PSW(Processor Status Word)寄存器中包含一个全局中断禁止位GIE,控制它便可实现打开和关闭中断。此外,AndeSight?集成开发环境中内置的编译器可以产生可重入代码,并且支持内联汇编,C环境中可以任意进行开关中断的操作。综上所述,μC/OS-II完全可以移植到N1033A-S上运行。

    3. 移植步骤

    为了方便移植,大部分的μC/OS-II代码是用C语言写的,用户只需要用C语言和汇编语言写一些与处理器相关的代码就可以实现移植。这部分工作的内容包括:一个完成基本设置的头文件os_cpu.h、一个与处理器相关的汇编文件os_cpu_a.S和一个与操作系统相关的C代码文件os_cpu_c.c.

    3.1在os_cpu.h中完成基本的配置和定义

    3.1.1. 定义与处理器相关的数据类型

    为保证可移植性,μC/OS-II没有直接使用C语言中的short、int和long等数据类型的定义,因为不同的处理器有不同的字长。对于N1033A-S这样的32位处理器,其数据类型定义实现如下:

3.1.2. 定义中断禁止/允许宏

做为实时内核,μC/OS-II需要先禁止中断再访问代码临界区,并且在访问完毕后重新允许中断。μC/OS-II定义了两个宏来禁止和允许中断:OS_ENteR_CRITICAL()和OS_EXIT_CRITICAL()。在N1033A-S处理器上的实现代码如下

GIE_SAVE 和GIE_RESTORE的实现如下:

中断禁止时间是判断系统实时性的重要指标之一。中断禁止时间能否达到最短,不仅与操作系统的设计有关,还依赖于处理器结构和编译器产生的代码质量。从上面的实现代码看到,由于Andes处理器提供了setgie.d和setgie.e两条直接控制中断的开关的指令,整个禁止/允许中断的过程经过编译器产生的机器码只有3/2条,最大限度地减小了中断禁止时间。

3.1.3. 定义栈增长方向

μC/OS-II使用结构常量OS_STK_GROWTH来指定堆栈的增长方式,设置为0表示堆栈从下往上增长,设置为1表示从上往下增长。这里我们定义成后者,即堆栈的增长方向是从内存高地址向低地址方向递减并且堆栈指针总是指向栈顶数据:

3.1.4.定义OS_TASK_SW()宏

OS_TASK_SW()是一个宏,它在μC/OS-Ⅱ从低优先级任务切换到最高优先级任务时被调用的。任务切换只是简单的将处理器寄存器保存到将被挂起的任务的堆栈中,并且将更高优先级的任务从堆栈中恢复出来。可采用两种方式定义这个宏,使用软中断将中断向量指向OSCtxSW()函数;或者直接调用OSCtxSW()函数,这里我们采用后者(OSCtxSW()函数的实现将在后面介绍):


3.2处理器相关部分汇编实现

μC/OS-Ⅱ的移植需要用户编写三个最基本的汇编语言函数:OSStartHighRdy(),OSCtxSw(),OSINTCtxSw()。它们会共用一些代码,为了方便阅读将它们写在同一个汇编文件os_cpu_a.S中。

 

3.2.1 OSStartHighRdy():运行优先级最高的就绪任务。

OSStartHighRdy()函数是在OSStart()多任务启动之后,负责从最高优先级任务的TCB控制块中获得该任务的堆栈指针SP,并通过SP恢复CPU现场以启动最高优先级的任务执行。另外OSStartHighRdy()还必须在最高优先级任务恢复之前和调用OSTaskSwHook()之后设置OSRunning为TRUE.其实现代码如下:

3.2.2 OSCtxSw()和OSIntCtxSw()

OSCtxSw()是任务优先级切换函数,它的作用是先将当前任务的CPU现场保存到该任务的堆栈中,然后获得最高优先级任务的堆栈指针,并从该堆栈中恢复此任务的CPU现场,使之继续执行,该函数就完成了一次任务切换。

OSIntCtxSw()是中断级的任务切换函数。由于中断可能会使更高优先级的任务进入就绪态,因此为了让更高优先级的任务能立即运行,在中断服务子程序最后会调用OSIntCtxSw()做任务切换。这样做能够尽快的让高优先级的任务得到相应的处理,保证系统的实时性能。

OSCtxSw()和OSIntCtxSw()都是用于任务切换的函数,其区别在于,在OSIntCtxSw()中无需再保存处理器寄存器,因为在OSIntCtxSw()之前已发生中断,所以可以保证所有的处理器寄存器都被正确地保存到了被中断的任务的堆栈之中。OSCtxSw()和OSIntCtxSw()实现代码如下:

N1033A-S处理器定义了四级(0-3)中断,在各级中断的转换时需要保存当前中断层级的寄存器。调用OSCtxSw()时,中断将由0级(即没有中断)转到1级,所以需要将第0级的寄存器PSW和PC保存到第1级的寄存器IPSW和IPC中。CtxSave和CtxRestore两个宏用来保存和恢复任务上下文。需要保存或恢复的寄存器包括32个通用寄存器(R0-R31)的值、程序计数器(PC)的值以及处理器状态字寄存器(PSW)的值。宏IntlSwitch n通过修改PSW.INIT的值来切换中断层级。CtxSave和IntlSwitch的汇编实现如下(由于CtxRestore与CtxSave过程类似,这里不做赘述):

3.3 移植C语言编写的几个与操作系统相关的函数

μC/OS-Ⅱ有六个与CPU相关的函数:OSTaskStkInit()、OSTaskCreateHook()、OSTaskDelHook()、OSTaskSwHook()、OSTaskStatHook()、OSTimeTICkHook(),它们被定义在ucos_ii.h中。其中唯一必须移植的函数是任务堆栈初始化函数OSTaskStkInit(),其它五个函数必须得声明但没必要包含代码。因此这里我们只介绍OSTaskStkInit(),其代码的实现如下:

OSTaskStkInit()在任务创建时被调用,负责初始化任务的堆栈结构并返回新堆栈的指针,使得堆栈看起来就像刚发生过中断并将所有的寄存器保存到堆栈中的情形一样。除了要保存任务的地址、变量的指针以及处理器状态字的值外,Andes N1033A-S处理器还要求用户保存所有32个通用寄存器(R0-R31)、四个用户寄存器(d0.hi, d0.lo, d1.hi, d1.lo)。还有一点需要注意,在N1033A-S处理器中,堆栈指针的地址必须满足8Byte对齐,程序最后一段逻辑即将堆栈指针调整到正确的位置,这一点在编写其他代码例如在宏CtxSave中同样需要注意。

4. 结语

基于AndesStar?架构的优势,可以很容易的实现μC/OS-Ⅱ在N1033A-S处理器上的移植。不仅μC/OS-Ⅱ,其它嵌入式操作系统也可以很方便地移植到AndesCore?相应的处理器上,例如Nuclues、FreeRTOS以及Contiki。

晶心科技利用 AndesCore? N1033A-S高效能的 Audio ISA 和 FPGA开发平台弹性的设计架构,基于各种RTOS,为客户提供了的丰富的软件资源(中间件、优化的函数库、应用实例等)以及完整的多媒体语音解决方案,从而帮助客户更快地在Andes平台上进行产品开发。


关键字:μC  OS-II  移植  AndesCore™  N1033A-S  处理器 引用地址:将μC/OS-II移植到AndesCore™ N1033A-S处理器

上一篇:Cortex-M3内核的μC/OSII操作系统的安全性和稳定性研
下一篇:电脑鼠控制系统工作原理及设计方案

推荐阅读最新更新时间:2024-03-16 15:59

MEMS市场加速回暖 3C应用领域独占鳌头
2007年苹果iPhone手机、任天堂Wii游戏机火爆销售一度轰动业界,这其中,MEMS加速度传感器功不可没,它所带来的全新使用体验以及独特人机交互方式不仅造就了产品本身的巨大成功,更是给日趋同质化的电子整机市场注入了新鲜血液。这也使得近三年我国整体MEMS市场得以迅速引爆,市场亦得以丰收。然而,经历过这一轮几近疯狂的增长后,2008年,在全球金融危机导致我国电子整机产量出货量下降的作用下,MEMS市场也不可避免地有所降温。这一刚刚开始发育且本应该急速发展的市场也因此提前进入理性增长前的调整期,MEMS市场增幅、MEMS产品应用领域、电子整机渗透率、主力厂商竞争格局也都呈现出新的特点: 加速度计市场增速陡然回落 需求、价格
[手机便携]
是德科技扩大蜂窝车联网(C-V2X)测试解决方案的应用范围
是德科技扩大蜂窝车联网(C-V2X)测试解决方案的应用范围,覆盖整个汽车工作流程 助力开发人员了解、整合和部署具有高级安全特性的新技术 2021 年 6 月8日,北京——是德科技 日前宣布,推出全新Keysight C-V2X 自动驾驶仿真(ADE)解决方案。该解决方案运行在Keysight UXM 5G 无线测试平台上,可对 3GPP R14 C-V2X 器件进行全面测试,包括测量它们的功能、协议和射频(RF)特性。是德科技提供先进的设计和验证解决方案,旨在加速创新,创造一个安全互联的世界。 全自动驾驶目标的实现需要开发极为复杂的软件,软件中融入的人工智能(AI)能够正确理解周边基础设施和车载传感器阵列发送的实时
[测试测量]
基于AT89C2051单片机和GPS技术实现机器人定位模块的设计
1 引言 定位是根据先验的环境信息,结合当前的机器人位置信息以及传感器输入信息,准确地确定机器人位姿的过程。可靠定位是移动机器人研究中备受关注和富有挑战性的一个重要研究主题。 机器人定位技术可分为绝对定位和相对定位技术两类,绝对定位主要采用导航信标、主动或被动标识、地图匹配或卫星导航技术(GPS) 进行定位。相对定位是通过测量机器人相对于初始位置的距离和方向来确定机器人的当前位置,通常也称为测程法。绝对定位和相对定位各有优缺点,具有互补性,将两者结合能形成更加准确可靠的定位系统。本实验模块的设计就是先用测程法进行相对定位,然后利用电子罗盘进行纠正。 2 定位原理及硬件设计 2.1定位原理 本设计对应的机器人是前后轮独立驱动的,
[单片机]
基于AT89<font color='red'>C</font>2051单片机和GPS技术实现机器人定位模块的设计
Molex连续三年获得H3C整体质量表现奖
全球电子解决方案制造商 Molex,因在连接器技术开发、创新、质量和交付方面的卓越表现被H3C公司授予2016年度优秀供应商奖。H3C是一家全球领先的中国信息技术(IT)提供商,分别在北京和杭州设有总部。Molex是唯一一家在2016年度获得此项荣誉的连接器供应商。 Molex数据通信销售副总裁Murat Dogansoysal表示,“能获得H3C对我们无缝服务和产品创新的认可,我们感到非常荣幸。优秀供应商奖是对我们作为一个战略供应商致力于满足全球客户对连接器的需求的努力和能力的肯定。Molex为能向客户提供融合最新创新的优质产品感到自豪。” 优秀供应商奖的颁发对象为在过去年度在技术开发、执行以及为H3C提供创新优质产品和服务
[网络通信]
C8051F320-并行端口与交*开关
C8051F320具有25个I/O引脚,分别为P0、P1、P2、P3.0。为了能根据需要使用内部数字系统资源,必须利用数字交*开关将所用的资源映射到具体引脚上。分析如下: 如果没有用到任何资源,那么所有25个引脚都可以作为正常的并行引脚使用,若用到数字资源,必须牺牲一部分并行口,将引脚提供给内部资源使用。假设有A、B、C三种资源,所需要的引脚数分别为2、1、3。 1、如果ABC都不用,那么可以正常使用P0、P1、P2以及P3.0 2、如果使用A资源,那么将会占用P0.0、P0.1,其余引脚照样可以作为并行口用,但是被占用的口无法控制 3、如果同时使用ABC资源,则需要6个脚,故P0口只剩下P0.6、P0.7可用,其他口不
[单片机]
<font color='red'>C</font>8051F320-并行端口与交*开关
vivo X60t Pro通过3C认证:配33W快速充电器
上个月,vivo 在中国市场发布了 vivo X60t 手机,这款搭载天玑 1100 的手机是继 vivo x60 和 vivo x60 Pro 之后,国内市场上的第三款 X 系列手机。据了解,最近由 3C 权威机构发布的 V2102A 手机将以 vivo X60t Pro 的身份在市场上首次亮相。 根据印度 IMEI 数据库网站,V2102A 的型号属于即将推出的 vivo X60t Pro 手机。这款手机的 3C 认证显示,它支持 5G,可能会配备 33W 的快速充电器。 vivo X60t 拥有天玑 1100 芯片,这表明 vivo X60t Pro 可能采用天玑 1200 芯片。与 X60t 相比,其后置摄像头的组
[手机便携]
vivo X60t Pro通过3<font color='red'>C</font>认证:配33W快速充电器
S3C2440学习二(基础资源的使用)
虽然有种流水账的感觉,但是这是学习的必经之路,等我渗透ARM三次后,我再全面处理问题,给出最简洁最直接的答案吧。 ①ARM有多少个通用寄存器,有什么用?(让我们一个一个记录) 通用寄存器 通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特殊功能。通用寄存器的长度取决于 机器字长 ,汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。   16位cpu通用寄存器共有 8 个:AX,BX,CX,DX,BP,SP,SI,DI.   八个寄存器都可以作为普通的 数据寄存器 使用。   但有的有特殊的用途:AX为 累加器 ,CX
[单片机]
基于C8051F330芯片和MPPT技术实现太阳能路灯智能控制系统的设计
太阳能是一种清洁高效的可再生能源。在阳光充足的白天,屋顶的光伏电池将太阳能转化成电能,供人们在夜晚使用。据专家预测,到2040年,全球的光伏发电量将占世界总发电量的26%,2050年后将成为世界能源的支柱。太阳能路灯以太阳光为能源,不需要铺设复杂的管线,安全节能无污染。白天利用太阳光给蓄电池充电,晚上蓄电池提供能量带动路灯工作。路灯的关/开过程采用光控,采用最大功率跟踪技术,最大程度的吸收太阳能,提高太阳能光电池的效率,以降低路灯系统的成本。最大功点跟踪(Maximum Power PointTracking,MPPT)系统是一种通过调节电气模块的工作状态,使光伏板能够输出更多电能的电气系统。 1 硬件组成 太阳能路灯控制系统
[单片机]
基于<font color='red'>C</font>8051F330芯片和MPPT技术实现太阳能路灯智能控制系统的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved