gpt4 book ai didi

c++ - 如何基于循环迭代器选择函数

转载 作者:行者123 更新时间:2023-12-02 09:56:43 26 4
gpt4 key购买 nike

在这里找到解决方案的部分问题可能是我不知道要问的正确术语。为此,我请原谅。

对于微 Controller ,我有一个列表,希望同时启动。每个实例都有其自己的ISR,并为每个实例调用类的相同成员,但以引脚号作为参数。

我正在尝试将阵列中的每个引脚连接到其相应的ISR,但我想通过引脚的索引选择哪个ISR。这是Mailer Code™,可能无法编译,但我相信足以理解这个想法:

#define PIN1 4
#define PIN2 9
#define PIN3 10
#define PIN4 8
#define PIN5 12

PinAct *pPinact; // Pointer to Counter class

static ICACHE_RAM_ATTR void HandleInterruptsStatic1(void) {
pPinact->handleInterrupts(1);
}

static ICACHE_RAM_ATTR void HandleInterruptsStatic2(void) {
pPinact->handleInterrupts(2);
}

static ICACHE_RAM_ATTR void HandleInterruptsStatic3(void) {
pPinact->handleInterrupts(3);
}

static ICACHE_RAM_ATTR void HandleInterruptsStatic4(void) {
pPinact->handleInterrupts(4);
}

static ICACHE_RAM_ATTR void HandleInterruptsStatic5(void) {
pPinact->handleInterrupts(5);
}

class PinAct {
public:
PinAct() {};
void handleInterrupts(int);
}

void PinAct::PinAct() {
int actPins[] = {PIN1, PIN2, PIN3, PIN4, PIN5};
for (int i = 0; i <= sizeof(actPins); i++) {
pinMode(actPin[i], INPUT)
attachInterrupt(digitalPinToInterrupt(KEG1), HandleInterruptsStatic + i, FALLING);
}
}

void PinAct::handleInterrupts(int pin) { // Bubble Interrupt handler
// Do something with pin
}

目标是实际上使 attachInterrupt(digitalPinToInterrupt(KEG1), HandleInterruptsStatic + i, FALLING);有效,并借助索引i选择哪个ISR。

我需要对是否分配ISR做出其他决定,因此最好串联要分配的ISR名称。

最佳答案

attachInterrupt(/* ... */, HandleInterruptsStatic + i, /* ... */);
// ^^^^^

为了选择要在运行时根据某些整数索引 i调用的函数,可以使用函数指针数组:

typedef void (*FunctionPointer_t)(void);
FunctionPointer_t functions[] = {
HandleInterruptsStatic1,
HandleInterruptsStatic2,
// ...
};

// to use:
functions[i]();

关于c++ - 如何基于循环迭代器选择函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59478531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com