|
今天使用串口,把每秒循环体执行的次数发送出来,精确的数据如下:
tempdata1=(((*psrc)&0x01)<<7)|(((*psrc1)&0x01)<<5)|(((*psrc2)&0x01)
<<3)| (((*psrc3)&0x01)<<1);
GPIOA->ODR =tempdata1;
CS_H; //#define CS_H {GPIOB->BSRR=GPIO_Pin_1;}
CS_L; //#define CS_L{GPIOB->BRR=GPIO_Pin_1;}
//上面代码,数据采用这种最先的输出方法
//每秒执行次数152次
tempdata1=(((*psrc)&0x01)<<7)|(((*psrc1)&0x01)<<5)|(((*psrc2)&0x01)
<<3)|(((*psrc3)&0x01)<<1);
GPIOA->ODR =tempdata1;
(*((uint32*)(0x40010C10)))=GPIO_Pin_1;
(*((uint32*)(0x40010C14)))=GPIO_Pin_1;
//上面的代码,改变了那个GPIOB-Pin1的输出方法,直接使用BSRR和BRR的地址
//每秒执行次数177次
target1[7]=*psrc>>7;
target1[5]=*psrc1>>7;
target1[3]=*psrc2>>7;
target1[1]=*psrc3>>7;
GPIOA->ODR =tempdata1;
(*((uint32*)(0x40010C10)))=GPIO_Pin_1;
(*((uint32*)(0x40010C14)))=GPIO_Pin_1;
//上面代码,使用了位域,target1为temdata1的位域
//每秒执行次数137次,有所下降
GPIOA->ODR=(((*psrc)&0x02)<<6)|(((*psrc1)&0x02)
<<4)|(((*psrc2)&0x02)<<2)|(((*psrc3)&0x02));
(*((uint32*)(0x40010C10)))=GPIO_Pin_1;
(*((uint32*)(0x40010C14)))=GPIO_Pin_1;
//上面代码,放弃了位域,把数据的整理和输出放在同一个表达式里面
//每秒执行次数190次//这个是目前为止,执行次数最多的形式。
//后来在朋友的提示下,
//增加了位域和联合体,如下
typedef struct _Osrsdata
{
uint8 Bit0:1;
uint8 Bit1:1;
uint8 Bit2:1;
uint8 Bit3:1;
uint8 Bit4:1;
uint8 Bit5:1;
uint8 Bit6:1;
uint8 Bit7:1;
}OneCorSrs;
typedef union Srs_dataAll
{
OneCorSrs SignleColor;
uint8 outputbuff;
}OUTPUTDATA;
OUTPUTDATA Outputdata[4];
Outputdata[0].outputbuff=*psrc;
Outputdata[1].outputbuff=*psrc1;
Outputdata[2].outputbuff=*psrc2;
Outputdata[3].outputbuff=*psrc3;
GPIOA->ODR=(Outputdata[0].SignleColor.Bit0<<7)|(Outputdata
[1].SignleColor.Bit0<<5)|(Outputdata[2].SignleColor.Bit0<<3)|
(Outputdata[3].SignleColor.Bit0<<1);
(*((uint32*)(0x40010C10)))=GPIO_Pin_1;
(*((uint32*)(0x40010C14)))=GPIO_Pin_1;
//使用了如上形式,每秒的执行次数达
//到了306次 ,这个够用了,数据正
//确性还没验证,稍后验证!
|
|