【发布时间】:2018-12-23 12:13:22
【问题描述】:
我一直在使用 python java 和 c++ 进行编程,它们都有预定义的列表对象。我现在正在研究嵌入式 C 中的微控制器,但列表等对象和 printf 等函数根本不存在。
我想要做的是以下。我有多个附加到定义的寄存器。我想把我所有的定义放在一个我可以访问的列表中。
#include <stdlib.h>
#include <stdio.h>
#include <xc.h>
#define KP_ROW1 LATBbits.LATB0
#define KP_ROW2 LATBbits.LATB1
#define KP_ROW3 LATBbits.LATB2
#define KP_ROW4 LATBbits.LATB3
#define KP_COL1 LATBbits.LATB4
#define KP_COL2 LATBbits.LATB5
#define KP_COL3 LATBbits.LATB6
#define KP_COL4 LATBbits.LATB7
KP_ROW = [KP_ROW1, KP_ROW2, KP_ROW3, KP_ROW4]; //error on this line
KP_COL = [KP_COL1, KP_COL2, KP_COL3, KP_COL4]; //error
for(int i=0;i<4;i++)
{
if (KP_COL[i] == 1){return 1;}
}
由于我以前没有 C 嵌入式方面的经验,我认为 google 可以帮助我,但似乎我找到的所有解决方案都需要对结构有很好的理解和真正复杂的函数的制作。
这样做的原因是我可能会有 100 个引脚,我不想为每个引脚都做“if”语句,我想遍历一个列表。我正在使用带有 XC8 编译器的 PIC18F。
我在征求意见。你会怎么做?有没有比创建自己的列表类更快、更简单的方法?
【问题讨论】:
-
那么你能给我们编译器为错误行发出的错误消息吗?它们看起来像语法错误,如果你有一些 C++ 经验,我会认为你可能能够解释。
-
所以您想列出对宏的引用?是否保证每个宏都是
variable.member? -
您只需要读取它们,还是也需要写入它们?
-
我对你想要从这些定义中得到什么感到困惑。似乎每个 KP 定义都是寄存器的地址值,但您正在测试每个是否等于数字(上面的 1)?。