问题描述
我写了以下代码:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdint.h>
#include <string.h>
#define Set_bit_(PORT,BIT) PORT|=(1<<BIT)
#define Clr_bit_(PORT,BIT) PORT&=~(1<<BIT)
#define OUTPUT 1
#define INPUT 0
#define HIGH 1
#define LOW 0
void Sei();
void cli();
struct {
volatile unsigned int FLAG_ISR0 : 1;
volatile unsigned int FLAG_ISR1 : 1;
} FLAG_BIT;
int main(void)
{
}
void Sei()
{
Set_bit_(SREG,7);
}
void cli()
{
Clr_bit_(SREG,7);
}
每当我包含中断标头时,编译器就会在一行中显示一个错误,cli
表示
error: expected identifier or '(' before 'asm'
解决方法
#include<avr/interrupt.h>
此文件(source)具有宏sei()
。因此,线
void cli()
扩展为
void __asm__ __volatile__ ("cli" ::: "memory")
这不是您期望的。
您可以为该函数使用其他名称(例如,使名称以大写字母Cli
开头,就像使用Sei
一样)。
但是,由于这些功能的作用与cli()
和sei()
宏完全相同,因此您可能希望完全丢弃它们,而改用宏。