Я определил следующее перечисление и переменные в моем файле main.c:
enum state_codes { S0,
S1,
S2,
S3,
S4,
S10,
S20,
S30,
S40,
S50,
S60,
S70,
S80,
fail,
fsmError
};
enum state_codes cur_state = S0;
enum state_codes old_state = S0;
В другой файл моего проекта (с именем othercode.c ) я должениспользуйте переменную cur_state и значения, перечисленные в перечислении внутри обработчика прерываний, поэтому я написал это объявление в верхней части файла othercode.c :
extern enum state_codes; // <-- first warning see below details
extern enum state_codes cur_state;
Внутри обработчика прерываний я написал этот код:
void EXTI4_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line4);
// FSM state saving inside the external EEPROM
// cur_state : current state from the main.c file
uint8_t data_byte;
if (cur_state == S0) // <-- ERRORS see below details
{
data_byte = 0;
}
I2C_Memory_Write(I2C1, EE_ADDR_FSMSTATE, data_byte);
}
Относительно этой функции у меня есть предупреждение и ошибки, о которых сообщается ниже:
Warning[Pe1000]: a storage class may not be specified here C:\Users\ ... \othercode.c 49
Error[Pe020]: identifier "S0" is undefined C:\Users\ ... \othercode.c 777
Error[Pe070]: incomplete type is not allowed C:\Users\ ... \othercode.c 777
Первое связывание связанообъявление:
extern enum state_codes;
и две другие ошибки функции в строке, о которой я сообщил в коде с помощью <- Errors. </p>
Что мне нужно сделать, так это обратиться кпеременная типа enum внутри другого файла, поэтому я объявил ее extern в этот файл, но кажется, что к этому типу класса хранения можно обратиться таким образом.Кто-то может указать мне правильное направление?
РЕДАКТИРОВАНИЕ
Я решил проблему, переместив перечисление в другой файл, как показано ниже:
enum state_codes { S0,
S1,
S2,
S3,
S4,
S10,
S20,
S30,
S40,
S50,
S60,
S70,
S80,
fail,
fsmError
};
extern enum state_codes cur_state;
Код работаетправильно, но я любезно спрашиваю, если это правильный путь или есть какие-то другие вещи, которые следует учитывать.
Спасибо!
С наилучшими пожеланиями Fire