c - 指示使用的 I/O 引脚的宏

标签 c embedded microchip

我正在使用 HiTech PICC32 为 PIC32MX 编写固件。我想避免的问题之一是,由于大多数引脚都有多个名称(例如 AN0 = RB0​​ = CN2 = PGED1),我或其他人可能会不小心使用 RB0 而没有意识到 AN0 已被使用。 (这实际上可能是灾难性的,因为不正确地配置模拟/数字引脚会导调用流消耗过大并释放必要的烟雾。)

除了全面记录使用的每个引脚外,我想知道是否有一种快速的方法可以在编码级别解决这个问题。我想要一个人们(主要是我自己)可以使用的宏,比如 CLAIM_PIN(58),如果它运行两次就会发出警告或错误。

(我不惜一切代价不想要这个,如果唯一可能的解决方案太可怕或无法维护,那么我会忘记它,只是因为哭泣或自焚或其他事情而声名狼藉。我也看到这个关于 macro producing macros 的问题,排除了这一点。)

我应该澄清一下:代码是在多个编译单元中编写的(至少,我认为这就是这个短语的意思)。我有一个 .h/.c 文件用于我的 A2D 代码,SPI 和仅使用某些 I/O 端口的各种外设也类似。空间真的不是问题,我的代码在 PIC32MX 上留有足够的空间;我也可以使用另一个 __DEBUG 标志来删除引脚检查代码以供最终使用。

最佳答案

#define CLAIM_PIN(n) char claimed_pin_##n;

现在,当两段代码尝试占用一个引脚时,符号将被双重定义,编译器或链接器将产生错误。

编辑:根据评论,结果可能会更好:

#define CLAIM_PIN(n) void claimed_pin_#nn(void) {}

关于c - 指示使用的 I/O 引脚的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1622937/

相关文章:

c - 理解函数(const int *a)指向整型常量的指针

c - "invalid use of void expression"

c - 读取引脚上的输入(Teensy)

c - Microchip XC8 警告 "conversion to shorter data type"和 "implicit conversion signed to unsigned"

linux - 修改 Microchip COFF 文件

c - 映射区域中的 malloc

c - 如何在 C 中使用 setenv 避免此错误?

c++ - 在嵌入式环境中使用 C++

c - 想记下我的 C 程序的 CPU 使用率和内存使用率

c - 其他声音然后是原始 .wav 文件