С xc8 вы должны быть осторожны при объявлении переменной
как тот же тип в каждом файле, как вы могли, по ошибке,
объявить что-то int
в одном файле и char
сказать в другом.
Это может привести к повреждению переменных.
Эта проблема была элегантно решена на форуме по микрочипам около 15 лет назад.
/ * См. «Http: www.htsoft.com» /
/"forum / all / showflat.php / Cat / 0 / Number / 18766 / an / 0 / page / 0 # 18766"
Но эта ссылка, похоже, больше не работает ...
Итак, я быстро попытаюсь объяснить это;
сделать файл с именем global.h.
В нем заявляют следующее
#ifdef MAIN_C
#define GLOBAL
/* #warning COMPILING MAIN.C */
#else
#define GLOBAL extern
#endif
GLOBAL unsigned char testing_mode; // example var used in several C files
Теперь в файле main.c
#define MAIN_C 1
#include "global.h"
#undef MAIN_C
Это означает, что в main.c переменная будет объявлена как unsigned char
.
Теперь в других файлах просто включается global.h
объявить его как extern для этого файла .
extern unsigned char testing_mode;
Но он будет правильно объявлен как unsigned char
.
Старый пост на форуме, вероятно, объяснил это немного яснее.
Но это реальный потенциал gotcha
при использовании компилятора
это позволяет вам объявить переменную в одном файле, а затем объявить ее extern как другой тип в другом файле. Проблемы, связанные с
то есть если вы говорите, объявил testing_mode как int в другом файле
он бы подумал, что это 16-битная переменная и перезапишет какую-то другую часть памяти, что может привести к повреждению другой переменной. Сложно отлаживать!