我有两个版本的板,其中代码的特定部分根据#define BIAS_VOLTAGE 的值执行
if(vol < BIAS_VOLTAGE)
{
//Execute this
}
else if (vola >= BIAS_VOLTAGE)
{
//Execute This
}
现在 BIAS_VOLTAGE 在头文件中#defined (#define BIAS_VOLTAGE 3) 但对于不同的电路板,它是 5(5V)。
检测此问题的唯一方法是轮询一个 GPIO 状态(在 main 中的 GPIO 初始化后保持高或低。这只完成一次)。
如果它是高的,BIAS_VOLTAGE 3 否则 5 由于#BIAS_VOLTAGE 在许多地方使用,我如何在启动时(甚至在 main 之前)知道 GPIO 的状态并修复#define 值。
我知道#define 在编译时得到修复,但我需要在运行时修复这个常量值。(这将永远保持) 更新:工具链是 IAR,微 Controller 是 STM32F4
最佳答案
你可能把一个简单的事情复杂化了:
给定:
#define BIAS_3V0 3
#define BIAS_5V0 5
int getBiasVoltage()
{
static int bias_voltage = 0 ;
// Initialise on first use...
if( bias_voltage == 0 )
{
bias_voltage = boardId() ? BIAS_3V0 : BIAS_5V0 ;
}
return bias_voltage ;
}
其中boardId()
是GPIO读取识别变体(根据需要替换成你自己的代码),那么你的代码变成:
if(vol < getBiasVoltage() )
{
//Execute this
}
else if (vola >= getBiasVoltage() )
{
//Execute This
}
板的身份在第一次使用时被检查一次,然后返回先前确定的值。因为变量隐藏在函数内部,所以它也是只读的。
关于在嵌入式编程中 main 启动之前检查 GPIO 的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57919680/