打印

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

[复制链接]
1480|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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这个用移位试试,应该要快点

使用特权

评论回复
5
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之类的外设

使用特权

评论回复
6
uet_cache| | 2012-12-28 10:14 | 只看该作者
你的ans是个普通变量,读和写好像不影响BSRRH的操作,你的执行时间要求,无非是这个BSRRH操作的时间要减小。我觉得你可以把asn相关的两条语句放到后面,不算到你要求的时间里。或者你这个是中断函数,还是,,什么函数,函数调用也需要时间,你即然时间要求这么严格,就要整体考虑你的程序结构了。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

97

帖子

1

粉丝