gcc未使用,但在volatile上设置变量警告
我有一个小函数,它使用volatile变量将值写入HWgcc未使用,但在volatile上设置变量警告,c,gcc,C,Gcc,我有一个小函数,它使用volatile变量将值写入HW void gige_rx_prepare(void) { volatile uint hw_write; // more code here hw_write = 0x32; } gcc版本4.7.3(Altera 13.1 Build 162)将此变量标记为已设置但未使用的变量,尽管它是一个易失性变量,有助于HW寄存器的写入 我仍然希望在任何其他变量上看到此警告。有没有一种方法可以避免对易失性变量发出此警告
void gige_rx_prepare(void) {
volatile uint hw_write;
// more code here
hw_write = 0x32;
}
gcc版本4.7.3(Altera 13.1 Build 162)将此变量标记为已设置但未使用的变量,尽管它是一个易失性变量,有助于HW寄存器的写入
我仍然希望在任何其他变量上看到此警告。有没有一种方法可以避免对易失性变量发出此警告,而不必为代码中的每个易失性变量设置gcc属性?局部变量不是h/w寄存器的良好表示形式,这也是您看到此警告的部分原因 编译器抱怨(正确),因为hw_write是堆栈上的局部变量。在这种情况下,编译器确实有足够的数据来推断这是一个无意义的赋值。如果它是一个全局变量或一个指向易失性uint的指针,那么就不会有任何警告,因为变量的生命周期不受函数范围的限制,因此它可以在其他地方使用 以下示例编译时没有任何警告:
volatile int hw_write2; // h/w register
void gige_rx_prepare2(void) {
// more code here
hw_write2 = 0x32;
}
void gige_rx_prepare3(void) {
volatile int *hw_write3 = (void*)0x1234; // pointer to h/w register.
// more code here
*hw_write3 = 0x32;
}
回答得好。在我列出的问题中,必须在硬件设计师的帮助下调整原始代码,以解释硬件中的怪癖。请注意,将其设置为
静态(寿命不受范围限制)并不会删除警告。