该开发平台采用的软件开发环境为μVisionⅡ。该环境内嵌多种符合当前工业标准的开发工具,可以完成从工程建立和管理、编译、连接、目标代码的生成,软件仿真,硬件仿真等完整的开发流程。尤其C编译工具在产生代码的准确性和效率方面达到了较高的水平,而且可以附加灵活的控制选项,在开发大型项目时非常理想。即使不使用C语言而仅用汇编语言编程,其方便的集成环境、强大的软件仿真调试工具也会令开发进度大大加快。但是其开发环境又有其自身的特色,需要对其中一些特殊的问题加以考虑。下面是对软件开发中遇到的几个典型问题的具体讨论和研究。 2.2.1 程序中的关键字
在进行程序设计时不能使用C51编译器的关键字来定义变量名或者函数名。C51是区别大、小字母的,而关键字都是小写字母。
例如:void writeToCC1000Register(char addr,char data)。该函数定义从字面上看没有问题,但在编译时均指示错误,查看C51关键字有关目录,查出原因在于变量参数data为其关键字,造成了编译时的错误。
下面列出了一些常用的关键字,在程序设计时定义变量或函数名时应特别注意避免使用:
_at_,alien,bdata,bit,code,data,idata,large,pdata,sbit,sfr,sfrl6,***al,task,using,xdata,priority。
2.2.2 BIT和SBIT的区别和全局变量、局部变量的使用
在程序中有关位操作时必然要涉及到2种数据类型,bit和sbit。这2种数据类型的使用应注意区别。
bit主要用位变量操作。sbit虽然也是用于位变量的操作,但其使用范围较bit更广泛。sbit不仅可以用于定义可位寻址寄存器的各个位,使我们可以对寄存器进行位操作,sbit的另一个重要作用在于构建类似于共用体数据类型,这种数据类型在LPC922与CC1000的串行/并行数据相互转换中起着重要的作用。例如:
unsigned char bdata myDatas2;//定义一个可位寻址的全局变量
//定义变量的各个位
sbit cDatas0=myDatas2^O;
sbit cDatasl="myDatas2"^l;
sbit cDatas2=myDatas2^2;
sbit cDatas3=myDatas2^3;
sbit eDatas4=myDatas2^4;
sbit eDatas5=myDatas2^5;
sbit cDatas6=myDatas2^6;
sbit cDatas7=myDatas2^7;
在这里myDatas2既可以作为一个8位的变量使用,同时各个位也可以单独使用,这在串/并数据转换的场合是很有用的。特别需要注意的是,myDatas2这个可位寻址变量必须以全局变量的形式予以定义,如果定义为局部变量,编译器也将产生错误。
2.2.3 UART通讯和函数调用
在进行硬件仿真时,需要进行LPC922与PC机之间的UART串行通信,这样可以把有关调试信息直观地显示在超级终端上。初期一直存在无法通信问题,为此调试了有关串口读写的底层代码,对出现的问题进行了修正。
原来的单片机与PC机串口通讯写程序如下:
border="0" alt="" />
原来的UART写字符串函数writeln是通过调用putchar函数来进行的,但在硬件仿真时一直出错,当把这部分程序单独分离出来进行仿真时,却未出现问题。后来分析考虑推想可能原因是:C51由于内部堆栈空间的限制,在函数调用时,提供的是一种压缩栈,每个过 程被给定一个空间用于存放局部变量,过程中的每个变量都存放在这个空间的固***置,当多重调用或者递归调用这个过程时,会导致变量被覆盖而出错。此时应把该函数定义为可重入函数,但是再入函数因为要做一些特殊的处理,一般运行起来都比较慢。在这个程序中写UART操作对函数putchar调用时,程序的其他部分也在调用该函数,覆盖了传递给putchar函数的参数,导致程序运行出错。于是对程序做了修改如下:
Lenton Laboratory muffle chamber furnace 1100C 240V single phase
C.A. Gray Bishops Stortford 27inch 67cm Precision Height Vernier
Cook Troughton & Simms Compatitor & Stand
Rosemount 3051 CD2A22A2BM5P2 pressure tran***itter NEW in BOX with MANUAL
Rosemount 3051 CD2A22A1KM6L4 diff. pressure tran***itter NEW full stainless body
Queue Cryostar model 7111 -75 deg laboratory medical cryo freezer ultra low temp
Rosemount Pressure tran***itter 3051 CG4A02A1AM5B1I7?H2 Serial RS0285494
Rosemount Pressure tran***itter 3051 CG4A02A1BB1I7H2?A0005 Serial 0250810
Rosemount Pressure tran***itter 3051CD2A02A1AM5?B1I7H2 SN RS0266770 valve manifold
Rosemount Pressure tran***itter 3051 CD2A02A1AH2B1M5?11 Serial 82796
Rosemount Pressure tran***itter 3051 CG4A02A1BK7H2CN Serial 02336165
Rosemount Pressure tran***itter 3051 CG5A02A1BDFE7H2?O4CN Serial 01905739
Rosemount Pressure tran***itter 3051 CG4A22A1AD7K7L4?CM Serial RS0906402 1" FLANGE
Rosemount Pressure tran***itter 3051 CG4A22A1BM5B4FE?7***5 Serial 01542938
Rosemount Pressure tran***itter 3051 CD2A22A1AS2B4M5?T1 Serial 82801
Rosemount Pressure tran***itter 3051 CG4A22A1AB4I7 Serial RS0468614
Rosemount Pressure tran***itter 3051 CG4A22A1AD7K7L4?CN Serial RS0968652
Rosemount Pressure tran***itter 3051 CG4A22A1BM5B4E7?*** Serial 01542935
Rosemount Alphaline Level tran***itter 1151LT4EAOF22D 80-150 flanged
Rosemount Pressure tran***itter 3051 CG2A02A1BM5K7FA?CN Serial 01941609
YOKOGAWA DPHARP Pressure tran***itter EJA110A S1 EMS4B-74EC/SU1 #12A118815 103
YOKOGAWA DPHARP Pressure tran***itter EJA110A S1 EMS4B-74EC/SU1 #12A118814 103
Drexel Brook capacitive Level probe sensor 260-2-130 444mm extension 2" CL 150
Werther International HLS012 Oil free laboratory grade air compressor drier
Pair of Carl Zeiss Microscope lens PK 20 x / W 10 PK20x/W10 10mm
Pair of Carl Zeiss Microscope lens PK 12.5 x / w 16 PK12.5x/w 16mm
Pair of Carl Zeiss Microscope lens PK 10 x / w 20 ***x/w 20mm
Pair of Nikon microscope adaptors
Pair of Nikon Zeiss microscope adaptors
Nikon or Zeiss microscope lens extension tube adaptor
Nikon or Zeiss microscope lens extension tubes adapters
Nikon or Zeiss microscope rings set of 6
Nikon microscope lens polarizing plate MSD 205-77-006
Service briefcase for i***can 400B ***s IMS trace detector
Micro Motion Coriolis Mass flow sensor tran***itterF050?SI113SZ 1FT9701I6M1Z 1/2"
meter
Bausch & Lom Optical 21-43-15 115V lens glass toughening heat treating system
Rosemount Pressure tran***itter 3051S 3051S2CG4A2F1BC?5D1E7M5 S# 01544328
Rosemount Alphaline Pressure tran***itt 1151DP4S22B2M1I?7
Rosemount Pressure tran***itter 3051S 3051S2CG4A2F12B?1BC5D1E7M5 SERIAL# 01544331
Rosemount Pressure tran***itter 3051S 3051S2CG4A2F12B?1BC5D1E7M5 SERIAL# 01544329
Rosemount Pressure tran***itter 3051S 3051S2CG4A2F12B?1BC5D1E7M5 SERIAL# 01544332
Rosemount Pressure tran***itter 3051S 3051S2CG4A2F12B?1C5D1E7M5 SERIAL# 01544330
Rosemount Pressure tran***itter 3051S 3051S2CG4A2F12B?1BC5D1F7M5 SERIAL# 01544326
Rosemount Alphaline Pressure tran***itt 1151DP6S22B1M2I?7
Rosemount Pressure tran***itter 3051S 3051S2CG3A2F12B?1BB4CD1F/M5 SERIAL 01544341
Rosemount Pressure tran***itter 3051S 3051S2CG3A2E12B?1BB4C5D15/M5 SERIAL 01544339
ABB Deltapi K Pressure tran***itter KDC/A21126 531241
Rosemount Pressure tran***itter 3051S 3051S2CG4A2B11A?1BC5D1E7M5Q1 Serial 01957830
Huggenberger Extensiometer Mechanical Strain Guage pair in Case SN 808 & 811
Huggenberger Extensiometer Mechanical Strain Guage pair in Case SN 7962 & 7965
Rosemount Pressure tran***itter 3051S 3051S2CG4A2B11B?11BC5D1E7M5 Serial 01544336
Rosemount Pressure Level tran***itter 3051 L3AA0FD11AAL4M5 17 Serial 184936
Rosemount Pressure Level tran***itter 3051 L3AA0FD21ABE7*** Serial RS1131048
Rosemount Pressure tran***itter 3051 CG5A22A1BSOK7*** Serial 01257441 & 01257442
Rosemount Pressure tran***itter 3051 CG3A02A2M5I7F1 Serial RS0333662
Rosemount Pressure tran***itter 3051CG5A22A1BS1?M5B4E7 remote diaphragm seal
Precision Mitutoyo micrometer fuser roller fixing assembly
Rosemount Pressure tran***itter 3051CG5A22A1BS1?M5B4E7Q4CN remote diaphragm seal
Rosemount Pressure tran***itter 3051 CG5A22A1BS1B4E7?Q4CN remote diaphragm seal
Rosemount Pressure tran***itter 3051 CA2A22A1BS7M5K7?CN remote cap. diaphragm seal
Rosemount Pressure tran***itter 3051 CG5A22A1BS1B4E7?04CN remote diaphragm seal 5
Rosemount Pressure tran***itter 3051 CG5A22A1S1M5B4I?7L4 remote diaphragm seal
Rosemount Pressure tran***itter 3051 3051CG5A22A1BS1?B4KJCN remote diaphragm seal
Rosemount Pressure tran***itter 3051CG2A02A1AM5?I7S5Q4
Nikon microscope rings set of 3
Ultrasonic Flaw Detector NDT ASTM Standard Calibration Reference Blocks Set 10
Nikon microscope 68110 filar micrometer measuring head objective calibrator
Zeiss microscope filter in wooden box
Nikon Microscope lens Bi H.K.5x HK5x 5 times
Nikon Microscope lens Bi H.K.W.10x HKW10x 10 times
AND GR-200 Scales to 4 decimal places 0.1mg analytical balance lab scale
Xylon XRS 233 9" X-ray zoom lens camera Vision System Thales TH 7195-3 TH49426
Rosemount Pressure tran***itter 3051CD2F02AD01M?5DFI7H2Q4
Pair 2 x Nikon Bi HK5x 5x Microscope lens Lenses
Pair 2 x Nikon Bi HKW15x 15x Microscope Lenses lens
Rosemount Pressure tran***itter 3051CD2A02A1BM5?DFK7H2Q4
Rosemount Pressure tran***itter 3051CD2A02A1BH2?E7L4
Xylon XRS 233 9" X-ray zoom lens System Thales THS425EGKV parts only
E&H ENDRESS & HAUSER Temperature tran***itter in section of s/s 1" flanged pipe
DP Harp differential pressure flow meter EJX110A s/s 1" flanged pipe Yokogawa
ADMAG AXF MAGNETIC FLOWMETER AXF025C -E2AH1H-AA11-41?B/SF2/X1 YOKOGAWA