я про все локи уже давно прочитал в даташите.
все твои дополнительные таблицы не являются аппаратными. все равно переходы на обработчики прерываний будут делаться из основной аппаратной таблицы.
я вот что подумал, что при переходе из загрузчика в приложение сначала перемещенную таблицу нужно вернуть на свое место с нулевого адреса, а уж потом сделать переход на нулевой адрес.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Вопрос как опознается блокировка.
Т. Е. Какой базовый принцип.
Ведь запрета на обращение к простым подпрограммами из "чужой области" блокировка не ставит.
Иначе были бы блокированы и подпрограммы с вызывающим CALL/JMP ADR а в даташитах про то ни слова.
Посему запрет блокировки касается только фиксированных ячеек области векторов прерываний.
В других ячейках контроль адреса не проводится.
Предположим, что при установленной защите в ячейке с вектором стоит адрес передачи управления в свою же область адресного пространства. Для системы защиты это разрешенный переход (и начало обработки прерывания)... А уже там стоит вторая переадресация "в запретную зону". Вот такой вариант в принципе вполне возможен.
Проверку и без бутлоадера можно попробовать сделать... Чисто из " спортивна интересу"...
Прикупил жирну адуринку...
mega2560 pro... Вроде бы и неплохая базовая платка -относительно малогабаритная...
Только вот пригляделся -
а на всего этого монстра с количеством под 70 линий ВСЕГО ТРИ КОНТАКТА "ОБЩИЙ"(GND)!!! https://img.radiokot.ru/files/20529/3eugnlk41u.jpg
Как-то уж совсем неудобственно, особо при заявленном выходном токе стабилизаторов до 800мА...
Для сигналов и силовых обратный проводок один (максимум два) на всю платку...
ПЕЧАЛЬКА однако...
Так не факт, что на платке общий слой...
Силовые и сигнальные что от источника питания, что от нагрузок/источников сигнала и все в один контакть...
хотя бы еще парочку поставили... Силовые то можно и через "общий +" затянуть. Мне больше интерес был для подключения параллельного ОЗУ (23я серия похоже таки из области фантастики по местным условиям).
Ну да и на том... сойдет... Все равно пока "на отлежку" в кащеев сундук.
А вот посмотрите,какая шняга интересная. https://forum.cxem.net/index.php?/topic ... nt=3938993
Можно же перенести прошивку (дизассемблировать,т.к исходника не дал) на другой МК ?
например мега8 ? их у меня полно,а тини44 нет.
При наличии документации на те RW1990 можно под любой МК программу сделать...
Да и в сети полно всяких самоделок на разных АВРкахи адуринах...
Кстати... Для программирования далласов можно использовать аппаратную начинку DS2480...
"...
Supports 12V EPROM Programming and
Stiff 5V Pullup for Crypto iButton, Sensors
and EEPROM
..."
int address = 0; // Переменная для хранения адреса
byte value1 = B00001111; // Переменная для хранения значения 1
byte value2 = B10101010; // Переменная для хранения значения 2
void setup() {
Serial.begin(115200);
EEPROM.put(address, value1); // Записать значение value1 в ячейку с адресом 0
address += 1; // Корректируем адрес
EEPROM.put(address, value2); // Записать значение value2 в ячейку с адресом 1
Так что положили, то и получили.
Значения переменных как были так и остались
Относительно "пропавших лидирующих нулей" - это особенности вывода на печать (функции обработчика перекодировки опции BIN, HEX в print) - аналогия гашения старших незначащих нулей на разнообразных индикаторах.
Для контроля можете выставить HEX - хотя и там "лидирующий нуль" может не воспроизводиться если формат отличается от 0xNN.
[uquote="BOB51",url="/forum/viewtopic.php?p=4565027#p4565027"]Относительно "пропавших лидирующих нулей" - это особенности вывода на печать[/uquote]
Так это что, это он всегда будет и справа и слева в байте нули обрезать как ему вздумается?
Но тогда ещё вопрос. Реальный код будет чтение из массива и запись байт в порты (У Ардуины 2560 можно байты сразу целиком в порты выводить) Я собираюсь потом этот прочитанный байт 00001111 в порт выводить, он мне его в порт как выведет? Где окажется младший бит если нулей нет?
Откуда взялись значения 127 и 191?
Я ни разу не программист, но дело и не в программировании вовсе, я просто не понимаю как он всё это интерпретирует при выводе данных.
При печать старшие биты, равные 0, не отображаются.
СпойлерМожете организовать собственный "правильной" печать. Код немного длинный, но все для теста.
Напр.:
value1 = EEPROM.get(address, value1);
Serial.print("0b");
if (value1 < 128)
Serial.print('0');
if (value1 < 64)
Serial.print('0');
if (value1 < 32)
Serial.print('0');
if (value1 < 16)
Serial.print('0');
if (value1 < 8)
Serial.print('0');
if (value1 < 4)
Serial.print('0');
if (value1 < 2)
Serial.print('0');
if (value1 < 1)
Serial.print('0');
Serial.println(value1, BIN);
---
[uquote="electroget",url="/forum/viewtopic.php?p=4565045#p4565045"]...
Откуда взялись значения 127 и 191?[/uquote]
Перепутали две строки выше. Поместите BIN в скобки.
Последний раз редактировалось veso74 Вс апр 07, 2024 09:15:26, всего редактировалось 2 раза.
Не пишите много раз в EEPROM, там ресурс совсем не большой (100 000 раз, на самом деле в напр. ~10 раз больше). EEPROM быстро создаст проблемы. Напр. сохранять только статические настройки, изменения при выключения/вкл. и т. д.
electroget
Вывод в порт у любой ардуинки возможен. Разница между мега 2560 и мегой 328 только в наличии "полных портов" на 8 бит.
И то... если в 328й использовать только как порт PD - будет вариант 8-битного вывода (но забываем про Rx/Tx, прервыания и перепрошивку через бутлоадер). Да еще можно без внешнего кварца PB использовать - но то уже не "классическая" нанка/про-мини, а некий самодел под специализированной "платформой".
Для простейших тренировок можете воспользоваться симулятором
статья http://sheepdogguides.com/arduino/aht9simsimm.htm
сайт с симулятором https://www.sites.google.com/site/unoardusim/
Совет - прячьте код под спойлер - иначе занимает много места и отвлекает внимание от вопроса.
Для тестов лучше библиотеки не использовать (та же EEPROM) - добавляют трудностей на начальном этапе освоения.
Достаточно обычного массива в ОЗУ.
avr/io.h и так "по умолчанию" в ардуиноIDE подключен.
[uquote="veso74",url="/forum/viewtopic.php?p=4565054#p4565054"]Не пишите много раз в EEPROM, там ресурс совсем не большой[/uquote]
Благодарю за совет, но это пока всё тестовые наработки, если дело когда-нибудь дойдёт до реальной схемы, то eeprom конечно же будет внешний, на чипе 25LC08 например.
Добавлено after 1 minute 10 seconds: BOB51,
Понял, спасибо.
Добавлено after 4 minutes 41 second: veso74,
Пока не вижу необходимости пользоваться симулятором. У меня есть живая плата и живой Ардуино IDE, так оно как-то привычнее людям старой школы.
Я тоже, по-старому . Моделирование в симуляроре только как идея, напр. думать о наших делах для хобби в местах, где включение железа невозможно, на работе например .
veso74,
Я этим всем занимаюсь только в любительском плане и только дома, по выходным в основном. Живое железо имеет то преимущество, что нет сомнений в полученном или не полученном результате. А для неспециалиста (а я не специалист в программировании микроконтроллеров) это очень важно.