如何优化程序,使时间减少?

[复制链接]
 楼主| a868247 发表于 2012-12-27 17:20 | 显示全部楼层 |阅读模式
pi, gp, GPIO, AN, IO
static uint32_t ans;

ans<<=1;  
GPIOB->BSRRL = GPIO_Pin_3;  //SCLK_HIGH;         
if(GPIOB->IDR & GPIO_Pin_4)ans++;
GPIOB->BSRRH = GPIO_Pin_3; //SCLK_LOW;

我SYSCLK是32M ,上面运行时间要250ns, 达不到要求,如何优化程序,使时间减少?
uet_cache 发表于 2012-12-27 17:33 | 显示全部楼层
程序感觉已经很简单了,好像不能再少语句了。你可以把SYSCLK加大试试
 楼主| a868247 发表于 2012-12-28 08:46 | 显示全部楼层
uet_cache 发表于 2012-12-27 17:33
程序感觉已经很简单了,好像不能再少语句了。你可以把SYSCLK加大试试

低功耗系列的,SYSCLK 已经最大了!
5186 发表于 2012-12-28 09:12 | 显示全部楼层
GPIO_Pin_4这个用移位试试,应该要快点
lxyppc 发表于 2012-12-28 10:08 | 显示全部楼层

if(GPIOB->IDR & GPIO_Pin_4)ans++;
换成 ans += BIT_BAND(GPIOB->IDR, 4)

GPIOB->BSRRL = GPIO_Pin_3;
换成GPIO->BSRR = GPIO_Pin_3;

GPIOB->BSRRH = GPIO_Pin_3;
换成GPIOB->BSRR = GPIO_Pin_3<<16;

感觉上不会有太多变化,你即然要在时钟的上升沿读数据,为什么不用SPI之类的外设
uet_cache 发表于 2012-12-28 10:14 | 显示全部楼层
你的ans是个普通变量,读和写好像不影响BSRRH的操作,你的执行时间要求,无非是这个BSRRH操作的时间要减小。我觉得你可以把asn相关的两条语句放到后面,不算到你要求的时间里。或者你这个是中断函数,还是,,什么函数,函数调用也需要时间,你即然时间要求这么严格,就要整体考虑你的程序结构了。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

97

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部