【发布时间】:2016-09-10 22:25:09
【问题描述】:
我在最近的一次采访中被问到一个问题,下面定义了一个函数
int square(volatile int * p)
{
return *p**p;
}
有人告诉我这个函数有问题,不适合计算平方,我认为这是由于 volatile,谁能解释为什么?
【问题讨论】:
-
因为
volatile表明*p可能会在评估*p * *p的过程中发生变化。尤其是在嵌入式设备上,p可能是任何奇怪的东西,例如指向某个内存的指针,其中某些硬件直接存储并不断更新计数器或其他东西的当前值,或者说一些奇特的东西,每次你读取它时都会改变它的值,或者其他什么,天空真的是那里的极限。 -
因此,在这种情况下,将
p之类的指针定义为易失性是否是正常做法,这样做的优点和缺点是什么 -
正常情况下,这个函数根本不涉及任何指针...
-
@Uint32 很多关于这个主题的好文章可以在这里找到:barrgroup.com/Embedded-Systems/How-To/Articles
-
@Uint32 :Lundin 所说的 - 无论如何,Micheal Barr 的许多文章都出现在 Embedded.com 上。您可以在书架上摆满有关嵌入式系统开发各个方面的书籍。对于一般全面的报道,请考虑 Colin Walls 的 Embedded Software: The Works - 他也是 Embedded、com 和其他出版物上许多文章的作者。