【发布时间】:2019-09-13 08:10:27
【问题描述】:
我有两个版本的板子,代码的特定部分根据#define BIAS_VOLTAGE 的值执行
if(vol < BIAS_VOLTAGE)
{
//Execute this
}
else if (vola >= BIAS_VOLTAGE)
{
//Execute This
}
现在 BIAS_VOLTAGE 在头文件中#定义 (#define BIAS_VOLTAGE 3) 但对于不同的板,它是 5(5V)。
检测这一点的唯一方法是轮询一个 GPIO 状态(在 main 中的 GPIO 初始化后保持高或低。这仅完成一次)。
如果它很高,BIAS_VOLTAGE 3 否则 5 由于#BIAS_VOLTAGE在很多地方使用,我如何知道GPIO在启动时(甚至在main之前)的状态并修复#define值。
我知道#define 在编译时得到修复,但我需要在运行时修复这个常量值。(这将永远保持) 更新:工具链是 IAR,微控制器是 STM32F4
【问题讨论】:
-
为什么不让
BIAS_VOLTAGE成为一个变量,一旦初始化完成,你就可以读取GPIO引脚状态。 -
您无法在运行时更改定义值,因此我可以看到 spdude 建议的唯一替代方法是拥有两个版本的应用程序并使用小型启动应用程序来检测实际电压水平,并基于此调用适当版本的主应用程序..
-
定义由预处理器处理(编译前),不能在运行时修改。
-
如果您不能自动检测到它,您必须以某种形式对其进行硬编码(驱动程序中的平台数据,或某些操作系统中的 DT blob 等平台描述)。顺便说一句,您使用任何操作系统(例如 Zephyr)吗?
-
为什么要在
main()之前?只需要在确定使用之前?
标签: c embedded microcontroller gpio