to Xenia!
Это экзамен?
1. 0x00, 0x02, 0x04 и т.п. - это СЛОВАРНЫЕ адреса. AVR хоть и 8-ми разрядный МК, но память программ у него 16-ти битная
2. действительно на каждый вектор отводится 4 байта (у ТС это m1281/1280, разговор не идет про m8). Смотрим любой листинг:
Код
0: 0c 94 6f 03 jmp 0x6de; 0x6de <__ctors_end>
4: 0c 94 8c 03 jmp 0x718; 0x718 <__bad_interrupt>
8: 0c 94 8c 03 jmp 0x718; 0x718 <__bad_interrupt>
c: 0c 94 8c 03 jmp 0x718; 0x718 <__bad_interrupt>
10: 0c 94 8c 03 jmp 0x718; 0x718 <__bad_interrupt>
14: 0c 94 8c 03 jmp 0x718; 0x718 <__bad_interrupt>
18: 0c 94 75 15 jmp 0x2aea; 0x2aea <__vector_6>
1c: 0c 94 8a 15 jmp 0x2b14; 0x2b14 <__vector_7>
20: 0c 94 9f 15 jmp 0x2b3e; 0x2b3e <__vector_8>
24: 0c 94 8c 03 jmp 0x718; 0x718 <__bad_interrupt>
0c 94 - это команда jmp, вторые два байта - 16-ти разрядный адрес перехода
3. Про смещение. 0x00 - адрес перехода по ресету (так сказать немаскируемое прерывание у AVR МК), соответственно 0x02 - начало таблицы остальных прерываний
4. Условно всю таблицу прерываний можно разделить на две части: область перехода по ресету и область переходов по остальным прерываниям. FUSE-бит BOOTRST отвечает только за размещения области перехода по ресету, а бит IVSEL в MCUCR (относительно m1281/1280) - за размещение остальной таблицы переходов по прерываниям (причем смещение у нее равно 2 слова - для перехода по ресету в случае совпадения области размещения двух частей таблицы). Отсюда и возникают четыре варианта размещения всей таблицы.
5. По всем остальным возникающим вопросам можно почитать даташит (у ТС это m1281/1280): раздел 13 "Interrupts". Я не очень хороший учитель
Сообщение отредактировал alexeyv - Mar 13 2015, 09:09