提供最新版本的安装软件和关于MAX-IDE环境的文档,可免费下载。 MAX-IDE安装程序 MAXQ核编译指南 开发工具指南 变量和存储位置嵌入式应用通常需要一定的工作区域存储状态信息、配置数据、中间数据、循环计数器以及计算结果。存储在该工作区域的数据通常作为变量,具有以下特征。 它们是临时数据。如果应用程序由于电源失效或复位产生中断,不需要保存这些数据。 它们可频繁访问和更新。它们必须存储在能够快速读写的位置;这些位置的写入次数必须没有限制。 它们具有定义的初始值。程序开始运行时,用户程序必须将它们设置为特定值。 用C语言或其它高级语言编写的程序编译成汇编代码,编译器通常自动为变量分配空间(同时将变量初始化为预先定义的起始值)。这种情况下,用户只需声明变量、变量类型及其初始值(可选),其余工作由编译器处理。 unsigned int c = 0x1234; 然而,用MAXQ汇编语言编写应用程序时,必须明确指定变量分配空间并设置变量初始值。这些细节能够严格控制MAXQ微控制器的资源,但增加了系统复杂性。
对于基于汇编的小型应用程序或不需要大量工作区域的应用程序,内部寄存器可用来存储所有应用程序变量。这种方法具有两个重要优势: 程序结构紧凑、运行速度快。根据寄存器位置,在一个指令周期内可实现寄存器变量的读取、写入或复制其它寄存器变量。对基于MAXQ20的微控制器,在最差工作条件下,通常最多占用不超过两个指令周期。 直接操作变量。可直接操作一些内部寄存器。例如,可以(使用AP寄存器)选择16个工作累加器A[0]至A[15]的任何一个作为有效累加器Acc。这就意味着如果需要对这些寄存器存储的一个变量进行操作时,可直接对寄存器进行操作,无需将数据复制出来进行操作后再将数据复制回去。同样,执行djnz指令时,存储在LC[0]和LC[1]寄存器的变量可直接作为循环计数器。 对于大规模应用程序或者当应用程序需要大量工作变量时,可将其中一些或所有变量存储在基于SRAM的数据存储器。这种方式允许创建更多的变量,具体受限于数据存储器的空间。按照这种方式存储的变量可以通过MAXQ20核的标准数据指针访问,该指针用于读取或写入字节宽度或字宽变量(注意:本应用笔记的例程假定DP[0]配置为工作在字模式)。 move DP[0], #0010h ; Location of variable in data memory move Acc, @DP[0] ; Read variable add #1 ; Increment variable value by 1 move @DP[0], Acc ; Store variable back in data memory 当对一个变量进行一系列的较长计算操作时,可以将变量值首先复制到工作寄存器,如上述例程所示。所有中间操作可利用该工作寄存器执行,完成计算后将变量值复制回来。 MAX-IDE的段声明决定在基于SRAM的数据存储器存储应用程序变量时,如何确定变量的存储地址?
通常,除了调试器使用的最高32个字节的存储空间外,应用程序可以使用其它所有数据存储器。这意味着声明一个变量即可定义其在数据存储器中的位置。程序可通过该地址对变量进行读写,用#define宏命令将变量地址和符号名称关联起来。 #define VarA #0020h#define VarB #0021h#define VarC #0022h move DP[0], VarA ; Point to VarA variable move Acc, @DP[0] ; Read value of variable move DP[0], VarB ; Point to VarB variable move @DP[0], Acc ; Copy VarA to VarB move DP[0], VarC ; Point to VarC variable move @DP[0], #1234h ; Set VarC = 1234h这种方案可以很好地工作,但是有几个问题需要注意。 必须事先定义每个变量的地址,这项工作比较耗时,特别是确定随后将所有变量移至不同的数据存储区域时。 必须注意一个以上的变量不要占用同一地址,如果发生这种错误将很难追踪这些故障。 变量的初始(开始)值必须通过应用程序装载,如上述程序的最后一行。如果有多个变量按照这种方式初始化将会占用大量的程序空间。 比较有效的方案是利用MAX-IDE机制分别声明程序段和数据段。这种方法允许编程人员指定汇编程序的哪一部分定义为程序空间,哪一部分定义为数据空间。