1、直接赋值:Keil中对外设直接赋值,查看汇编,只用一句话,而unspIDE没有这个能力
2、对内存映射地址通过指针赋值:
//------------------------------
//Keil:
unsigned char *p0=(unsigned char *)(0x80);
/* MOV R3,#0x00
MOV R2,#0x00
MOV R1,#P0(0x80) */
*p0 = 0x55;
/*MOV A,#0x55
LCALL C?CSTPTR(C:0024) */
//----------------------------------
//unspIDE:
unsigned int *p0=(unsigned int *)(0x7000);
/*R2=0x7000
[BP]=R2*/
*p0 = 0x55;
/*R2=[BP]
R3=0X55
R4=R2
[R4]=R3
*/
3、通过对结构体寄存器组地址访问:
//----------------------------------
//Keil:
REG1 = 0x44;
/*MOV R0,#SP(0x81)
MOV @R0,#0x44*/
//----------------------------------
//unspIDE:
REG1 = 0xEE;
/*R2=0xEE
[0x7001]=R2*/
其中结构体寄存器组是这么定义的:
typedef struct
{
uint reg0;
uint reg1;
...
}STreg;
#define REG ((volatile STreg *)(0x7000)) //Keil中是#define REG ((volatile STreg *)(0x80))
#define REG1 REG->reg1
上面是一句C对应接着的屏蔽块里面的汇编,可以看出,Keil的效率比较高,虽然UNSP的单片机速度比51高很多,但是如果C编译器效率低的话也很难使这个优势发挥出来。
用户1053025 2006-9-29 15:19