您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

适应实时多任务的微控制器高效指令支持

时间:2007-1-20栏目:电子通信论文

摘要:开发高效的实时多任务微控制器系统,除了采用高速器件之外,适当的指令支持能简化控制结构,减少程序代码,增强实时响应能力。本文提出了一些适应实时多任务的微控制器高效指令功能设计。

    关键词:微控制器 实时多任务 指令

微控制器系统即国内通常所称的单片机系统,主要用于物理设备的接口和直接控制。虽然控制逻辑相对微处理机系统而言比较简单,但由于多数情况下需要实时响应,而且经常要同时处理多个对象的协同工作,因此,不仅对程序的运行效率有较高的要求,还要求微控制器具备较强的多任务处理能力。另一方面,由于量大面广,以及具体应用条件的限制,希望微控制器的成本要低;而这又只有在微控制器的硬件结构相对简单的前提下才能实现,这就限制了微控制器的指令、程序代码空间以及数据存储容量。在这样的局面中,想要实现较高的运行效率,就只有加强微控制器指令的功能和灵活性。

至今,绝大多数微控制器程序的编制仍使用汇编语言,其优缺点已众所周知。随着硬件技术的发展,器件的性能价格比显著提高,各种面向嵌入式应用的微控制器系统模块向商品化发展。微控制器系统的成本中,软件比例不断增加,使用高级语言编制微控制器应用系统的软件是必然的趋势;而且微控制器中能进行算术运行和逻辑运算的运算器结构、可以直接与数据总线交换数据并进行关系运算的单元个数、间址访问的能力等因素,将直接影响高级语言生成机器代码的难易程度。为完成某一运算,不能只计算运算本身所需的时间,还要考虑建立本处理环境所需的时间、取运算对象与保存运算结果的辅助操作时间、以及所占用的指令空间。简言之,要考虑所有影响6代码效率和运行效率的因素。

转移控制指令是直接影响程序运行的,但其前提是状态检测或者关系运算的结果;而状态检测需要位寻址能力的支持,关系运算又必须访问两个对象,所以,位寻址能力、数据访问能力、数据访问方式都与程序的运行效率有关。根据作者多年编制实时应用程序的体会,针对实时多任务应用,就高效率的微控制器数据访问能力、方式与转移控制指令设计而言,应具备以下四方面性能。

1.指令的关系运算能力

关系运算是控制程序转移的前提,其运算能力由两个方面组成:一是运算功能;二是运算单元数目。

在8位机系统中,运算功能一般都支持无符号的大于、小于、等于、不等于比较;在16位机系统中,还应支持有符号的比较,并且要求有多个运算单元都支持关系运算。如果常用的一些功能单元个数较少,则当进程切换时,要花费时间置换资源。假如微控制器中只有一个寄存器能进行关系运算,必须经常进行中间结果的换位存取。这些额外操作的代价是指令数目与运行时间的增加,那将极大地影响程序运行效率。例如,要根据两个关系运算的结果决定处理策略,首先,要将第一次关系运算的逻辑结果保存起来,可能还需要保留运算后的数据结果,再装入第二次需要的运算对象。其最小代价是多中用一条指令的存储空间和一次装入所需的运算时间,而且没有任何的额外收益。此外,多任务运行时将频繁产生中断,在中断服务程序中,必须腾出运算器,又要多占用一个堆栈空间来保存断中数据,以及一次进栈、一次出栈的两条指令的存储空间和运行时间。这些都是在微控制器应用系统中的宝贵资源,因此,这样的微控制器是不适应实时多任务系统应用的。现在,许多微控制器都采用寄存器组的结构,每一个寄存器都可支持关系运算和简单的算术运算功能,便于实现高级语言中“局部变量”的特性。其主要优点是存储器的利用率高,数据完全性好。这就大大缓解了运算能力的瓶颈。

2.指令的数据访问能力

(1)运算对象的访问方式

指令对运算对象的访问方式非常重要。如果同类资源只能使用特定名称区分访问。则处理多进程时,功能相似的程序段必须书写不同的代码段。代码重用性差,这就增加了总代码长度。所以,间址访问非常重要,它可以用同样的程序处理不同的对象,在多任务处理环境中能显著提高系统效益。

位信息是二进制中最基本的数据。控制系统中,经常需要检测位信息,例如进程的标识、外设的状态等。在多任务系统中,各进程将占用不同物理地址的系统资源。这时,指令能否支持间址的位访问,就大大影响进程之间的切换。如果不支持间址的位访问,假设有8位信息点,则必须编写8句直接位检测的语句来判别,增加了代码的长度;如果各进程要使用同一个代码段,必须为各进程置换重用的资源,浪费时间;而如果各进程使用不同的资源,则必须书写代码功能相同、仅仅资源不同的代码。现在常用的微控制器,位间接寻址能力都比较差,编写程序费时费力,代码冗长,修改困难。

对于字节数据,要求提供既可对数据代码区,又可对程序代码区的间址访问支持。当前常见的微控制器,虽然也提供对程序代码区的间址访问支持,但限于查表操作。应用程序要访问存放于数据内的常数,必须先调用查表程序获取对象,再将它放入某个工作单元,然后才能开始处

[1] [2] [3] 下一页

下页更精彩:1 2 3 4 下一页