基于ARM的两个函数,用C写的,有几个问题
先看没有优化的版本,使用了位段
void dostageA(void) void dostageB(void) void dostageC(void)
typedef struct{
unsigned int stageA:1;
unsigned int stageB:1;
unsigned int stageC:1;
}Stages_v1;
void dostages_v1(Stages_v1 *stages)
{if(stages->stageA)
{dostageA();}
if(stages->stageB)
{dostageB();}
if(stages->stageC)
{dostageC();}
}
下面是优化过得版本,有两个问题:
1:Stages_v2为什么要定义为无符号长整型?定义为无符号整型或者字符型可不可以?
2:宏定义中lul<<1是什么意思,在函数里是怎么用到的?
typedef unsigned long Stages_v2
#define STAGEA (lul<<0) #define STAGEB (lul<<1) #define STAGEC (lul<<2)
void dostages_v2(Stages_v2 *stages_v2) {
Stages_v2 stages= *stages_v2;
if(stages&STAGEA)
{dostageA();
}
if(stages&STAGB)
{dostageB();
}
if(stages&STAGEC)
{dostageC();
}
<<ARM嵌入式系统开发--软件设计与优化>> Anderw N.Sloss 第5。8节 |