适应实时多任务的微控制器高效指
摘要:为了开发一个高效的实时多任务微控制器系统,除了使用高速器件外,适当的指令支持可以简化控制结构,减少程序代码,提高实时响应能力。本文提出了一些适用于实时多任务的微控制器的有效指令功能设计。
单片机系统,在中国俗称单片机系统,主要用于物理设备的接口和直接控制。虽然与微处理器系统相比,控制逻辑相对简单,但由于在大多数情况下需要实时响应,并且需要同时处理多个对象的协同工作,不仅要求程序的运行效率,还要求微控制器具有很强的多任务处理能力。另一方面,由于数量大和特定应用条件的限制,希望微控制器的成本低;这只能在微控制器的硬件结构相对简单的前提下实现,这限制了微控制器的指令、程序代码空和数据存储容量。在这种情况下,为了实现更高的运行效率,有必要加强微控制器指令的功能和灵活性。

到目前为止,大多数微控制器程序仍然使用汇编语言,它的优点和缺点是众所周知的。随着硬件技术的发展,设备的性能价格比得到了显著提高,用于嵌入式应用的各种微控制器系统模块已经商业化。在微控制器系统的成本中,软件所占的比重越来越大,所以用高级语言编写微控制器应用系统的软件是一种必然趋势;此外,能够执行算术运算和逻辑运算的算术单元的结构、能够与数据总线直接交换数据并执行关系运算的单元的数量以及地址间访问的能力等因素将直接影响到用高级语言生成机器码的难度。为了完成一个操作,我们不仅要计算操作本身所需的时间,还要考虑建立处理环境所需的时间,获取操作对象和保存操作结果的辅助操作时间,以及占用的指令空.简而言之,考虑影响6个代码的效率和操作效率的所有因素。

转移控制指令直接影响程序运行,但其前提是状态检测或关系运算的结果;状态检测需要位寻址能力的支持,关系运算必须访问两个对象,因此位寻址能力、数据访问能力和数据访问方式都关系到程序的运行效率。根据作者多年编写实时应用程序的经验,针对实时多任务应用程序,在高效微控制器数据访问能力、模式和传输控制指令设计方面,应具备以下四项性能。

1.指令的关系计算能力
关系运算是控制程序转移的前提,其运算能力包括两个方面:一是运算功能;第二,算术单位的数量。
在8位计算机系统中,运算函数一般支持大于、小于、等于和不等于的无符号比较;在16位计算机系统中,也应该支持有符号比较,并且需要多个算术单元来支持关系运算。如果常用功能单元的数量很少,则在使用过程切换时需要时间来替换资源。如果微控制器中只有一个寄存器可以进行相关运算,就需要频繁地进行中间结果的换位访问。这些额外操作的代价是指令数量和运行时间的增加,这将极大地影响程序的运行效率。例如,要根据两个关系操作的结果来决定处理策略,首先,为了保存第一个关系操作的逻辑结果,可能需要在操作之后保留数据结果,然后加载第二个操作所需的操作对象。最小成本是存储/0/时间和一条指令的一次加载所需的操作时间,没有额外的好处。此外,多任务处理运行时,中断会频繁发生。在中断服务程序中,必须空出算术单元,并且应该占用额外的堆栈空空间来保存中断的数据,以及存储空空间和两个指令的运行时间,这两个指令被推入堆栈一次并弹出一次。这些都是微控制器应用系统中的宝贵资源,因此这种微控制器不适合实时多任务系统应用。目前,许多微控制器采用寄存器组的结构,每个寄存器都支持关系运算和简单的算术运算,便于实现高级语言中“局部变量”的特性。其主要优点是内存利用率高,数据完整性好。这大大缓解了计算能力的瓶颈。

2.指令的数据存取能力
(1)操作数的访问模式
指令对操作数的访问方式非常重要。如果同一种资源只能通过一个特定的名称来访问。当处理多个进程时,具有相似功能的程序段必须编写不同的代码段。代码可重用性差,这增加了总代码长度。因此,地址间访问非常重要,它可以用同一个程序来处理不同的对象,并且可以显著提高多任务处理环境下的系统效率。

位信息是二进制系统中最基本的数据。在控制系统中,经常需要检测位信息,如进程标识、外围设备状态等。在多任务系统中,每个进程将占用具有不同物理地址的系统资源。此时,指令是否能支持地址间的位访问极大地影响了进程间的切换。如果你不支持地址之间的位访问,假设有8位信息点,你必须写8句直接的位检测来判断,这增加了代码的长度;如果每个进程想要使用相同的代码段,就必须为每个进程替换重用的资源,这就浪费了时间;如果每个进程使用不同的资源,就必须用相同的代码函数编写代码,并且只使用不同的资源。目前常用的微控制器位间接寻址能力差,编写程序费时费力,代码冗长,修改困难。

对于字节数据,需要为数据代码区和程序代码区提供地址间访问支持。目前,通用微控制器为程序代码区提供地址间访问支持,但它们仅限于表查找操作。要访问存储在数据中的常量,应用程序必须首先调用表查找程序来获取对象,然后在开始处理之前将其放入工作单元。如果可以通过内部地址直接访问程序存储器中的数据表,则可以节省空之间的时间和开销。

(2)数据描述能力
随着人工智能、自适应和自学习技术的发展,关系运算中涉及的两个对象往往是变量,这是微控制器指令系统设计中必须考虑的问题。
关系运算的两个对象应支持运算符与直接数、寄存器、直接寻址或间接寻址对象之间的关系运算;并且间接寻址的对象可以被放置在数据存储区或程序存储区中。考虑到阵列和队列的操作需要,地址间寄存器最好支持指定的周期数或支持循环队列操作。

相对寻址能力;使用基本指针,它与地址间寄存器叠加形成一个访问地址。你可以进入程序代码空.方便查表,及时交换空之间的资源,提高非线性运算的处理速度;它还可以访问数据存储空,这便于访问由计算机辅助开发应用程序生成的运行代码中的数据地址。

3.原子操作指令支持
同步和互斥是多进程必须处理的问题。当多进程抢占系统资源时,首先需要判断系统资源使用标识符。一般来说,它由一位标识,这是空闲时空占用的。这是一种相互排斥的行为。一旦资源被占用,其他进程就不能使用它们。为了防止一个进程检测到系统资源空空闲,但是另一个进程也检测到资源空在未改变的标志之间空闲,有必要将检测和改变标志设计为原子操作。通常,通过禁止系统中断来解决。在检测前关闭中断,然后在检测后打开中断。如果指令为标志位和标志字节提供原子操作支持,它将减少程序并提高效率。

(1)识别位操作指令
要求在一条指令内完成识别位的检测、清除和传输。一些微控制器中的指令支持这一点。
(2)适应信号灯操作说明
当多个过程同时运行时,通常使用信号灯技术。为了适应同步和互斥操作,如光伏操作,微控制器应提供指令支持,如减去1等于某个值传输,增加1等于某个值传输。通过这种方式,可以避免在信号监控之前和之后的关闭和打开的中断操作,并且只有在需要保护关键区域时才可以关闭中断。中断禁用时间缩短,这相当于增强了系统响应实时事件的能力。除了支持与常数的比较之外,指令还应该支持与寄存器或地址间存储器位置的比较,这是非常灵活的。当该指令中的比较值为0时,它是一个常用于控制循环的指令。

4.支持多进程切换的指挥能力
当系统资源不能满足运行要求时,需要暂停进程并保留断点信息。原则上,流程使用的所有信息都必须保留。当进程从就绪状态变为下次运行时,它应该基于它们,并且断点信息可以在多次判断后恢复。可以看出,暂停过程和恢复过程不必要地占用了cpu时间。为解决这一矛盾,应设计以下指令功能。

(1)带回下一个入口地址的回叫指令
当程序运行到某一点时,它意味着条件的满足。过程悬挂起点的空之间的位置隐含着过程的运行轨迹,即它包含着悬挂的原因。一旦进程再次获得cpu资源,只要它回到这一点,它就可以在新的状态条件下快速恢复运行,而无需再次判断历史条件。因此,微处理器应该支持以指针地址间存储单元的内容(数据)作为传输地址的调用指令,并使用类似于推动堆栈指针的方法来复位pc指令,以通过地址间访问获得调用入口地址。当呼叫返回时,带回下一个入口地址,并且仍然用地址间指针更新传送地址。

事实上,只要当前程序计数器(已经包含下一条指令的第一个地址)中的pc值在执行调用返回指令时被发送到地址间指针所指向的存储位置,下一个入口地址就不需要放在哪个寄存器中被取回,这种方法可以方便地在8位计算机系统中实现。它不同于通过调用返回恢复调用点地址的传统方法,因为首先保存pc值。有两种调用返回指令:一种是保存当前pc值并返回,下一个调用直接转到指定的条目;另一个将返回而不保存当前的pc值,下一个调用仍将输入原始条目。

为了支持这种调用返回机制,它之前的语句通常是一个判断转移指令,当进程继续运行时执行调用返回。为了提高指令效率,判断分支指令必须是双向的:进程分支和无进位分支;零态跃迁和非零态跃迁;平等转移和不平等转移;大于转移和小于转移。对于位操作中判断和清除标志位重传的原子操作指令,为了方便起见,最好提供判断和设置标志位重传的指令。

(2)支持可变中断向量
中断技术在实时系统中应用广泛,许多微控制器采用固定中断向量的实现方法。不同条件下的中断只能执行阶段的指令段,但当前情况必须在中断服务程序中识别。通常,程序员在下次中断服务时使用添加状态变量的方法来引导处理路径。这部分准备工作介于本次中断结束和下次进入中断时搜索路径之间,是不必要的cpu资源和时间消耗;可变中断向量的实现方法可以在进入中断服务后直接到达任务处理点,避免了上述缺点,提高了中断服务的响应速度。具体方法类似于调用返回的处理,该中断处理服务程序终止点的地址可以保存为新的中断向量。

(3)通过组合条件控制过程状态转换
对于16位处理器,它还可以提供直接跳转或调用支持,将当前指令作为基址,寄存器内容作为偏移地址。
该过程需要进行多因素条件综合和选择,在运行时检测信息识别,并根据多个状态变量确定运行路径。有n个信息标记,可以引导k(k≤2n)条路径。采用逐一识别的方法。需要n次;然而,如果这N个信息标识符被视为矢量地址,并与基址一起形成物理地址,则它们可以被直接传送。当k远小于2n时,可以采用分段的方法,n个信息标识符的一部分可以作为向量地址,以减少对程序内存的占用。

(4)提高多进程切换的指导能力
上述地址间转换机制不仅可以支持数据驱动的程序控制,还适用于根据时间片分配进程运行。当系统分配给进程的时间用完时,进入高优先级的系统定时器被中断。此时,中断进程的断点地址存储在栈顶,只要它作为进程的下一个入口地址存储,在进程的断点保护工作完成后,指针递增指向下一个进程的入口地址,定时器中断并返回后,下一个进程就可以自动投入运行。

(5)支持循环任务队列功能
并发运行的多任务数量将会改变。微控制器应提供支持循环任务队列的指令,例如指针增加或减少1等于某个值的指令,可以实现任意位置和长度的循环队列管理,便于双向遍历。对于多任务处理,每个进程所需的循环队列长度会有所不同。如果指令格式规定比较值必须是一个固定的常数,那么为不同的进程编写具有不同比较值和相同函数的代码段是显而易见和合理的。更好的解决方案是地址间寄存器支持访问变量。

(6)二级指针管理寄存器块
一些常用的内部存储单元可以组成一个工作组,当前的工作组由一个辅助指针指示。当多个进程同时运行时,这种方法可以加快断点(如数据切换)的保护和恢复,并减少指令。
以上指令已经在微控制器的一些指令集中实现,供设计人员在选择微控制器时编译实时多任务应用时参考。有些指令还没有实现,所以出来供微控制器设计人员参考。
随着微电子技术的发展,这些指令的功能不难实现,只需要在功能和功能、功能和成本之间权衡,这可能只有在一些高级微控制器中才能得到支持。随着专用系统概念的增强,适用于现场多任务系统应用的微控制器将使应用系统设计者能够更灵活、更快速地开发低成本、高性能的产品。
标题:适应实时多任务的微控制器高效指 地址:http://www.zgshouguang.cn/article/6629.html
