基于页的8051多任务模型

技术分类: 微处理器与DSP  | 2008-04-08
来源:单片机及嵌入式系统应用 | 作者:江西师范大学 甘智 张剑虹 罗杰

  随着8051微控制器性能的不断提高,使用多任务操作系统对单片机进行资源管理已成为当代开发的需要。由于受静态链接的限制,8051系统的多任务开发需要处理代码重入(reentrance)的问题。

  为了实现重入,通常可以利用Keil C51的关键字reentrant,将函数声明为重人类型。通过在重入堆栈分配局部变量,使函数具有可重入性;但该重入方案的实时性较差。

  为提高多任务系统的实时性,本文介绍一种新方案——基于页的多任务模型

  1 重入函数的原理与不足

  当使用Kcil C51的关键字reentrant来指定函数届性时,即得重入函数(reentrant function)。

  1.1 重入函数的原理

  重入函数的原理是Keil C编译器建立一个软件操作的重入堆栈。重入函数能自动为不同的调用者在重入堆栈中分配独立局部变量,使函数具备重入性。

  变量分配过程如图l所示,函数人口首先申请存储空间。函数返回前,必须将所申请的存储空间归还。变量分配和回收的位置都是重入堆栈的栈顶。

变量分配过程

  1.2 重入函数的不足

  重入堆栈的最大缺点为效率低,Keil C51用户手册中已有明确记载。

  由图l可作以下分析:首先,每次使用局部变量都需要计算变量地址,大大降低了变量存取速度,也消耗了处理器时间;其次,因为重入堆栈是纯软件实现的,因此反复进行的堆栈操作使重入函数的实时性进一步恶化。

  2 基于页的多任务模型原理与实现

  2.1 原理

  解决函数重入的关键在于局部变量的分配,可以从8051存储器类型的分析和选择入手。

  8051控制器能直接寻址的存储器类型很丰富。在这些类型中,我们注意到了页变量(pdata)及其与众不同的特性。

  (1)页变量pdata

  根据Intel公司的用户手册,805l的页存储器就是指单字节地址方式操作的外部存储器。使用单字节地址方式时,允许使用P2对外部数据来分页,该方式的操作指令为“MOVX@Ri”。指令中R0或R1提供页内地址(低8位地址),P2寄存器隐藏地提供页地址(高8位地址)。

  单字节地址方式将8051的64 KB外部存储器分成256个页面,如图2所示。其硬件特征如下:①系统的256个页面的存储结构完全一致;②工作页面可以被指定为这256页中的任意一页;③页地址由P2隐式提供给地址总线,且页地址可以由程序修改。

XDATA与PDATA的关系

  工具方面,Keil C51专用关键字pdata表示单字节方式寻址的外部数据类型,pdata变量即页变量。编译后的页变量具有以下特性:①页变量操作严格对应单字节地址方式;②页变量全部转换成了静态页内地址。

  (2)页函数

  根据页变量性质,只要函数的所有局部变量都被指定为页变量类型,那么,函数所生成的代码就可以工作于系统任一页面上。

  当操作系统为一个函数分配多个页面时,该函数与每一个页面上的局部变量均构成一个进程。

  与重入函数不同,这类函数本身不能自动分配变量,因此没有重入性。只有在操作系统的协助下,为其分配工作页后,页函数才是可重入的。页函数中变量使用静态地址,因此其存取速度得到大幅提升,改善了系统的实时性。

  为区别Keil C51定义的重入函数(reentrant func-tion),我们称这种只使用页变量的函数为“基于页的重入函数(page-based reentrant function)”,简称为“页函数”。

  2.2 实现

  根据原理分析中的可行性,笔者设计了名为Celia的基于页的占先式8051多任务调度内核。沿用μC/OS-II的结构框图与处理流程,在TCB(Task Control Block,任务控制块)中增加一个字节的页面字段,并改写了部分程序。有μC/OS-II为参照,使该调度内核的设计可以很快完成。经过在以W78P438为核心的平台上实测,该系统调度正常,程序运行正确。这证明该重入方案可行。

  3 基于页的多任务模型性能分析

  基于页的多任务模型的程序结构与μC/OS-II基本一致,其区别主要是页函数与重入函数的区别,因此,这里主要分析页变量存取与重入堆栈变量存取的性能对比。

1】【2
加载中

对文章的评论

剩余字数:  

浏览该文章的用户还看过...

  • 文 章

  • 论 坛

  • 博 客

  • 小 组

设计资源与分销