在MAX-IDE中自动初始化数据段
摘要:该应用笔记讨论了MAX-IDE提供的程序和数据段的灵活工具,用于MAXQ®微控制器的应用编程。程序和数据段机制能够在数据存储器自动声明变量位置,并以起始值对这些变量进行初始化。应用程序可以将这些变量值缓存在闪存内,并在需要时恢复这些数据。该方法允许基于汇编语言的应用程序充分利用MAX-IDE提供的数据段自动装载功能,无论微控制器与JTAG调试器是否连接都能保持工作。MAXQ2000微控制器评估板能够演示这一方案,本文给出了相应的例程。
概述
MAXQ汇编程序的变量可以存储在工作寄存器(例如累加器A[0]至A[15])或数据存储器(SRAM)。在数据存储器中存储变量能够为应用程序变量提供较大的工作区域,但需要额外的访问时间。
MaxQAsm编译器和MAX-IDE环境提供单独声明程序段和数据段的机制,对各段产生各自的hex输出文件。运行时,MAX-IDE自动将程序段文件装载到程序存储器(通常为闪存),将数据段文件装载到数据存储器(通常为RAM)。然而,由于数据存储器为易失存储器,一旦微控制器掉电,将丢失数据段内容。
本文利用MAXQ2000 EV (评估)板首先演示应用程序开始运行时如何将预装载数据存储器值保存到闪存内,随后演示微控制器重新上电时如何从闪存刷新数据段。无论应用程序处于开发阶段(连接到JTAG适配器和MAX-IDE)还是在现场运行,这两个步骤都允许使用相同的数据段机制声明和初始化变量。
该应用笔记的例程为MAXQ2000微控制器以及MAXQ2000评估板编写,但相应程序和原理适用于任何基于MAXQ20、能够重新编程闪存的微控制器。
提供最新版本的安装软件和关于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个字节的存储空间外,应用程序可以使用其它所有数据存储器。这意味着声明一个变量即可定义其在数据存储器中的位置。程序可通过该地址对变量进行
- 基于GPS的数据采集系统的研究(01-15)
- 带以太网接口的GSM无线数据传输系统设计与实现(10-06)
- 探讨如何应对未来移动数据业务的高速增长(03-17)
- 在多通道宽带射频系统中通过低压差分信号传输数据总线实现大型射频数据共享(03-24)
- 无线射频识别技术在规模化奶牛场的应用(05-14)
- 瑞风智能一卡通社区解决方案(05-15)
- 妤傛ḿ楠囩亸鍕暥瀹搞儳鈻肩敮鍫濆悋閹存劕鐓跨拋顓熸殌缁嬪顨滅憗锟�
閸忋劍鏌熸担宥咁劅娑旂姴鐨犳0鎴滅瑩娑撴氨鐓$拠鍡礉閹绘劕宕岄惍鏂垮絺瀹搞儰缍旈懗钘夊閿涘苯濮幃銊ユ彥闁喐鍨氶梹澶歌礋娴兼ḿ顫呴惃鍕殸妫版垵浼愮粙瀣瑎...
- 娑擃厾楠囩亸鍕暥瀹搞儳鈻肩敮鍫濆悋閹存劕鐓跨拋顓熸殌缁嬪顨滅憗锟�
缁箖鈧拷30婢舵岸妫亸鍕暥閸╃顔勭拠鍓р柤閿涘奔绗撶€硅埖宸跨拠鎾呯礉閸斺晛顒熼崨妯烘彥闁喕鎻崚棰佺娑擃亜鎮庨弽鐓庣殸妫版垵浼愮粙瀣瑎閻ㄥ嫯顩﹀Ч锟�...
- Agilent ADS 閺佹瑥顒熼崺纭咁唲鐠囧墽鈻兼總妤勵棅
娑撴挸顔嶉幒鍫n嚦閿涘苯鍙忛棃銏n唹鐟欘枃DS閸氬嫮顫掗崝鐔诲厴閸滃苯浼愮粙瀣安閻㈩煉绱遍崝鈺傚亶閻€劍娓堕惌顓犳畱閺冨爼妫跨€涳缚绱癆DS...
- HFSS鐎涳缚绡勯崺纭咁唲鐠囧墽鈻兼總妤勵棅
鐠у嫭绻佹稉鎾愁啀閹哄牐顕抽敍灞藉弿闂堛垼顔夐幒鍦欶SS閻ㄥ嫬濮涢懗钘夋嫲鎼存梻鏁ら敍灞藉簻閸斺晜鍋嶉崗銊╂桨缁崵绮洪崷鏉款劅娑旂姵甯夐幓顡嶧SS...
- CST瀵邦喗灏濆銉ょ稊鐎广倕鐓跨拋顓熸殌缁嬪顨滅憗锟�
閺夊孩妲戝ú瀣╁瘜鐠佽绱濋崗銊╂桨鐠佸弶宸緾ST閸氬嫰銆嶉崝鐔诲厴閸滃苯浼愮粙瀣安閻㈩煉绱濋崝鈺傚亶韫囶偊鈧喕鍤滅€涳附甯夐幓顡塖T鐠佹崘顓告惔鏃傛暏...
- 鐏忓嫰顣堕崺铏诡攨閸╃顔勭拠鍓р柤
娑撳洣绗€妤傛ɑ銈奸獮鍐叉勾鐠у嚖绱濇潻娆庣昂鐠囧墽鈻兼稉杞扮稑閸︺劌鐨犳0鎴炲Η閺堫垶顣崺鐔枫亣鐏炴洘瀚甸懘姘剧礉閹垫挷绗呴崸姘杽閻ㄥ嫪绗撴稉姘唨绾偓...
- 瀵邦喗灏濈亸鍕暥濞村鍣洪幙宥勭稊閸╃顔勭拠鍓р柤閸氬牓娉�
鐠愵厺鎷遍崥鍫ユ肠閺囨潙鐤勯幆鐙呯礉缂冩垵鍨庨妴渚€顣剁拫鍙樺崕閵嗕胶銇氬▔銏犳珤閵嗕椒淇婇崣閿嬬爱閿涘本鍨滅憰浣圭壉閺嶉绨块柅锟�...