Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
Во-первых, почему регистровая переменная не может быть экстерн?
Потому, что при общении с регистровой переменной компилятор использует номер регистра, в котором та переменная хранится. И не генерирует никаких ссылок для дальнейшей линковки. В случае с экстерн переменной она хранится там, куда ее положит линкер. Компилятор генерирует ссылку на адрес в памяти, которую потом линкер заменяет на конкретный адрес переменной.
Поэтому.
На этапе генерации кода компилятор должен иметь информацию о том, в каком регистре хранится эта переменная.
Поэтому.
Для регистровых переменных допускается множественное объявление со всеми регалиями и без экстерн. А с экстерн не допускается.
Поэтому.
Там, где Вы пишите экстерн (объявляете переменную), в хидере, нужно написать переменную без экстерн и со всеми регалиями. Там, где переменная определяется, т.е. в сишнике, ничего писать не нужно. Хидер смело включайте во все сишники.
Так в avr-gcc и IARе.