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

Простой загрузчик (BootLoader)


Starichok

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

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

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

если ты сам писал загрузчик, то чем тебя заинтересовал мой загрузчик?

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

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

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

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

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

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

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

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

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

ну, я так понял, что он написал, и работало.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

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

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

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

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

Да, сначала был написан бутлодер для тини 24. Там нет выделенной памяти под бутлодер и заморочек с областями откуда можно записывать и перезаписывать флеш из программы, там все просто! Также там нет УАРТА, пришлось написать. Ну и самое главное: перезаписывай любые страницы флеш из любого места! В тини 24 под бутлодер ушло 48% памяти. В проекте технологи выделили слишком мало физического места под схему. Потом развел плату, оказалось, что места не так уж и мало.

Потом выяснилось, что пинов впритык, и если будет дальнейшее расширение, их может не хватить. И после долгих (ну очень долгих) изысканий (цена, доступность, размеры) остановился на 88 (очень низкая цена, корпус чуть больше чем у 24, датчик температуры, а это важно, но не критически). Да, и сейчас все программируют на С и др. языках высокого уровня, что занимает очень (ну очень) много места, и чипы с небольшой памятью остаются не востребованы, и как следствие низкий спрос, и низкая цена!!! И при тупом переносе программы перезаписи страниц флеш программа не заработала... Ну и пошли изыскания, и я набрел на ВАШ проект, самый полный и законченный на то время. Нужно было выяснить чип который был у меня битый или я что-то упустил при программировании? (в бутлодерах я новичек) Недостаток 88 на сегодня, то что из пользовательской памяти нельзя перепрограммировать флеш, хотя страница стирается.

 

По поводу ВАШЕЙ программы: выяснилось, что при включенном фьюзе WDT в конфигурации, соединение не устанавливается, а в хелпе это не отражено. В некоторых ситуациях соединение можно восстановить лишь отключив / включив питание, сброс через ножку ресет не помагает.

Будем копать дальше,... и глубже....!

 

Иногда при "установить соединение" выдается сообщение, "соединение не установлено", а на осциллографе виден ответ с чипа?

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

5 часов назад, nik1234 сказал:

Иногда при "установить соединение" выдается сообщение, "соединение не установлено", а на осциллографе виден ответ с чипа?

когда я тестировал последние изменения (проверку ответа от МК), я сам выдергивал конвертер из гнезда.

после этого при попытке заново установить соединение сначала мне показывало, что соединения нет, а со второй попытки показывало, что соединение установилось.

получается, что комп принял сначала что-то другое, а со второго раза принял правильно.

видимо, что-то подобное происходило и у тебя.

 

по WDT.

следует отключить его фьюз.

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

мне как-то лень переделывать кучу загрузчиков (8 штук) для разных МК, чтобы программно запретить "собаку".

 

то есть ты сравнительно недавно занялся загрузчиком на АТмега 88?

я в начале темы рассказал о разнице в длине загрузчика на ассемблере и на Си. получилось более, чем в 3,5 раза.

разница между АТмега8 и АТмега88 - в доступе к некоторым регистрам.

мне пришлось немного помучиться при переделке своего последовательного программатора с АТмега8 на АТмега88.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

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

А да, точно GPIOR 1 и 2 вообще выпадают из концепции побитового доступа! 88 это уже микрочиповское изделие.

А WDT нужно  в хелпе просто указать, что нельзя программировать и не париться с перепрограммированием.

Я вообще никогда не занимался загрузчиками, не было задач, а тут вдруг "повезло"!

На этих чипах, с маленькой памятью  и низкой частотой работы только мелкие задачи решать. И на ассемблере программа получается более "гибкая" чем на С.

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

дело даже не в гибкости, а в гораздо меньшем размере.

ну, теперь ты знаешь про "собаку", и хелп можно не переписывать.

а если тебе это хочется видеть в хелпе, то сам можешь дописать в файл помощи.

а программа открывает этот файл и показывает его.

и там разница не только в доступе к GPIOR, а еще ко всем регистрам USART, и вроде, еще к каким-то, которые используются в программе.

если в АТмега8 все регистры доступны по in и out, то в АТмега88 некоторым регистрам следует применять lds и sts.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

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

Да, совершенно верно, но за GPIOR обиднее всего, я применяю их в области векторов прерываний, не надо SREG сохранять и восстанавливать, выставил бит, а как правило следующая ячейка не используется и ставишь команду возврат из прерывания, коротко и быстро. А затем, если это не критичное прерывание, обрабатываешь его в основной программе.

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

я не знаю, как пользоваться GPIOR.

в АТмега8 такого регистра нет.

я посмотрел даташит на АТмега88, там их 3 штуки - GPIOR0, GPIOR1, GPIOR2. а как ими пользоваться там не написано.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

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

О, это очень полезные регистры! в 88 только GPIOR0 сохранил свои полезные свойства. использую их как флаги событий прерываний. для GPIOR0 адрес порта ввода-вывода 0х1Е, а значит к нему применяются команды cbi, sbi, sbic, sbis   ну и   in, out. Когда происходит прерывание, процессор переходит на адрес обработки прерывания, вот там-то мы и располагаем код:

sbi   GPIOR0, 0     ;установить в 1 бит 0 в регистре GPIOR0

reti                        ;вернуться из прерывания

 

Без использования регистра GPIOR0, а с использованием обычного регистра код выглядел бы иначе:

push   R0                          ;освобождаем регистр R0 для SREG и сохраняем его

in        R0, SREG               ;сохраняем SREG в R0, все флаги операций текущей программы

sbr     R23, 1<<0             ;выставляем флаг признака прерывания, например бит 0 в регистре R23

out    SREG, R0               ;восстанавливаем SREG, все флаги операций текущей программы

pop   R0                          ;восстанавливаем значение R0

reti                                  ;вернуться из прерывания

 

Нетрудно заметить......!

 

А, да команда:

sbr     R23, 1<<0

в идеале изменяет флаги в SREG, потому и такая длинная цепочка команд.

10 часов назад, Starichok сказал:

я не знаю, как пользоваться GPIOR.

в АТмега8 такого регистра нет.

Далее, из всего сказанного выше...

в АТмега8 до адреса ввода / вывода 0x1F, находятся некоторое количество регистров, которые крайне редко (...никогда...) используются, например: TWBR, TWSR, TWAR, SPCR, .......

их можно (... нужно...) использовать как GPIOR регистр.

До связи.

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

идея использования, как регистры флагов, понятна.

6 часов назад, nik1234 сказал:

в 88 только GPIOR0 сохранил свои полезные свойства.

а GPIOR1 и GPIOR2 разве нельзя использовать, как регистры флагов?

6 часов назад, nik1234 сказал:

например: TWBR, TWSR, TWAR, SPCR, .......

у меня, как раз, используется TWI для вывода на экран 1602 через модуль I2C. но идея понятна.

а в АТмега8 можно использовать флаг Т в регистре SREG. но устанавливать его после восстановления SREG перед выходом из прерывания.

или коротко, как у тебя:

set

reti

но такое можно делать, если обработка события (прерывания) может подождать.

но такая отложенная обработка прерывания бывает очень редко. поэтому у меня даже в мыслях не было, чтобы отложить обработку прерывания.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

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

Про флаг Т: если он не используется в основной программе, а у меня он постоянно в деле.

для меня меня отложенная обработка прерывания обычное дело, нужно лишь правильно расставить приоритеты частей программы. И обычное дело: выставляешь частоту задающего генератора побольше, делишь его до получения частоты 1000 Гц каким либо таймером, загоняешь в прерывание с флагом. затем закольцовываешь основную программу с проверкой флага прерывания от таймера 1000Гц. загоняешь программу в Sleep. Получаешь кольцо обработки с образцовым интервалом в 1 мс. После любого прерывания проверяешь флаг от таймера, если он, то сбрасываешь флаг и начинаешь перебирать подпрограммы обработки индикаторов, клавиатуры, и тд. и тп, подпрограммы обработки флагов и др. После окончания обработки всех подпрограмм возвращаешься к Sleep. И так по кольцу. Если происходит прерывание не от таймера, программа выходит из Sleep, проверяется флаг от таймера, если не он (а это не он) обратно к Sleep. В большенстве программ использую этот алгоритм.

 

GPIOR1 и GPIOR2 в 88 условно можно использовать как флаги, но их адреса больше 0х1Е, на них не распространяются команды cbi, sbi, sbic, sbis, и их сначала нужно загрузить в общий регистр, промодифицировать, и заново сохранить. Эта последовательность длинная, и модифицирует SREG, что сводит на нет работу по сравнению с  классическим GPIOR.

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

понятно.

но у каждого свои приемы и привычки программирования.

у меня в разных проектах "разметка" времени сделана по разному, но везде привязка к реальному времени по таймеру.

например, с динамической индикацией таймер работает по 2 мс, и в прерывании выводится очередной разряд индикации.

потом счетчик-таймер по 10 мс (5 х 2 мс) - для тех дел, которые нужно делать почаще, интерфейс с компом, обработка кнопок и что-нибудь другое.

потом счетчик-таймер по 1 секунде (100 х 10 мс) - именно для работы в реальном времени. тут может быть секундомер, если он нужен, и остальная ежесекундная работа.

а есть регулируемый БП (есть моя тема на этом форуме), где таймер тикает по 1/512 секунды. и по таймеру делается 256 измерений напряжения и 256 измерений тока. то есть, 512 измерений за 1 секунду. но и там есть счетчик для "короткого" цикла для "частых" дел (по 1/64 секунды == 15,625 мс).

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

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

Зачем выводить очередной разряд индикации в прерывании? Процессы вывода на индикацию и считывания клавиатуры - медленные процессы. В моей концепции: войдите в подпрограмму обслуживания индикатора, сделайте делитель на 2 и получите 2 мс на разряд, в этой же подпрограмме выведете очередной разряд на индикатор, и не надо отрывать время процессора на обработку прерывания. Для вывода на индикацию тогда вообще не нужно прерывания. Аналогично для кнопок. В моей концепции нужно лишь одно прерывание для таймера. Прерывания с обработкой в прерывании нужны в основном для УАРТА, для безпаузной передачи / приема на высоких скоростях. Ну может быть и2с или спиай, там тоже нужна высокая скорость обработки. вторичные таймеры / счетчики также прекрасно вписываются в предложенную концепцию. Самый большой ее плюс, то что время на прерывание минимально для медленных задач, и отсутствуют конфликты прерываний. А впрочем... у каждого свой путь...

А зачем в блоке питания так часто измерять напряжение и ток, если это вывод на индикацию, то там и десяти измерений в секунду за глаза хватит. Резких скачков всеравно не отследить, выходной конденсатор все сгладит.

 

 

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

13 часов назад, nik1234 сказал:

Зачем выводить очередной разряд индикации в прерывании? Процессы вывода на индикацию и считывания клавиатуры - медленные процессы.

повторю:

у каждого свои приемы и привычки программирования.

а зачем - за тем, что вывод идет СТРОГО с равными промежутками времени.

и динамическая индикация - это не медленный процесс.

а вот с экраном 1602 у меня нет привязки к таймеру - когда подошло время вывести на экран, тогда и вывожу.

и клавиатура у меня "медленная", но обработка 3 или 4 раза в секунду и СТРОГО через равные промежутки времени по программному таймеру.

я учился, как делать прибор РЕАЛЬНОГО ВРЕМЕНИ на ассемблере, на текстах профессиональных программистов.

а твой хаос с отложенными обработками - когда дойдет очередь, тогда и обработаю - меня не устраивает категорически.

13 часов назад, nik1234 сказал:

В моей концепции нужно лишь одно прерывание для таймера.

у меня везде тоже только одно прерывание для аппаратного таймера. и я в этом прерывании делаю ровно столько, сколько мне нужно.

остальное делаю по программным таймерам в основном цикле.

предлагаю обсуждение своих предпочтений на этом закончить.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

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

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

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

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

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

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

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

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

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

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

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

×
×
  • Создать...