按照PTA的方式定义了BITR,程序进行位判断与位设置,CodeWarrior在对BITR编译时使用ANSI C 的字节操作指令,需7条汇编指令占14个字节,不仅指令字节多且操作时间长。
可是CW对PTA却使用HC08位判断与位设置指令,只需2条汇编指令和只占5个字节。
如何令CW对位判断与位设置编译时使用位判断与位设置指令?
// 以下是C程序:
#include
#include "derivative.h" /* include peripheral declarations */
#include "main_asm.h" /* interface to the assembly module */
/* 设置位操作寄存器*/
typedef union {
byte Byte;
struct {
byte BITR0 :1;
byte BITR1 :1;
byte BITR2 :1;
byte BITR3 :1;
byte BITR4 :1;
byte BITR5 :1;
byte BITR6 :1;
byte BITR7 :1;
} Bits;
} BITRSTR;
extern volatile BITRSTR _BITR 0x00000100;
#define BITR _BITR.Byte
#define BITR_BITR0 _BITR.Bits.BITR0
#define BITR_BITR1 _BITR.Bits.BITR1
#define BITR_BITR2 _BITR.Bits.BITR2
#define BITR_BITR3 _BITR.Bits.BITR3
#define BITR_BITR4 _BITR.Bits.BITR4
#define BITR_BITR5 _BITR.Bits.BITR5
#define BITR_BITR6 _BITR.Bits.BITR6
#define BITR_BITR7 _BITR.Bits.BITR7
#define BITR_BITR0_MASK 1
#define BITR_BITR1_MASK 2
#define BITR_BITR2_MASK 4
#define BITR_BITR3_MASK 8
#define BITR_BITR4_MASK 16
#define BITR_BITR5_MASK 32
#define BITR_BITR6_MASK 64
#define BITR_BITR7_MASK 128
volatile BITRSTR _BITR;
void main(void)
{
if (PTA_PTA0==0) PTA_PTA1=0;
if (BITR_BITR0==0) BITR_BITR1=0;
}
// CW编译后形成的汇编指令列表文件:
45: void main(void)
46: {
47: if (PTA_PTA0==0) PTA_PTA1=0;
0000 000002 [5] BRSET 0,_PTA,L5 ;abs = 0005
0003 1300 [4] BCLR 1,_PTA
0005 [5] L5:
48:
49: if (BITR_BITR0==0) BITR_BITR1=0;
0005 c60000 [4] LDA _BITR
0008 a501 [2] BIT #1
000a 2607 [3] BNE L13 ;abs = 0013
000c 450000 [3] LDHX _BITR
000f f6 [2] LDA ,X
0010 a4fd [2] AND #-3
0012 f7 [2] STA ,X
0013 [5] L13:
50: }
0013 81 [4] RTS
51:
[此贴子已经被作者于2006-5-8 1:14:35编辑过]
[此贴子已经被作者于2006-5-8 1:18:26编辑过]
[此贴子已经被作者于2006-5-8 18:03:21编辑过]
[此贴子已经被作者于2006-5-8 18:10:55编辑过]
[此贴子已经被作者于2006-5-10 22:32:41编辑过]
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |