在源文件inv_mpu.c中有一个结构定义gyro_state_s和一个文件范围变量声明:
static struct gyro_state_s st = { .reg =& reg, .hw =& hw, .test =& …
将结构放在两个文件中包含的共享头中。
extern意味着:'这是在其他地方定义/实例化的'
由于它上面的结构不能编译成任何物理代码(结构的实例确实如此,结构本身只描述了如何创建它的实例),你只需要在两个文件中定义相同的结构,这是最好的通过将结构放在共享头中然后在您需要该结构的两个文件中包含头来完成。
试图暴露 所有的 st 它的定义只是为了访问这个标志是一个糟糕的设计,应该避免。 全球总是坏的 ,在这种情况下,你将不必要地制作所有的内部 st 对整个程序可见。
st
inv_mpu.c已经有了一个功能 mpu_set_bypass() 在使用它之前调用它,所以必须在某个地方有一个原型,很可能在现有的头文件inv_mpu.h中。对现有代码风格解决方案最简单,最安全和最保守的是添加“ 吸气 “访问者反对 mpu_get_bypass() 。
mpu_set_bypass()
mpu_get_bypass()
在inv_mpu.c中,您可以添加:
unsigned char mpu_get_bypass( void ) { return st.chip_cfg.bypass_mode ; }
将原型声明添加到inv_mpu.h中:
unsigned char mpu_get_bypass( void ) ;
然后在访问源文件中,你 #include "inv_mpu.h" ,然后调用getter,例如:
#include "inv_mpu.h"
if( !mpu_get_bypass() ) ...