原创 位域与移位的效率测试-avr单片机

2008-10-5 18:23 2958 5 5 分类: MCU/ 嵌入式


前些天在别人的Blog上看到:avr中,位域数据结构来操作的效率比移位(1<<n)要高,我还信以为真。今天测试了一下才发现效果是一样的(没有仔细研究汇编代码,就时编译的字节数一样多)


测试环境:winavr2005


用官方库移位的代码:


#include <avr/io.h>

void main(void)
{
PORTA=0xff;
PORTA&=~(1<<PA0);
}


位域结构定义的代码:


typedef unsigned char byte;
typedef union
{
     byte Byte;
     struct
{
        byte BIT0        :1;
        byte BIT1        :1;
        byte BIT2        :1;
        byte BIT3        :1;
        byte BIT4        :1;
        byte BIT5        :1;
        byte BIT6        :1;
        byte BIT7        :1;
}Bits;
}PORTASTR;
//#define PORT (*((volatile PORTASTR *) (&PORTA)))
#define PORT (*((volatile PORTASTR *) (0x3b)))
#define PORTA                       PORT.Byte
#define PORTA_BIT0                  PORT.Bits.BIT0
    #define PORTA_BIT1                 PORT.Bits.BIT1
    #define PORTA_BIT2                  PORT.Bits.BIT2
    #define PORTA_BIT3                  PORT.Bits.BIT3
    #define PORTA_BIT4                  PORT.Bits.BIT4
    #define PORTA_BIT5                  PORT.Bits.BIT5
    #define PORTA_BIT6                  PORT.Bits.BIT6
    #define PORTA_BIT7                  PORT.Bits.BIT7


void main(void)
{
PORTA=0xff;
PORTA_BIT0=0;
}


编译结果:都时一样的162字节


Device: atmega16


Program:     162 bytes (1.0% Full)
(.text + .data + .bootloader)


Data:          0 bytes (0.0% Full)
(.data + .bss + .noinit)



-------- end --------



> Process Exit Code: 0


结论:实践才是真理啊

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条