Помогите написать код на ассемблере для ардуино
- Войдите на сайт для отправки комментариев
Чт, 05/11/2020 - 16:03
В общем, нужно из скетча обратиться к функции которая находится bootloader
В функцию нужно передавать число uint64_t а возращает она тоже uint64_t
Помоги пожалуйста вообще не мыслю как это сделать.
EEPROM Миную тк нарушается безопасность
Бутлоадер я скомпилировал, если что.
Все очень просто. Вы можете узнать адрес нахождения функции (точку входа). Ну раз вы сами написали бутлоадер. А дальше объявляете прототип функции в своем куске прошивки. И обращаетесь по адресу используя это объявление. Тут ассемблер не нужен.
А как подобное реализовать?
Мне нужно чтобы скетч и бутлоадер проверяли какой-то хэш, если все гуд бутлоадер возвращает переменную если нет, то нет
В общем, нужно из скетча обратиться к функции которая находится bootloader
В функцию нужно передавать число uint64_t а возращает она тоже uint64_t
Помоги пожалуйста вообще не мыслю как это сделать.
EEPROM Миную тк нарушается безопасность
И как я смогу это сделать если бутлоадер по сути это отдельная программа
Я буду только обновлять прошувку без бутлоадера
И как я смогу это сделать если бутлоадер по сути это отдельная программа
Я буду только обновлять прошувку без бутлоадера
И как написать это чтобы можно было туда передавать данные и принимать возвращаемые
И как я смогу это сделать если бутлоадер по сути это отдельная программа
Я буду только обновлять прошувку без бутлоадера
И как написать это чтобы можно было туда передавать данные и принимать возвращаемые
to Johnson070
brokly Вам уже дал решение: Используйте синтаксис языка, и разберитесь, что такое бутлоадер и как он работает. Вопросы исчезнут сами-собой.
Я с этим разобрался, нашел как создать подобную функцию, но она не работает, я пока не могу понять почему.
Адрес в памяти я нашёл
Я с этим разобрался, ...
Адрес в памяти я нашёл
Любознательность помноженная на полное невежество - взрывоопасная смесь! Изучаем понятие "Гарвардская архитектура".
Хорошо.
Все заработало, всем спасибо.
Последний вопрос как то можно из из исходников достать абсолютный адрес на функцию?
Я сразу понял, что ты что то сломать пытаешься :) Конечно можно ! Как то :)
Чего его доставать-то?
Вдруг придется на кафедре его оставить, если преподавателя не будет.
В общем вопрос решен.
Всем спасибо.
Абсолютный адрес достал из HEX прошивки с помощью программы reAVR
Сдается мне что "исходник" в данном контексте это некая прошивка, реального исходника которой нет .
Нет, код я сам писал взял HEX файл и вытащил адреса оттуда
А у вас есть лучше вариант как достать?
А у вас есть лучше вариант как достать?
Да кто его знает, плата неизвестна, загрузчик неизвестен, начало загрузчика для 328 чипа к примеру (nano) может быть как от 30720 так и иное (32256)
Интересно, а чего это загрузчик пишется с адреса на 512 байт ниже?
Нет, код я сам писал взял HEX файл и вытащил адреса оттуда
а как тогда ты не видел в Makefile вот такого:
LDSECTION = --section-start=.text=0x3800
???
можно и из хекса взять, но это через жопу, уж прости.
Самому стыдно, за такое вот и спрашиваю.
Плата atmega 328p. модифицированный optiboot
Нет, код я сам писал взял HEX файл и вытащил адреса оттуда
а как тогда ты не видел в Makefile вот такого:
LDSECTION = --section-start=.text=0x3800
???
можно и из хекса взять, но это через жопу, уж прости.
LDSECTION про него я не знал а как тогда с его помощью посчитать адрес в памяти,
LDSECTION про него я не знал а как тогда с его помощью посчитать адрес в памяти,
Значит ты никак не мог собрать бутлоадер. Брехунам нет желания помогать.
Самому стыдно, за такое вот и спрашиваю.
Плата atmega 328p. модифицированный optiboot
у меня вырезка как раз из Make optiboot )))
Всё таки IDE видимо неправильно память подсчитывает?
Я просто изменил, а потом скомпилировал бутлоадер.
В makefile было уже все прописано
Если у вас стоит OPTIBOOT 8v, то нет
LDSECTION про него я не знал а как тогда с его помощью посчитать адрес в памяти,
Значит ты никак не мог собрать бутлоадер. Брехунам нет желания помогать.
Я изменил только
LDSECTIONS = -Wl,--section-start=.text=0x7d8c -Wl,--section-start=.version=0x7ffe
и то только, потому что не влезал бутлоадер
Какой смысл мне тогда была спрашивать об этом если я не знаю и не делал
А у вас есть лучше вариант как достать?
Так теперь уже и у Вас есть, я Вам ещё часа три назад писал
LDSECTION про него я не знал а как тогда с его помощью посчитать адрес в памяти,
Значит ты никак не мог собрать бутлоадер. Брехунам нет желания помогать.
Я изменил только
LDSECTIONS = -Wl,--section-start=.text=0x7d8c -Wl,--section-start=.version=0x7ffe
и то только, потому что не влезал бутлоадер
Какой смысл мне тогда была спрашивать об этом если я не знаю и не делал
а чего не выровнял адрес?
Имя функции и есть абсолютный адрес её начала.
а оно доступно, если я компилирую к примеру простой блинк?
Кто, имя функции? Если функция есть, то доступно, наверное.
Выровнял уже адрес
Имя функции и есть абсолютный адрес её начала.
а оно доступно, если я компилирую к примеру простой блинк?
Доступно
Грубо наверное но можно так:
Serial.println((uint16_t)&func);
Кто, имя функции? Если функция есть, то доступно, наверное.
я считал, что бутлодер линкуется на уровне хекса из ядра
я считал, что бутлодер линкуется на уровне хекса из ядра
Я отвечал на вопрос из #13. Там ничего за бутлоадер не было.
я считал, что бутлодер линкуется на уровне хекса из ядра
Я отвечал на вопрос из #13. Там ничего за бутлоадер не было.
я так понял ТС защиту программы лепит, дописав код в бутлоадер, мой вопрос подразумевал, как обратиться к функции в бутлоадере и, попутно вылезло, что в ядре miniCore (optiboot) бутлоадер пишется по адресу, на 512 байт ниже, это как понимать? Или IDE неправильно считает верхнюю границу ПЗУ?
Или IDE неправильно считает верхнюю границу ПЗУ?
Ну вот почему ты занудно спрашиваешь на форуме одно и тоже, пока кто-то не взорвется ответом, вместо того, чтобы поискать самому?
В boards.txt есть параметр upload.maximum_size. Ничего ИДЕ не считает, а просто берет это число. А тот, кто описывал плату - сие число туда записывает. Человеческий фактор. ;)))) Если ты поменял бутлоадер, то лучше опиши новую плату с новым бутлоадером, иначе размер будет считаться неверно.
Или IDE неправильно считает верхнюю границу ПЗУ?
Ну вот почему ты занудно спрашиваешь на форуме одно и тоже, пока кто-то не взорвется ответом, вместо того, чтобы поискать самому?
В boards.txt есть параметр upload.maximum_size. Ничего ИДЕ не считает, а просто берет это число. А тот, кто описывал плату - сие число туда записывает. Человеческий фактор. ;)))) Если ты поменял бутлоадер, то лучше опиши новую плату с новым бутлоадером, иначе размер будет считаться неверно.
так это жеж miniCore, орднунг и стандарт де факто, как бы, я так считал )))
кругом одни в разной степени Гайверы, как дальше бедному крестьянину...
PS что-то в последнее время постоянно убеждаюсь, хочешь сделать хорошо - сделай сам...
PPS надо автору отписать, видимо в оптибут 8 размер загрузчика изменился
Да вы правильно сказали все я изменял optiboot для добавления туда валидности скетча и ключа шифрования EEPROM а еще возможность блокирования запуска бутлоадера, если его заблокировать нужно будет прошивать через SPI и информация не утечет.
Ключи шифрования используются uint64_t + алгоритм
Пришлось, конечно, увеличить в фьюзах бутлоадер до 1k. А так все работает
Все это было сделано только для того, чтобы можно было прошивать МК, а в прошивке не хранились ключи шифрования, позже можно будет еще дописать запрет на прошивку через UART на уровне загрузчика
Всё таки тема
сисегне раскрытасмотрим хекс загрузчика:
Что видим? Грузится с адреса 0x7e00
Смотрим Make файл:
Видим, что мы имеем какие-то два загрузчика, один из них бигбут оставляет под загрузчик 1 килобайт и грузится с адреса 0х7с00,
а обычный с адреса 0х7e00 как в хексе и прописано, осталось найти этот самый бигбут )))
А к чему это все?
А к чему это все?
мысли вслух )))
PS у автора miniCore всё правильно, видимо задел на будущее (как и ожидалось)