1

我想在https://github.com/ARM-software/CMSIS_5/blob/develop/Device/ARM/ARMCM33/Source/startup_ARMCM33.c添加 400 Interrupt_Handler 。

机械方法是按以下方式添加它们:

void Interrupt10_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
void Interrupt11_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
void Interrupt12_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
....
void Interrupt400_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));

有没有其他方法可以添加它们?像下面这样的东西?

for($i=0;$i<=400;$i++) {
void Interrupt$i\_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
}
4

2 回答 2

1

你可以用宏来做到这一点。
第一步是将 i 替换为名称

#define X(i) void Interrupt##i##_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));

下一步是调用宏 400 次。使用递归宏可以不用 400 行:

#define X2(i) X(i) X(i+1)
#define X4(i) X2(i) X2(i+2)
...
于 2020-08-07T13:18:30.630 回答
1

不在源代码中。但是写3行C程序。然后复制粘贴。

int main (void)
{
    for(int i = 0; i < 500; i++) printf("void Interrupt%d_Handler     (void) __attribute__ ((weak, alias(\"Default_Handler\")));\n", i);
    return 0;
}

https://godbolt.org/z/hnKznT

于 2020-08-07T13:05:15.853 回答