2014-01-05 65 views
0

我使用Sublime和Arduino来编程晴雨表(MS5611)。但是,什么是存储只是用作临时存储特定函数内部变量的最佳做法:最佳实践:变量,函数和Arduino?

1)创建适用于所有变量我的头文件中的私有变量?

2)在使用它们的函数内部创建变量?

什么最需要的处理能力和内存使用情况 - (1)一次性创建为私有变量和更改与职能的内容,或(2)创建变量每个I调用一个函数的时间?

+2

如果您的函数只能用于单个函数,那么将它们定义为函数中的局部变量。函数使用的堆栈空间将会增加,但是在函数执行时它只是临时的,添加额外的堆栈空间不会影响性能。 –

回答

0

取决于您的采样率,这意味着多少次调用该函数来保存数据? 在任何情况下,重要的是还要考虑收集和处理数据后内存如何清空,无论如何,如果您没有太多变量,但必须处理更多可以使用的函数最好将它们设置在全球范围内。至少,我在我的项目中这样做,我从来没有遇到过问题。

0

总是在函数中声明它们。这样可以提高可读性,因为它显示了声明背后的意图。它也降低了犯错的几率。

尽可能以“const”为例,例如,

uint16_t sample_it() { 
    const uint16_t sample = analogRead(...); 
    const uint16_t result = do_somehting(sample); 
    return result; 
} 

几乎出于同样的原因,但这也给了编译器更多的优化选项。

是否以及如何变量分配要由编译器和优化。除非你有非常紧性能限制有机会,编译器将优化比你好得多。实际上,使用全局变量有时会减慢代码速度。当然你可以避免分配。但是,您将通过额外的存储说明付款。另一方面,“分配”可能会被优化掉,然后你的全局变量代码变得比局部变量代码慢。

+0

除了你不能修改'const变量'... – ladislas

+1

这就是要点。大多数“变量”实际上是它们范围内的常量。所以他们应该被宣布为常量。这允许编译器进行显着的优化。 –

+0

我同意你应该对任何不改变的变量进行const修饰,并用一个*确定的*值初始化它,但在你的例子中,你的常量会随着时间的推移而改变(每次你调用这个函数)这是禁止:) – ladislas

0

您应该避免使用全局变量,因为它们是从可用堆RAM中分配的,并且在程序期间存在(占用空间)(永远在嵌入式系统中)。全局变量还会降低可维护性和更脆弱的程序。

如果你只需要一个函数里面的数据,有申报。几乎没有惩罚(仅初始化),并且当函数返回时自动返回已用空间,因为局部变量作为传递参数放置在堆栈上。