|
本帖最后由 prince2010 于 2021-2-26 16:01 编辑
直接上代码——
void TIM2_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = 65536 - 1;
TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
// TIM_ClearFlag(TIM2, TIM_FLAG_Update);
// TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM2, ENABLE);
}
u32 TimeIn_us, TimeOut_us, Time_us, Time_us_Max;
#define LoopTimeTestIn TimeIn_us = TIM2 -> CNT;
#define LoopTimeTestOut TimeOut_us = TIM2 -> CNT; \
if(TimeOut_us < TimeIn_us) TimeOut_us += 65536; \
Time_us = TimeOut_us - TimeIn_us; \
if(Time_us_Max < Time_us)Time_us_Max = Time_us;
u32 funA(u32 a, u64 b)
{
return (a- (b>> 8)) / 350;
}
u32 funB(u32 a, u32 b)
{
return (a- b) / 350;
}
void testspeed(void)
{
while(1)
{
LoopTimeTestIn
funA(0x8f5050a6, 0x8f4f70b2);
// funB(0x8f5050a6, 0x8f4f70b2>>8);
LoopTimeTestOut
printf("Time_us:%uus, Time_us_Max:%uus\r\n", Time_us, Time_us_Max);
delay_ms(100);
}
}
现象:运行funA,Time_us_Max大约44us,而运行funB,Time_us_Max大约1us都不到,相差如此之大!
很好奇:写除法表达式需要这么讲究吗?
说明:都没有开优化等级。
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|