vitek101 0 5 ноября, 2009 Опубликовано 5 ноября, 2009 · Жалоба Облазил весь форум, нашел темы про BootLoaderы, почитал, но неясности остались: - есть рабочий проект для XMega128 - есть вроде рабочий проект загрузчика (переделанный из примера AVR1605) - логика работы, размещение прерываний, переходы в приложение и обратно вроде продуманы Теперь возник вопрос как мне их засунуть в один контроллер? 1. Собирать два проекта в одном Workspace? Как тогда сделать, чтоб приложение зашивалось по 0 адресу, а загрузчик по границе области BootLoaderа? 2. Зашивать каждый проект отдельно? Тогда получается 2 hex-файла. Как и чем их потом прошивать при серийном производстве? Можно ли какой-нибудь утилитой прошивать hex по конкретному адресу? 3. Делать все в одном проекте? Мне этот вариант нравится больше всего, но не пойму как определить сегмент для загрузчика. Посоветуйте кто-нибудь... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 5 ноября, 2009 Опубликовано 5 ноября, 2009 · Жалоба 1. Собирать два проекта в одном Workspace? Как тогда сделать, чтоб приложение зашивалось по 0 адресу, а загрузчик по границе области BootLoaderа? 2. Зашивать каждый проект отдельно? Тогда получается 2 hex-файла. Как и чем их потом прошивать при серийном производстве? Можно ли какой-нибудь утилитой прошивать hex по конкретному адресу? 3. Делать все в одном проекте? Мне этот вариант нравится больше всего, но не пойму как определить сегмент для загрузчика. Посоветуйте кто-нибудь... По П.1 и П.3 нужно копаться в настройках линкера. Там сможете прописать сегмент в котором будет располагаться бутлоадер и определить его начальный адрес. Как это сделать много раз обсуждалось на форуме. По П.2 - назначение бутлоадера состоит в том чтобы иметь возможность прошивать флеш контроллера. Если у вас он используется для апгрейда программы в процессе работы но при этом у вас есть рабочий вариант основной прошивки то вам стоит объеденить два hex-файла в один и первый раз прошивать основную программу+бутлоадер. Также можно прошить бутлоадер а потом с помощью него залить основную программу. Hex-файл содержит достаточно информации чтобы программатор распознал по каким адресам прошивать программу (поишите расшифровку hex-строки). Используйте avr-studio и фирменный программатор от атмел поддерживающий ваш мк. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 121 5 ноября, 2009 Опубликовано 5 ноября, 2009 · Жалоба 1. Собирать два проекта в одном Workspace? Как тогда сделать, чтоб приложение зашивалось по 0 адресу, а загрузчик по границе области BootLoaderа?Да, именно два отдельных независимых проекта. За размещение отвечает линкер. Изучайте формат его скрипта.2. Зашивать каждый проект отдельно? Тогда получается 2 hex-файла. Как и чем их потом прошивать при серийном производстве? Можно ли какой-нибудь утилитой прошивать hex по конкретному адресу?Перед передачей на производство файлы "склеить" в один или текстовым редактором или утилитой вроде SRecord. Адрес, по которому заливать, зашит в сам HEX-файл - не нужно ничего указывать дополнительно. Заливать конечно AVRealом - ничего лучше для производства не придумано. Добавлено: ой, AVReal Хмеги еще не умеет. Тогда не знаю.3. Делать все в одном проекте? Мне этот вариант нравится больше всего, но не пойму как определить сегмент для загрузчика.Сегмент определяется в скрипте линкера. Но это неудачное решение. Начиная с того, как вы будете "выкусывать" приложение из новых прошивок для апгрейда уже выпущенных приборов и заканчивая тем, что дрожащей рукой в процессе развития проекта вы можете ненароком изменить загрузчик и сделать загрузчик новых устройств и их боевую программу несовместимыми с загрузчиком в уже выпущенных устройствах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitek101 0 5 ноября, 2009 Опубликовано 5 ноября, 2009 · Жалоба Спасибо. Буду копать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 7 5 ноября, 2009 Опубликовано 5 ноября, 2009 · Жалоба В ассемблере есть псевдодиректива .ORG, указывающая, с какого адреса размещать дальнейший код. Так что для основной программы ставьте .ORG 0 (хотя 0 - и так по умолчанию), а для бутлоадера указывайте начальный адрес бутлоадера (для 128 он может размещаться в 4 местах, по-моему, в зависимости от объема бутлоадера). У меня для бутлоадера отводится 512 слов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitek101 0 5 ноября, 2009 Опубликовано 5 ноября, 2009 · Жалоба А в каком виде эта директива вставляется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 121 5 ноября, 2009 Опубликовано 5 ноября, 2009 · Жалоба В ассемблере есть псевдодиректива .ORG, указывающая, с какого адреса размещать дальнейший код.У кого - как. У IAR и в gnu binutils она указывает смещение относительно начала текущего сегмента. В частном случае - IAR и абсолютный сегмент (включен по умолчанию в начале единицы ассемблирования) смещение совпадает с абсолютным адресом. vitek101: Вставляется она в том случае, если ваш проект на ассемблере в одном файле одним большим куском. В противном случае без линкера и его скриптов не обойтись. Описание директивы org надо искать в документации на ваш ассемблер. Поскольку вы не назвали его - точнее ответить невозможно (впрочем, даже если назовете, пересказывать документацию навряд ли кто-то захочет). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pjotar 0 5 ноября, 2009 Опубликовано 5 ноября, 2009 (изменено) · Жалоба avr-gcc, bootloader.makefile LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDR) Override значения в скрипте линкера. Секция .text (Программа) располагается начиная с заданного адреса. Дальше, как вариант, main.hex и bootloader.hex склеиваются утилитой Srecord в main_and_bootloader.hex. Изменено 5 ноября, 2009 пользователем Злодей Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 7 6 ноября, 2009 Опубликовано 6 ноября, 2009 · Жалоба Боже, как у Сишников все сложно и все запущено! Пример на avrstudio для xmegи: .CSEG JMP begin ;Reset Handle ;*********** вектора прерываний .org DMA_CH0_vect ;прерывание от SPI DMA JMP SPI_DMA_int .org DMA_CH2_vect JMP msgReceived .org TCC0_OVF_vect JMP TimeOuts ;прерывание таймера 0 (таймаутs) .org USARTC1_RXC_vect JMP receive0 ;прерывание приемника USB .org PORTB_INT0_vect JMP StatusPinChanged ;прерывание от статусных входов порта B .org USARTD0_RXC_vect ; Reception Complete Interrupt reti .org USARTD1_RXC_vect ; Reception Complete Interrupt reti .org USARTD1_DRE_vect JMP DummySPI_int begin: ;**************** далее текст основной программы ;**************** текст бутлоадера (можно в отдельном файле) .CSEG .ORG BOOTSTART Никаких склеек и управлений линкером, нажимаем кнопучку Compile и получаем hex-файл прошивки, заполненный только в нужных адресах Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 6 ноября, 2009 Опубликовано 6 ноября, 2009 · Жалоба Боже, как у Сишников все сложно и все запущено!Можете не продолжать о том, как легко и просто быть asm кодером...:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitek101 0 6 ноября, 2009 Опубликовано 6 ноября, 2009 · Жалоба Все, вроде получилось. Впихнул все в один проект, поставил #ifdef и в него код бутлоадера. В xcl создал сегмент. Прошил, и вылез косяк непонятный. Создал новую тему для него :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 6 ноября, 2009 Опубликовано 6 ноября, 2009 · Жалоба Впихнул все в один проект Зачем два проекта включать в один? Проще и правильней собрать отдельно апликейшн и отдельно бутлоадер. Залить бутлоадер в МК программатором. Залить апликейшин средствами бутлоадера. Тем самым протестировать что все ОК. Затем если надо тиражировать - прочитать всю флеш этого МК, полученный образ бутлоадера с аппликейшином шить в остальные МК. К тому же в подавляющейм большинстве случаев бутлоадер один, а аппликейшинов разных много. Будете лепить и компилить бутлоадер для каждого аппликешина? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться