Перейти к содержанию

Atmega8 Загрузчик Не Запускает Аппку


Faster

Рекомендуемые сообщения

Всем привет тут пришлось вернуться к давно забытым МК с ядром AVR а точнее ATmega8 оч давно имел с ними дела но не когда не делал ни чего с бутлоадером ...

и вот приклинило,для начала :

1-научился работать с командой SPM, чуть позже вообще нашёл удачную процедуру с готовой записью

2- написал тестовое приложение (как программуу)

3-написал бутлоадер ,естественно что у AtmelStudio у ликера опция -Wl,--section-start=.text=0x1800 выставлена и фьюзы в ту область так же для бута

Естественно что базовая прога проверена 120 байт работают просто мигают светодиодом (где он понятно из проги)

И бут лоадер тоже

Скраиваю их в месте по простетскому сначала шью бутлоадер а потом поверх без стирания чипа основную

далее если фьюз BOOTRST показывает что всё окей, если его прожеч то стартует бут лоадер ,если нет то основное приложение

Кажется все пашет но вот увы ХРЕН ТАМ бут лоадер по окончанию своей отработке не может вызвать основную аппку

пробовал :

asm("LDI R30,0x00\r\nLDI R31,0x00\r\nIJMP\r\n");

и так пробовал:

static void (*StartProg)( void ) = 0x0000;

StartProg();

по сути заново запускается бут лоадер ...

прикладываю исходник бутлоадера , самого EXE так сказать и HEX документ полной сборки...

Логика , экзешника состоит просто в моргании поочередно двумя свето диодами ,а бутлоадера в проверки B3 у PORTD и проверке на удержание его в течении 5 или более сеукунд...

Самая главная проблема это втом что из бутлоадера в аппку не как не осуществляется переход, а просто перезапускается бутлоадер...

Но вот что интересно если расположит команду перехода в аппку одной из первых, то переход работает ....

BootLoader.7z

Exe.7z

Document.7z

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Я не работал с бутлодырями, но примерно представляю что да как. Бутлодырь не вызывает основную программу. На основную программу должен быть ПЕРЕХОД. Если бутлодырь пишете на си, ищите как сделать, чтобы был переход на основную программу. То есть костыли делающие rjmp\jmp

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Не путайте человека. Делать на основную программу прыжок (кстати, в первом посте прыжок и сделан - ldi Z,0 + ijmp) или вызов как функции - почти безразлично. В любом случае в начале основной программы стек будет сброшен.

А что говорит пошаговая отладка? Или если из самозагрузчика сразу делать безусловный прыжок в начало программы?

Зачем в функции boot_program_page, написанной на Си, сохранять SREG?

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Не путайте человека. Делать на основную программу прыжок (кстати, в первом посте прыжок и сделан - ldi Z,0 + ijmp) или вызов как функции - почти безразлично. В любом случае в начале основной программы стек будет сброшен.

А что говорит пошаговая отладка? Или если из самозагрузчика сразу делать безусловный прыжок в начало программы?

Зачем в функции boot_program_page, написанной на Си, сохранять SREG?

Предполагаю в последствии использовать прерывания для работы с UART заранее позаботился о флагах, хотя наврядли да и процедура дернутая не стал менять

Дело в том что в AtmelStudio пошаговая отладка вовсе не пашет ... умирает в блоках delay ...я вообще думаю чтоименно в них загвоздка ... сегодня напишу свою функцию задержки проверю...

Ссылка на комментарий
Поделиться на другие сайты

В процедурах на Си автоматически сохраняются используемые регистры и SREG. Заботиться об этом отдельно не требуется.

Помимо пошаговой отладки можно использовать брекпойнты и можно на время отладки убрать задержки.

Ну и, может, проще будет писать самозагрузчик на асме?

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

В процедурах на Си автоматически сохраняются используемые регистры и SREG. Заботиться об этом отдельно не требуется.

Ошибаетесь. Только в прерываниях. SREG нужно сохранять в критических секциях, затем отключать прерывания. После работы в критических секицях восстановление SREG.

Изменено пользователем demiurg1978
Ссылка на комментарий
Поделиться на другие сайты

Вы правы, в процедурах SREG обычно не сохраняется. Но зачем его сохранять вручную? Здесь, в этом самозагрузчике прерывания вроде не используются.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

В этом самозагрузчике вообще ничего не используется. Зато две таблицы векторов прерываний. Возврат из загрузчика осуществляется через косвенный вызов подпрограмм... И много еще замечаний. Например, перед возвратом в основную программу (по истечению времени) производится попытка записи с неопределенным значением R30, много кусков кода, сохраняющих значения регистров в стеке, но не восстанавливающих их обратно (стек переполняется!) и т.д., и т.п...

Хотя... в отладчике переход производится. Но... как в подпрограмму. Неудивительно, что "неведомая сила" возвращает счетчик на место вызова, т.е. в область загрузчика.

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...