реклама на сайте
подробности

 
 
> Не выходит одолеть прерывания в Bootloader'е
Sirko
сообщение Apr 11 2011, 00:06
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795



За основу было взято вот Это. Вернее хочу использовать Makefile от сюда.
CODE
#include <stdint.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/boot.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#if defined(BOOTLOADERHASNOVECTORS)
#warning "This Bootloader does not link interrupt vectors - see makefile"
/* make the linker happy - it wants to see __vector_default */
// void __vector_default(void) { ; }

void __vector_default(void) { ; }
#endif

volatile unsigned char b = 0;

ISR(TIMER0_COMP_vect){
b = 1;
}

ISR(TIMER0_OVF_vect){
b = 1;
}

int main(void){

TCCR0 = _BV(CS02) | _BV(CS00);
OCR0 = 100;
TIMSK |= _BV(OCIE0) | _BV(TOIE0);
MCUCR |= (1<<IVCE); // Enable change of Interrupt Vectors
MCUCR |= (1<<IVSEL); // Move interrupts to Boot Flash section


DDRE |= _BV(PE7);
unsigned long x = 0;
while(1){
asm("sei");
x = (cool.gif ? (1UL<<15) : (1UL<<18);
while(--x){asm("nop");}
PORTE ^= _BV(PE7);
}
return 0;
}
Тест не мудреный, Если прерывания запретить, то лампа моргает редко. Если разрешить, - то почащще. А в моем случае, при разрешении прерывания она не горит вовсе. Вероятно при наступлении прерывания происходит улет в ???.
Проц - Mega128, компилятор - WinAVR-20100110.
LDFLAGS += -Wl,--section-start=.text=0x1E000, наверное
НЕХ на выходе начинается вот так:
:020000021000EC
:10E0000011241FBECFEFD0E1DEBFCDBF11E0A0E0F5
Фьюзы настроены на 4кБ, addr-$F000

Что где править, ума не приложу.
А проект, если понадобится прилагаю.
Прикрепленный файл  Bootloader.zip ( 31.25 килобайт ) Кол-во скачиваний: 112


Сообщение отредактировал Sirko - Apr 11 2011, 22:02
Причина редактирования: [codebox]
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Sirko
сообщение Apr 11 2011, 21:57
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795



Цитата
Скорее всего...

Скорее всего. Кто бы носом ткнул.

Цитата
Настройте фъюзы на 2k

Прикрепленное изображение


Полученый на выходе HEX:
:020000021000EC
:10F0000011241FBECFEFD0E1DEBFCDBF11E0A0E0E5
:10F01000B1E0E0EDF0EF01E00BBF02C007900D9210
:10F02000A030B107D9F711E0A0E0B1E001C01D9216
:10F03000A130B107E1F70E9440F80C9466F80C94F7
:10F0400021F808951F920F920FB60F9211248F93FB
:10F0500081E0809300018F910F900FBE0F901F9061
:10F0600018951F920F920FB60F9211248F9381E083
:10F07000809300018F910F900FBE0F901F901895F5
:10F0800085E083BF84E681BF87B7836087BF85B78C
:10F09000816085BF85B7826085BF179A789480911B
:10F0A0000001882329F480E090E0A4E0B0E006C0ED
:10F0B00080E090E8A0E0B0E001C000000197A10965
:10F0C000B109D9F783B1805883B9E8CFF894FFCF5D
:040000031000F000F9
:00000001FF

т.е. 0x1F000 байт / 2 = 0xF800 слов, что вроде сходится с картинкой программатора.
Прерывания разрешил, страницу векторов тоже поменял, какого рожна ему нужно?



Кстати, за одно хочу уточнить такой момент:
:02 0000 02 1000 EC
Если здесь двойка, значит последующее за ней двухбайтовое значение отражает: на сколько последующие данные будут сдвинуты относительно их текущего адреса. Если значение - 0000, значит заполняется первая половина флэша (mega128); если 1000 - значит вторая половина; если 2000 - значит сегмент будет 128 - 192КБ (в более емких процах).
Поправьте, если я ошибаюсь. И еще, для EEPROM какие то обрамления секций будут в хексе, или разница только в расширении? Если в приведенной строке вместо 02 будет 03, значит последующее значение за ней - это адрес стартапа программы, и на эту строку можно забить при парсинге.

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Sirko   Не выходит одолеть прерывания в Bootloader'е   Apr 11 2011, 00:06
- - Vetal-Soft   Скорее всего заморочка с измерением памяти програм...   Apr 11 2011, 02:41
|- - Vetal-Soft   У Вас в makefile: Код#/* Select Boot Size in Words...   Apr 12 2011, 08:36
- - defunct   Цитата(Sirko @ Apr 11 2011, 03:06) LDFLAG...   Apr 12 2011, 13:00
- - alag57   Попробуйте так: Код //MCUCR = (1<<IVCE...   Apr 12 2011, 15:01
- - Sirko   ЦитатаПохоже вы не укладываетесь в... Попробуйте ...   Apr 12 2011, 18:29
- - SysRq   Цитата(Sirko @ Apr 12 2011, 22:29) Лампа ...   Apr 12 2011, 20:10
- - Sirko   Спасибо, не видел. Исправил. К сожалению пока-что ...   Apr 12 2011, 21:18
- - SysRq   Цитата1. Write the Interrupt Vector Change Enable ...   Apr 12 2011, 21:23
- - Sirko   Цитата1. Write the Interrupt Vector Change Enable ...   Apr 12 2011, 21:52
- - alag57   Цитатапростите, беру свои слова обратно. Да все но...   Apr 13 2011, 06:22
- - Sirko   Добрался - таки я до загрузчика и, пользуясь случа...   Apr 14 2011, 22:20
|- - SysRq   Цитата(Sirko @ Apr 15 2011, 02:20) буду н...   Apr 15 2011, 07:55
- - Sirko   ЦитатаРаньше вас ныть начнёт МК Безусловно, но это...   Apr 15 2011, 11:11


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 05:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01382 секунд с 7
ELECTRONIX ©2004-2016