Как указать место расположения кода во FLASH памяти
|
|
Mifody |
Дата: Пн, 29.03.2021, 13:20 | Сообщение # 1 |
Группа:
Пользователи
Ранг:
Новенький
Сообщений:
8
Замечания:
±
На сайте с 30.01.2021
Статус:
Offline
|
Здравствуйте. Подскажите пожалуйста, в PicBasicPRO можно как то принудительно задать расположение кода во FLASH памяти программ? Мне нужно, чтобы весь код располагался не с адреса 0х00, а с адреса 0х05. А адреса с 0х00 по 0х05 были забиты NOP'ами. В настройках проекта ничего такого нет. Пробовал так: Код asm org 0 nop nop nop nop nop endasm
asm org 5 endasm
/// код программы ///
но при компиляции появляется ошибка COLLISION IN ROM Подскажите, как правильно это сделать? И вообще, возможно ли это в данном компиляторе? Заранее спасибо.
|
|
|
|
xvovanx |
Дата: Пн, 29.03.2021, 13:39 | Сообщение # 2 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
327
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Цитата Mifody ( ) Подскажите, как правильно это сделать? И вообще, возможно ли это в данном компиляторе? Самому конкретно адрес указать не получится. Но можно в начале программы приложить внешний (пустой) файл и его забить нулями (см.мой пример с файлами подгрузки доп. шрифтов и картинок). А если не секрет для чего это понадобилось?
Сообщение отредактировал
xvovanx - Пн, 29.03.2021, 13:45
|
|
|
|
Mifody |
Дата: Пн, 29.03.2021, 14:20 | Сообщение # 3 |
Группа:
Пользователи
Ранг:
Новенький
Сообщений:
8
Замечания:
±
На сайте с 30.01.2021
Статус:
Offline
|
Спасибо за оперативный ответ.
Цитата xvovanx ( ) А если не секрет для чего это понадобилось? Абсолютно не секрет. Мне знакомый подсуетил горсть контроллеров PIC12C508A после неудачных попыток программирования. Не знаю чем и как их шили, но у всей горсти одна и та же беда - первые 5 байт забиты нулями, то есть безобидными нопами. Я вот и подумал, было бы не плохо их использовать для каких нибудь простых задач, иногда нужно. Но для этого надо писать не с нулевого адреса. В MPLABe набросал простенькую моргалку со смещением адресов (там это легко), в протеусе всё работает. Но не хочу в асме, там я уже много чего забыл.
Цитата xvovanx ( ) Но можно в начале программы приложить внешний (пустой) файл Поясните пожалуйста поподробней. Я создал в WinHex файл размером 5 байт, забил их нулями, подключаю их в проект и получаю TOKEN ERROR. Не могли бы вы написать, что и как именно мне нужно сделать? Ну или более подробно описать. Честно говоря, никогда не работал и INCLUD'ами. Заранее спасибо.Добавлено (29.03.2021, 15:11) --------------------------------------------- Просто ещё далеко не факт что то, что написано в компиляторе вначале так же располагается и в памяти. Например, если написать: Код asm nop nop nop nop nop endasm
pause 10
то НОПы в коде прошивки идут после кода, создающего паузу.
|
|
|
|
xvovanx |
Дата: Пн, 29.03.2021, 15:41 | Сообщение # 4 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
327
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Цитата Mifody ( ) Не могли бы вы написать, что и как именно мне нужно сделать? создаете файл *.inc, кладете рядом с файлом программы, при компиляции файл с указанным названием добавляется в программу.
Цитата Mifody ( ) одна и та же беда - первые 5 байт забиты нулями Если первые ячейки физически убитые, боюсь что ничего не выйдет. Хоть какая, но в первой ячейке программы будет обязательно информация (переход, метка вхождения в программу и т.д).
|
|
|
|
Mifody |
Дата: Пн, 29.03.2021, 16:07 | Сообщение # 5 |
Группа:
Пользователи
Ранг:
Новенький
Сообщений:
8
Замечания:
±
На сайте с 30.01.2021
Статус:
Offline
|
Цитата xvovanx ( ) создаете файл *.inc, кладете рядом с файлом программы Делаю так. Если файл inc пустой (0 байт) то компилируется без ошибок, но и ничего не происходит. Ну и правильно, файл же пустой. А вот что туда написать и в каком формате, вот в чём вопрос.Цитата xvovanx ( ) Если первые ячейки физически убитые Не думаю. Просто как то не так шили, началась прошивка, потом вывалилась ошибка, что успело - прошилось, но не правильно. А так как контроллер OTP, то поправить уже не возможно, нужно писать прошивку с учётом того, что в начале НОПы.Цитата xvovanx ( ) Хоть какая, но в первой ячейке программы будет обязательно информация (переход, метка вхождения в программу и т.д). Выполнение программы ведь всегда начинается с адреса 0х00 и дальше идёт вверх. Ну проскочит он 5 НОПов и начнёт выполнять основную программу. Только вот, на сколько помню, там где то в начальных адресах вектора прерываний. Но если их не использовать, то будет работать. Я писал в MPLABе простую прошивку, в которой 5 начальных байт это НОПы, а дальше уже идёт прошивка. В контроллер не шил, так как это тестовая прошивка и контроллер одноразовый, но в протеусе работает.
Сообщение отредактировал
Mifody - Пн, 29.03.2021, 16:08
|
|
|
|
xvovanx |
Дата: Пн, 29.03.2021, 16:32 | Сообщение # 6 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
327
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Цитата Mifody ( ) Делаю так. Если файл inc пустой (0 байт) то компилируется без ошибок, но и ничего не происходит. Ну и правильно, файл же пустой. А вот что туда написать и в каком формате, вот в чём вопрос. Я картинку выше выкладывал *.inc файла открытого в блокноте
|
|
|
|
Mifody |
Дата: Ср, 31.03.2021, 11:41 | Сообщение # 7 |
Группа:
Пользователи
Ранг:
Новенький
Сообщений:
8
Замечания:
±
На сайте с 30.01.2021
Статус:
Offline
|
Цитата xvovanx ( ) Я картинку выше выкладывал *.inc файла открытого в блокноте Сделал так же, только оставил 5 байт. При компиляции получаю Syntax Error
|
|
|
|
ivan_fd |
Дата: Ср, 31.03.2021, 18:29 | Сообщение # 8 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Точно не скажу есть ли в PicBasicPro оператор CData. Уже и забыл когда его видел. Но даже, если и есть, то в данном случаи он вам не поможет. Тут нужно ORG. Попробуйте ето все сделать в PROTON с оператором @ ORG.
|
|
|
|
anatol |
Дата: Чт, 01.04.2021, 01:18 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
ivan_fd, так ORG вектор и располагается по адресу 00. Если только в ORG указать начало программы с какого-то исправного начального адреса, а после компиляции "забить" нулями начало.
|
|
|
|
Mifody |
Дата: Чт, 01.04.2021, 10:09 | Сообщение # 10 |
Группа:
Пользователи
Ранг:
Новенький
Сообщений:
8
Замечания:
±
На сайте с 30.01.2021
Статус:
Offline
|
Цитата anatol ( ) Если только в ORG указать начало программы с какого-то исправного начального адреса, а после компиляции "забить" нулями начало. Да, я так и хотел сделать в бейсике, но не получается. Пишет при компиляции, что обнаружен конфликт в ROM. На асме это делается ещё проще, просто в начале своего кода ставим нужное количество нопов, это и есть 0х00 в машинном коде. Можно ещё для верности указать ORG 0, хотя он там по умолчанию. Сегодня с утра пожертвовал 1 контроллер на эксперименты. Точнее, получилось, что и не пожертвовал.. Набросал на асме моргалку на 15 слов, забил в начале 5 нопов, прошил, прошил фьюзы - работает! Думаю, пойду дальше.. Забил нулями прошитое (15+5 нопов в начале), код моргалки сдвинулся ниже, прошил - работает! Получается, что одноразовый контроллер не совсем уж и одноразовый. Конечно, с последующими ограничениями в виде невозможности использовать прерывания и всё меньше остающейся памяти. И шить нужно без проверки стирания. Ладно, я понял, что проще на асме набросать нужное, если проект не сложный. Простыми путями на языках высокого уровня это, похоже, не решается. (((
|
|
|
|