电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者电子文章嵌入式系统MAXQ揭密

MAXQ揭密

11-20 17:12:16 | http://www.5idzw.com | 嵌入式系统 | 人气:197
标签:嵌入式系统开发,嵌入式开发,http://www.5idzw.com MAXQ揭密,http://www.5idzw.com

前缀机制从两方面改善了这一操作过程。首先,这种机制仅向那些需要附加位的特定指令添加前缀,从而节省了代码空间与执行时间。其次,由于既可为立即数又可为寄存器标识符提供附加位,该机制在扩展寄存器空间的同时又保持了整体架构的性能。

前面提到,尽管每一个寄存器模块都包含32个寄存器,但源寄存器只有4位标识符,目标寄存器只有3位标识符。前缀机制则可提供这些附加位。

前缀机制的鲜明特色表现为几个方面。首先,前缀指令中目的部分的特定位被用作立即数源位,用来访问子译码大于15的源地址寄存器,以及子译码大于7的目的地址寄存器。通过这种方式,单条前缀指令既能够访问任何寄存器或立即数,也能够访问任何寄存器子译码。

其次,前缀寄存器还有另一个独特之处,即它载入的任意值仅能够保持一个时钟周期。在此之后,该寄存器会自动清零。也就是说,必须在紧靠被前缀寄存器修改的指令之前,向前缀寄存器传送所需数据。这同样意味着前缀指令是不可中断的。如果紧随一个前缀操作之后发生了一次中断,则当中断返回主函数时前缀信息会丢失。

如图9所示,前缀寄存器中的位分别送至源标识符、目的标识符和立即数中。所以,尽管绝大多数指令可以在单周期内执行,以下指令仍然需要两个周期:寻址子译码大于7的目标寄存器;寻址子译码大于15的源寄存器;或者加载大于255的立即数。

图9. 前缀寄存器可提供附加位,以实现16位立即操作数,以及寻址每个模块中所有32个源和目的寄存器。
图9. 前缀寄存器可提供附加位,以实现16位立即操作数,以及寻址每个模块中所有32个源和目的寄存器。

为了说明这个过程,我们考虑指令move A[0], #010h。这条指令将一个立即数传送到模块9的寄存器0中,因此汇编器会生成如下的操作码:0910。但如果指令是A[10], #0320h的话,汇编器会自动地插入一条前缀指令:2B03 2920。

如果没有前缀指令,操作码2920会被解释为A[2], #020h。而前缀将一位添加到目的标识符,并将一些位添加到立即数中,从而允许处理器向任意寄存器子译码加载任意值,并且永远不会超过两个执行周期。

实例

独特的MAXQ20内核结构可以实现一些其它处理器不能完成的操作。

向量中断

MAXQ20内核仅具有一个中断向量寄存器,一些用户可能认为这是一个缺陷。但实际情况是:考虑到具有两个外部中断的系统,可将其中的设备A连接至端口0位0,设备B连接至端口0位1;对应的中断选择可以像跳转PIO一样操作简单。在地址0上,编码为:
        0000: IRET
        0001: jump SERVICE_DEVICE_A
        0002: jump SERVICE_DEVICE_B
        0003: jump SERVICE_DEVICE_A
该例中,设备A具有中断服务优先权。也就是说,如果两个中断请求线同时有效(端口0上位0和位1均有效),先响应设备A。在中断服务程序结束时,只有当设备A中断不再有效时,才能够响应设备B中断。

任务管理器

在多数应用程序中,轮询任务列表非常重要,以便产生一个多任务处理环境下的原始数据类型。这点在无需优先权限时非常有用(或不需要实时操作的情况)。MAXQ结构简化了这种程序:
task_wheel_init:
        move dp[0], #task_list
task_wheel:
        move dp[0], dp[0]
        jump @dp[0]++
.
.
.
task_list:
        dw      task_01
        dw      task_02
        dw      task_03
        dw      task_wheel_init
在该例子中,DP[0]指向任务列表。在task_wheel程序中,DP[0]被选中用来作为源指针,并接着从任务列表中加载指令指针。每当完成一个任务时,不是执行一个RET,而是简单地跳转至task_wheel程序即可。

向量表中的最后一个入口地址用来重新初始化指针,并且任务调度器开始重新扫描向量表。

遍历列表

通常,为做好标记的入口快速搜索非标准大小的对象是非常有用的。但对于某些处理器结构来说实现此功能是有困难的,因为其存储器访问功能已从ALU删除。在MAXQ中,这是一个非常简单的任务。

TAG LEN Data
3F 09 00 01 02 03 04 05 06 07 08          
17 0E 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D
35 07 20 21 21 22 23 24 25              

对于这个例子,假设该列表包含由标记、长度和数据串组成的数据对象。遍历该列表的程序如下:
item_seek:
        move acc, @dp[0]++     ;Get tag
        jump z, item_not_found ;Tag==0 means end of list
        cmp  a[1]              ;A[1] has target tag
        jump e, item_found     ;If item==target, exit
        move acc, @dp[0]++     ;If no match, get data len
        add  dp[0]             ;Add to pointer
        move dp[0], acc        ;Store pointer back
        jump item_seek         ;...and seek next item.
该程序8个指令遍历列表,寻找匹配项或标记为零的项,以此来终止列表。采用8MHz MAXQ20内核时,该程序每秒遍历一百万次。

结论

尽管MAXQ的内核看起来比较简单,但是传送-触发架构使得它在速度与灵活性方面具有突出的优势。由于通过寄存器接口直接寻址外设,嵌入式外设的数据传送速度极快。总的来说,MAXQ内核在任何方面都是大多数微控制器应用的上佳选择。

上一页  [1] [2] [3] [4] [5] 

,MAXQ揭密
关于《MAXQ揭密》的更多文章