【发布时间】:2023-02-07 18:27:25
【问题描述】:
以下代码使用 volatile uint8_t 而不是 volatile sig_atomic_t 作为 C 标准要求,因为在 avr 平台上类型 sig_atomic_t 不可用。
这还是合法的代码吗?
使用__SIG_ATOMIC_TYPE__ 合法吗?
是否需要包含cli() / sei() 宏?
#include <stdint.h>
#include <signal.h>
#include <avr/interrupt.h>
volatile uint8_t flag;
//volatile sig_atomic_t flag; // not available in avr-gcc
//volatile __SIG_ATOMIC_TYPE__ flag; // ok?
void isr() __asm__("__vector_5") __attribute__ ((__signal__, __used__, __externally_visible__));
void isr() {
flag = 1;
}
void func(void) {
for (uint8_t i=0; i<20; i++) {
flag = !flag;
}
}
【问题讨论】:
标签: c language-lawyer interrupt-handling signal-handling