Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: ivan_fd  
Форум Picbasic.ru » Программирование МК » PicBasicPro » Как указать место расположения кода во FLASH памяти (Как указать место расположения кода во FLASH памяти)
Как указать место расположения кода во FLASH памяти
Mifody Дата: Пн, 29.03.2021, 13:20  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Новенький
Сообщений: 8
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Подскажите, как правильно это сделать? И вообще, возможно ли это в данном компиляторе? Заранее спасибо.
ЯНДЕКС Дата: 29.03.2021
xvovanx Дата: Пн, 29.03.2021, 13:39  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 446
Репутация: 53   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата Mifody ()
Подскажите, как правильно это сделать? И вообще, возможно ли это в данном компиляторе?

Самому конкретно адрес указать не получится. Но можно в начале программы приложить внешний (пустой) файл и его забить нулями (см.мой пример с файлами подгрузки доп. шрифтов и картинок).
А если не секрет для чего это понадобилось?
Прикрепления: 4097762.png(118.3 Kb) · 0193870.png(46.6 Kb)

Сообщение отредактировал xvovanx - Пн, 29.03.2021, 13:45
Mifody Дата: Пн, 29.03.2021, 14:20  |                                                                                                                Сообщение # 3
Группа: Пользователи
Ранг:  Новенький
Сообщений: 8
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 446
Репутация: 53   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата Mifody ()
Не могли бы вы написать, что и как именно мне нужно сделать?

создаете файл *.inc, кладете рядом с файлом программы, при компиляции файл с указанным названием добавляется в программу.

Цитата Mifody ()
одна и та же беда - первые 5 байт забиты нулями

Если первые ячейки физически убитые, боюсь что ничего не выйдет. Хоть какая, но в первой ячейке программы будет обязательно информация (переход, метка вхождения в программу и т.д).
Mifody Дата: Пн, 29.03.2021, 16:07  |                                                                                                                Сообщение # 5
Группа: Пользователи
Ранг:  Новенький
Сообщений: 8
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 446
Репутация: 53   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата Mifody ()
Делаю так. Если файл inc пустой (0 байт) то компилируется без ошибок, но и ничего не происходит. Ну и правильно, файл же пустой. А вот что туда написать и в каком формате, вот в чём вопрос.

Я картинку выше выкладывал *.inc файла открытого в блокноте
Mifody Дата: Ср, 31.03.2021, 11:41  |                                                                                                                Сообщение # 7
Группа: Пользователи
Ранг:  Новенький
Сообщений: 8
Репутация: 0   ±
Замечания:   ±
На сайте с 30.01.2021

Статус: Offline

Цитата xvovanx ()
Я картинку выше выкладывал *.inc файла открытого в блокноте
Сделал так же, только оставил 5 байт. При компиляции получаю Syntax Error
ivan_fd Дата: Ср, 31.03.2021, 18:29  |                                                                                                                Сообщение # 8
Группа: Модераторы
Ранг:  Специалист
Сообщений: 1145
Репутация: 115   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Точно не скажу есть ли в PicBasicPro оператор CData. Уже и забыл когда его видел.
Но даже, если и есть, то в данном случаи он вам не поможет. Тут нужно ORG.
Попробуйте ето все сделать в PROTON с оператором @ ORG.


Меня все время преследуют умные мысли...но я быстрее!!!
anatol Дата: Чт, 01.04.2021, 01:18  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 625
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

ivan_fd, так ORG вектор и располагается по адресу 00. Если только в ORG указать начало программы с какого-то исправного начального адреса, а после компиляции "забить" нулями начало.
Mifody Дата: Чт, 01.04.2021, 10:09  |                                                                                                                Сообщение # 10
Группа: Пользователи
Ранг:  Новенький
Сообщений: 8
Репутация: 0   ±
Замечания:   ±
На сайте с 30.01.2021

Статус: Offline

Цитата anatol ()
Если только в ORG указать начало программы с какого-то исправного начального адреса, а после компиляции "забить" нулями начало.
Да, я так и хотел сделать в бейсике, но не получается. Пишет при компиляции, что обнаружен конфликт в ROM. На асме это делается ещё проще, просто в начале своего кода ставим нужное количество нопов, это и есть 0х00 в машинном коде. Можно ещё для верности указать ORG 0, хотя он там по умолчанию. Сегодня с утра пожертвовал 1 контроллер на эксперименты. Точнее, получилось, что и не пожертвовал..  Набросал на асме моргалку на 15 слов, забил в начале 5 нопов, прошил, прошил фьюзы - работает! Думаю, пойду дальше.. Забил нулями прошитое (15+5 нопов в начале), код моргалки сдвинулся ниже, прошил - работает! Получается, что одноразовый контроллер не совсем уж и одноразовый. Конечно, с последующими ограничениями в виде невозможности использовать прерывания и всё меньше остающейся памяти. И шить нужно без проверки стирания. 
Ладно, я понял, что проще на асме набросать нужное, если проект не сложный. Простыми путями на языках высокого уровня это, похоже, не решается. (((
Форум Picbasic.ru » Программирование МК » PicBasicPro » Как указать место расположения кода во FLASH памяти (Как указать место расположения кода во FLASH памяти)
  • Страница 1 из 1
  • 1
Поиск: