Разговоры про загрузчики

Обсуждаем контроллеры компании Atmel.
OKF
Это не хвост, это антенна
Сообщения: 1393
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Вопрос по программированию задержки внутри прерывания

Сообщение OKF »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4671773#p4671773"]я уже где-то говорил, что найденный в инете загрузчик, написанный на Си, я переделал, и с тем же функционалом длина загрузчика стала примерно в 3,5 раза меньше.
соответственно, мой загрузчик потребовал в 4 раза меньше загрузочную область - 512 байт против 2 кБ.
так что, сказки про выигрыш в 10-15% - брехня. а 250%, как у меня получилось, не хотите?[/uquote]
Ну и я тебе, кажись, говорил. Оптибут, тот который в большинстве Ардуин, в 512 помещается. Написан на Си.
Реклама
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Вопрос по программированию задержки внутри прерывания

Сообщение Starichok51 »

Оптибут без автоматического определения скорости порта. и если я правильно помню, Оптибут пишет только флешь. поэтому Оптибут - это "огрызок" загрузчика, а не нормальный загрузчик.
а я нашел загрузчик с автоматическим определением скорости порта, а блок кода, вычисляющий скорость порта занимает очень много места в общем объеме кода.
и несмотря, что я сохранил этот большой блок кода, вычисляющий скорость порта, общий размер кода у меня так сильно сократился.
и как я уже сказал, я полностью сохранил функционал найденного загрузчика :
определением скорости порта,
запись флеши,
запись еепрома.
потом я решил, что такой урезанный загрузчик, который умеет только писать, меня не устраивает.
поэтому я для себя сделал загрузчик на фиксированную скорость порта (250000 бод), который пишет, стирает, читает и сравнивает и флешь и еепром. а размер этого загрузчика также помещается в область 512 байт.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Вопрос по программированию задержки внутри прерывания

Сообщение COKPOWEHEU »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4671848#p4671848"]Оптибут без автоматического определения скорости порта
...
поэтому я для себя сделал загрузчик на фиксированную скорость порта[/uquote]
То есть автоопределение скорости порта все-таки не нужно даже вам. Вот так неожиданность.
Starichok51 писал(а):который пишет, стирает, читает и сравнивает и флешь и еепром.
То есть всей разницы - что вы добавили чтение и запись eeprom.
При этом потеряв такую важнейшую вещь, как совместимость со стандартными программами-прошивальщиками.
Пока что ардуиновский загрузчик безусловно выигрывает.
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Вопрос по программированию задержки внутри прерывания

Сообщение Demiurg »

хороший загрузчик у microsin. Пользовался. Работает. По усб. Есть его печатная отладочная плата.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Вопрос по программированию задержки внутри прерывания

Сообщение Starichok51 »

COKPOWEHEU, не надо читать через строчку и по диагонали.
я ясно сказал, что сначала я сделал с тем же функционалом, то есть, с автоопределением. и на forum.cxem.net есть моя тема, где выложены две версии с автоопределением - одна урезанная, которая только пишет флешь и еепром и одна полная, которая пишет, читает, сравнивает и стирает.
если я создаю тему, то это делаю для людей, чтобы работа загрузчика не зависела от тактовой частоты МК. а автоопределение скорости порта дает эту независимость от тактовой частоты.
а моя ЛИЧНАЯ версия на фиксированную скорость сделана лично для меня, так как все мои проекты имеют фиксированную тактовую частоту 8 МГц.
и также моя личная версия исключает несколько операций на компе, в отличие от версии с автоопределением.
а нахера мне совместимость, если мой загрузчик не зависит от стандартных программ?
и я нигде не заявлял, чтобы ардуинщики пользовались моим загрузчиком.
полно НЕардуинщиков, которые хотят иметь удобный и понятный загрузчик. и поэтому моя тема там достаточно популярна.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Вопрос по программированию задержки внутри прерывания

Сообщение COKPOWEHEU »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4671892#p4671892"]сначала я сделал с тем же функционалом, то есть, с автоопределением.[/uquote]
А потом код автоподстройки частоты выкинули, что сказалось на размере кода.
Starichok51 писал(а):а нахера мне совместимость
Лично вам - наверное, не нужна. Но я бы таким пользоваться не стал. Уж лучше бутлоадер, занимающий вдвое больше места, но работающий со стандартными, проверенными утилитами. А не с непонятно чем без исходников.
Реклама
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Вопрос по программированию задержки внутри прерывания

Сообщение Starichok51 »

вот именно, сказалось на размере кода.
а я тебе не предлагал и даже тебя не уговаривал пользоваться моим загрузчиком.
но на том форуме нашлось достаточно людей, с тобой не согласных.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Вопрос по программированию задержки внутри прерывания

Сообщение COKPOWEHEU »

Напомню: твое высказывание было о том, что на ассемблере удалось обойти Си. На практике же видим обратное: ардуиновский загрузчик (причем ни для кого не секрет, что ардуина - отнюдь не эталон качественного кода) при сравнимом размере обладает большей функциональностью.

Добавлено after 9 minutes 51 second:
[uquote="Starichok51",url="/forum/viewtopic.php?p=4671922#p4671922"]а я тебе не предлагал и даже тебя не уговаривал пользоваться моим загрузчиком.[/uquote]
Ах да, чуть не забыл: лично мне безразличны что ардуиновский загрузчик, что твой: со времен, пока я занимался AVR-ками, у меня остались как ISP-программаторы, так и, скажем, самодельный загрузчик (тоже несовместимый с существующими), умещающийся в минимальный размер (128 слов, кажется) и написанный на ассемблере еще в 2014 году.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Вопрос по программированию задержки внутри прерывания

Сообщение Starichok51 »

COKPOWEHEU писал(а):ардуина - отнюдь не эталон качественного кода) при сравнимом размере обладает большей функциональностью.
прошу перечислить функционал, который превышает мой функционал.
COKPOWEHEU писал(а):самодельный загрузчик (тоже несовместимый с существующими), умещающийся в минимальный размер (128 слов, кажется) и написанный на ассемблере еще в 2014 году.
прошу перечислить функционал твоего загрузчика в 128 слов.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Вопрос по программированию задержки внутри прерывания

Сообщение COKPOWEHEU »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4672046#p4672046"]прошу перечислить функционал, который превышает мой функционал.[/uquote]
Умеет прошивать флеш. Умеет читать флеш. Совместим со стандартным софтом. Исходный код что загрузчика, что прошивальщика, открыт.
В общем-то, это минимум, который нужен для хорошего загрузчика.
Starichok51 писал(а):прошу перечислить функционал твоего загрузчика в 128 слов.
Прошивка контроллера. Все. Даже чтения не делал. Просто игрушка под какую-то конкретную задачу, уже точно не вспомню какую.
---
Вообще, если браться за бутлоадеры сейчас, то скорее для ch32v003 - чтобы им хоть как-то можно было пользоваться, поскольку тот, что идет с завода, нерабочий.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Вопрос по программированию задержки внутри прерывания

Сообщение Starichok51 »

COKPOWEHEU писал(а):Умеет прошивать флеш. Умеет читать флеш.
а еепром не умеет? а сравнивать и стирать умеет? если на оба вопроса НЕТ, то ты соврал и мой функционал больше.
а открытость исходников - не показатель функциональности загрузчика.
COKPOWEHEU писал(а):Прошивка контроллера. Все. Даже чтения не делал. Просто игрушка под какую-то конкретную задачу
так зачем сравнивать игрушку с полнофункциональным загрузчиком7
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Adrift
Вымогатель припоя
Сообщения: 543
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Вопрос по программированию задержки внутри прерывания

Сообщение Adrift »

Starichok51, бутлоадер с сайта chip45, о котором вы говорите, хотя может у вас была первая версия, на github выложен, он intel hex в мк шлет, именно в виде текста, что сложнее, не уверен, что у вас то же самое. Еще там есть поддержка команд через терминалку, например: ewAAAADD - write byte to eeprom address. Соответственно добавлен код для отправки чисел:
Спойлер

Код: Выделить всё

void usartPutDec(uint16_t usDec)
{
    uint8_t ucBuffer[6];
    uint8_t ucLoop = 5;
    
	ucBuffer[5] = '\0';
    
    while (ucLoop)
    {
        --ucLoop;
        ucBuffer[ucLoop] = (usDec % 10) + '0';
        usDec /= 10;
        if (usDec == 0)
            break;
    }
    usartPutRamStr(&ucBuffer[ucLoop]);
}

void usartPutNibble(uint8_t ucNibble)
{
    ucNibble &= 0x0f;

    if(ucNibble > 9) {
        ucNibble += ('a' - 10);
    } else {
        ucNibble += '0';
    }

    usartPutChar(ucNibble);
}

void usartPutHex(uint8_t ucHex)
{
    usartPutNibble (ucHex >> 4);
    usartPutNibble (ucHex);
}
И работает chip45boot2 с любыми мегами, включая xmega, а у вас поддержка только mega8/88/168/328. Опять же ваш бутлоадер в 512 байт не вмещается, о чем в хелпе к клиенту и написано. Для mega88 у вас размер прошивки 630 байт, у chip45 - 1724.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Вопрос по программированию задержки внутри прерывания

Сообщение COKPOWEHEU »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4672131#p4672131"]а еепром не умеет? а сравнивать и стирать умеет?[/uquote]
Ардуиновский? Читать и проверять флеш умеет. eeprom - нет.
[uquote="Starichok51",url="/forum/viewtopic.php?p=4672131#p4672131"]а открытость исходников - не показатель функциональности загрузчика.[/uquote]
Это признак надежности и ремонтопригодности.
[uquote="Starichok51",url="/forum/viewtopic.php?p=4672131#p4672131"]так зачем сравнивать игрушку с полнофункциональным загрузчиком7[/uquote]
Видал я фирменные загрузчики, недалеко ушедшие по функциональности. В контроллерах ch32. Писать флеш умеют, верифицировать тоже. Даже редактировать "фьюзы" умеют. (еепрома там нет вообще) А вот читать - нет. И со стандартным софтом несовместимы. А фирменный дико неудобен. Пришлось дизассемблировать загрузчик и писать нормальную консольную утилиту прошивки.
А если бы разработчики руководствовались не твоими соображениями, а здравым смыслом, большого геморроя удалось бы избежать.
Кстати о чтении: его отсутствие, возможно, мотивировали защитой от копирования.
он грузит intel hex, именно в виде текста
Там что, можно прямо по UART залить загрузчик, без программы-прошивальщика?
Но даже если так хекс штука неудобная: можно сделать, чтобы по одним и тем же адресам находились разные данные, чтобы данные шли вразнобой и т.д.
Когда с загрузчиками работал я, то поручал парсинг хекса компу. У него памяти много, может себе позволить загрузить хекс целиком, проверить корректность, проверить размер, переформатировать для прошивки.
Adrift
Вымогатель припоя
Сообщения: 543
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Вопрос по программированию задержки внутри прерывания

Сообщение Adrift »

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4672145#p4672145"]Там что, можно прямо по UART залить загрузчик, без программы-прошивальщика?[/uquote]
Судя по исходникам, да:

Код: Выделить всё

// pf			write hexfile to flash memory
//			return value:	pf+
//			The + indicates successful interpretation of the command.
//			Now an intel hex file can be send to the MCU over the UART.
//			For every successful read and parsed record line a '.' is printed. When a flash page write is done, a '*' is printed.
//			In case a checksum error is detected in a record line, a '-' is printed and the command is terminated.
COKPOWEHEU писал(а):Но даже если так хекс штука неудобная: можно сделать, чтобы по одним и тем же адресам находились разные данные, чтобы данные шли вразнобой и т.д.
Когда с загрузчиками работал я, то поручал парсинг хекса компу. У него памяти много, может себе позволить загрузить хекс целиком, проверить корректность, проверить размер, переформатировать для прошивки.
У меня тоже клиент парсил hex, как минимум его передавать в 2+ раза дольше, на каждый байт 2 символа плюс дополнительная информация. Но прошивку то парсинг hex увеличивает...
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Вопрос по программированию задержки внутри прерывания

Сообщение Starichok51 »

Adrift, у меня был скачан именно chip45boot2. я его дизассемблировал и разобрался в алгоритме автоопределения скорости порта.
заодно нашел грубейшую ошибку - вычисленное число скорости не уменьшалось на 1 перед записью в регистр бодрейта. из-за этого загрузчик у меня плохо связывался с компом на высоких скоростях. связывался на 4800 и кое-как на 9600.
Adrift писал(а):И работает chip45boot2 с любыми мегами
вот только нужно для каждой меги скачивать свой загрузчик.
ну да, количество МК у меня ограничено, но я сделал только для самых популярных. к тому же, кроме перечисленных у меня нет других МК, чтобы я мог проверить работу загрузчика на них.
да и то, чтобы проверить на 168 и 328, я специально их покупал для проверки.
Adrift писал(а):Опять же ваш бутлоадер в 512 байт не вмещается, о чем в хелпе к клиенту и написано. Для mega88 у вас размер прошивки 630 байт
630 байт - это полный функционал (запись, чтение, стирание и сравнение), а такой же функционал, как у chip45boot2 - для всех менее 512 байт (454 для мега8 и 492 для дркгих).
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Вопрос по программированию задержки внутри прерывания

Сообщение COKPOWEHEU »

[uquote="Adrift",url="/forum/viewtopic.php?p=4672160#p4672160"]У меня тоже клиент парсил hex[/uquote]
Мне такой вариант все же не нравится. Слишком ненадежный. Но это не важно, в конце концов не мне же им пользоваться.
Starichok51 писал(а):Adrift, у меня был скачан именно chip45boot2. я его дизассемблировал
Э? Так Adrift же кинул ссылку на исходники. Зачем дизассемблировать?
Starichok51 писал(а):а такой же функционал, как у chip45boot2
То есть с поддержкой командного протокола и парсингом хекса?
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Вопрос по программированию задержки внутри прерывания

Сообщение Starichok51 »

я не знал про существование исходников, поэтому дизассемблировал. и мне это труда не составило.
не знаю, что ты понимаешь под парсингом.
у меня собственная комповая программа и, соответственно, собственный протокол.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Вопрос по программированию задержки внутри прерывания

Сообщение COKPOWEHEU »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4672233#p4672233"]не знаю, что ты понимаешь под парсингом.[/uquote]
chip45boot2 может принимать прошивку в виде текстового hex-файла. Соответственно, бутлоадер должен из введенной строки выковырять адрес, бинарные данные и LRC-сумму. Потом добавить данные из этой строки к буферу страницы (хорошо бы с учетом разрывов). И, когда страница заполнится, записать ее.
Реализовать свой протокол куда проще. Там ведь можно на стороне ПК побить бинарник на страницы и загружать их по одной в удобном контроллеру формате.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Вопрос по программированию задержки внутри прерывания

Сообщение Starichok51 »

ну да, комповая программа у меня принимает обычный текстовый hex-файл, и делает всё, что ты перечислил.
а отправляет на запись или читает по 128 байтов.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Вопрос по программированию задержки внутри прерывания

Сообщение COKPOWEHEU »

Мой "игрушечный" бутлоадер сначала запрашивал размер страницы.
Ответить

Вернуться в «AVR»