Easyelectronics.ru

Электроника для всех
Текущее время: 22 янв 2021, 23:34

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Как использовать UART код загрузчика из основной программы ?
СообщениеДобавлено: 10 июн 2020, 11:42 
Старожил
Аватара пользователя

Зарегистрирован: 13 май 2010, 01:32
Сообщения: 1941
Откуда: Из сказки.
Недавно я кидал ссылку на программу которая использует вызов функции находящуюся в загрузчике. (записывает во FLASH)
До сих пор мне не до конца понятно как посторонняя программа знает место точки входа в процедуру но речь сейчас о другом.

Как я могу использовать код загрузчика (в данном случае речь про optiboot) отвечающий за настройку \ прием \передачу UART ?


Ну что бы не повторять снова этот код в программе,а просто делать вызов на готовую " подпрограмму".
Обычно если я делаю serial.print serial.setup то добавляется кусок кода в программу, который фактически уже есть в загрузчике и было бы красиво его не повторять.

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

_________________
vk.cc/arXpXv


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как использовать UART код загрузчика из основной программы ?
СообщениеДобавлено: 13 июн 2020, 13:56 
Старожил

Зарегистрирован: 10 мар 2012, 11:11
Сообщения: 220
С оптибутовским uart-ом игра не стоит свеч. Абсолютно. Там кода минимум - настройка, приём и передача. Без буферизации. Это с десяток слов всего. И на кой ляд всё это, заради чего? Просто смешно.)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как использовать UART код загрузчика из основной программы ?
СообщениеДобавлено: 13 июн 2020, 14:03 
Старожил
Аватара пользователя

Зарегистрирован: 13 май 2010, 01:32
Сообщения: 1941
Откуда: Из сказки.
Автор оптибута мне уже отписался по этой идее :)
Но я понял не все.

А зачем нужен буфер ?
И что-pа буфер, в ОЗУ что ль 64+64 байта ?

Идея заключается в том чтобы загрузчик приносил пользу не в 1% жизни МК,а в 30% жизни МК.
Че тут не понятного,это же элементарно понять мою логику.
Все это написано в первом посте.
Например на спектруме 16кб кода просто зашиты в ПЗУ и для экономии места, некоторые программисты использовали подпрограммы интерпретатора бейсика, для экономии памяти.
Но если бы создатели интерпретатора изначально подумали об этом, мертвый код в ПЗУ мог бы использоваться в 10 раз эффективнее и чаще в дальнейшем.

_________________
vk.cc/arXpXv


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как использовать UART код загрузчика из основной программы ?
СообщениеДобавлено: 13 июн 2020, 16:25 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2900
Откуда: Санкт-Петербург
Делается это типовым образом: таблица переходов (либо адреса, либо команды типа JMP xxxx) по фиксированному адресу.

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

Так что более-менее реальный для вас вариант – бутлоадер, написанный на асме, использующий под свои статические переменные отдельный кусок памяти (не тот, что основная прога), стек общий. Посчитайте, имеет ли смысл – мне кажется, что нет. "Кроилово ведёт к попадалову".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как использовать UART код загрузчика из основной программы ?
СообщениеДобавлено: 14 июн 2020, 15:07 
Старожил

Зарегистрирован: 27 апр 2013, 13:53
Сообщения: 1453
Вообще это некоторое извращение, но что мешает соединить два Урта контроллера между собой? :)

P.S. А, вообще например, тот же amForth имеет полнофункциональный "загрузчик" по Уарт с помощью которого можно программировать контроллер в интерактивном режиме на Форт языке.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как использовать UART код загрузчика из основной программы ?
СообщениеДобавлено: 14 июн 2020, 15:15 
Старожил
Аватара пользователя

Зарегистрирован: 13 май 2010, 01:32
Сообщения: 1941
Откуда: Из сказки.
Я вообще без фанатизма, нет так нет. :)
Я этим задумался просто между прочим, когда вышла версия оптибута с возможностью записи во флеш вызовом из основной программы.

_________________
vk.cc/arXpXv


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как использовать UART код загрузчика из основной программы ?
СообщениеДобавлено: 14 июн 2020, 22:44 
Старожил

Зарегистрирован: 10 мар 2012, 11:11
Сообщения: 220
Ну да, если бы вместе с загрузчиком был бы какой то BIOS, тогда понятно, а так... У загрузчика то и взять нечего, кроме как функции записи во флэш.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как использовать UART код загрузчика из основной программы ?
СообщениеДобавлено: 15 июн 2020, 09:52 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3693
Откуда: Новосибирск
Не получится. Область загрузчика и область основной программы отдельные сущности, со своими векторами.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как использовать UART код загрузчика из основной программы ?
СообщениеДобавлено: 15 июн 2020, 10:38 
Старожил
Аватара пользователя

Зарегистрирован: 13 май 2010, 01:32
Сообщения: 1941
Откуда: Из сказки.
Что не получится ?

_________________
vk.cc/arXpXv


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как использовать UART код загрузчика из основной программы ?
СообщениеДобавлено: 15 июн 2020, 10:53 
Старожил

Зарегистрирован: 05 апр 2012, 16:47
Сообщения: 404
Откуда: Киев
Да елки палки. Смотрим map файл с адресами функций и вот таким образом объявляем и вызываем

void (*myfunc)(void) = (void (*)(void)) 0xaddress;
myfunc();

Только в стек занести адрес возврата не забываем. А, и это, адрес вводим в словах.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB