а по поводу extern - если убрать extern, то это уже будет определение глобальной переменной, и в каждом файле куда включается этот H файл компилятор будет создавать новую переменную, и линкер естественно пошле вас подальше ругаясь что вы определили переменную с одним именем несколько раз....
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)