Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
03.06.2006, 10:38
|
|
Вид на жительство
Регистрация: 23.04.2006
Сообщений: 308
Сказал спасибо: 14
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
|
Как создать подключаемый файл из блока данных?
После написания кодов программы в памяти программ PIC остаётся много места, которое можно использовать под хранение данных (текстовые сообщения). Так я и сделал, начиная с адреса 1000h в PIC16F876 записал свои данные.
Основная программа обращается по заданным адресам, считывая из блока отдельные стринги.
Теперь хочется перенести этот блок в другую программу. Например подключаемым файлом. И ещё нужно, чтобы вставляемый блок данных записался по адресу 1000h, чтоб не переделывать каждый раз адреса запросов.
Пишу коды на ассемблере. Юзаю MPLAB, PROTEUS.
Имею мануал ассемблера с сайта microchip.ru
По описанию директив ассемблера DA,DB,DATA,DW,IDATA не разобрался как это сделать. Поскажите, плз...Или дайте ссылку или книгу, статью, где этот вопрос обсуждается с примерами....
|
|
|
|
05.06.2006, 10:39
|
|
Прописка
Регистрация: 16.04.2004
Сообщений: 201
Сказал спасибо: 337
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Ну во первых, создаешь отдльный файл со своими блоками данных, в котором написано все в точности так, как сейчас в твоей программе, за исключением одной маленькой детали:
Файл должен начинаться со строки
ORG h'1000'
Этим ты укажешь, что этот блок программы будет располагаться начиная с адреса 1000Н
В основной программе в любом месте (но обычно в начале программы) пишешь так:
#include ‹I2C.asm›;
Сам понимаешь, что в скобочках имя ТВОЕГО файла.
Потом ORG h'0000'
и далее как обычно
Вот и все, удачи!
|
|
|
|
05.06.2006, 18:18
|
|
Вид на жительство
Регистрация: 23.04.2006
Сообщений: 308
Сказал спасибо: 14
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
|
С этой частью всё понятно. Я так и сделал вчера, но забыл, как я понял из твоего сообщения, указать адрес возврата org 0000h. Теперь поправлю.
Но смысл моего вопрос был в том, что этот кусок кода создает в программной памяти дамп кодов, начиная с адреса 1000Н.
Возникает резонный вопрос - а зачем писать каждый раз эти коды, перечисляя вводимые данные, если можно сразу этот дамп памяти с адреса 1000Н по 1500Н скопировать, оформить отдельным файлом и просто вставлять (неизвестным мне способом) в любые другие программы, где требуется? У меня это просто сообщения, выводимые на 2х-строчный LCD (ASCII коды).
Из основной программы я обращаюсь по известным адресам к этому блоку, считывая нужные стринги....
Решил действовать топорным способом, раз нет других идей. Взял и просто скопировал в буфер коды из программной памяти в MPLAB. Вставил их в текстовый редактор, назвал этот файл block.hex и попытался подключить директивой #include
Естественно, ничего не получилось. Я рассчитывал, что MPLAB, чего-нибудь скажет. Но она терпит и молчит...
Жду подсказок, как соловей сказок...
|
|
|
|
05.06.2006, 18:40
|
|
Прописка
Регистрация: 27.05.2005
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
|
делаешь hex2bin
приляпываешь какой нить мусор в конец
copy /b твойфайл+мусор
обрезаешь файл по нужному адресу.
cut.exe твойфайл+мусор
приляпываешь нужную тебе библиотеку
copy /b твойфайл+библиотека
bin2hex
Естестественно это все в бат файле.
Не вижу причин чтобы это не работало
Я как то для себя написал утилиты cut.exe bin2hex hex2bin и еще кое какие(то что есть в сети кажется не подходят так как нужны 8 битные версии)
Могу поделится. Если нужно и исходниками на чистом неразбавленном и неприплюснутом Си.
|
|
|
|
05.06.2006, 20:15
|
|
Прописка
Регистрация: 27.05.2005
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
|
хотя... не знаю как в mplab но по идее это делается так: нужно в мап файл включить свой объектник и все.
|
|
|
|
06.06.2006, 05:51
|
|
Прописка
Регистрация: 16.04.2004
Сообщений: 201
Сказал спасибо: 337
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
DeCoder - ты че-то совсем пургу напарил....
zelanez
Цитата:
|
оформить отдельным файлом и просто вставлять (неизвестным мне способом) в любые другие программы, где требуется? У меня это просто сообщения, выводимые на 2х-строчный LCD (ASCII коды).
Из основной программы я обращаюсь по известным адресам к этому блоку, считывая нужные стринги....
|
Ну так я же тебе и говорю, не надо каждый раз их писать, в каждой новой программе ты просто вставляешь в основной текст заранее сделанный файл директивой #include ‹имя твоего заранее подготовленного файла›.
Кстати hex - это уже скомпилированные код для программатора, и ты никак его не вставишь в ассемблерный исходник.
|
|
|
|
06.06.2006, 20:08
|
|
Вид на жительство
Регистрация: 23.04.2006
Сообщений: 308
Сказал спасибо: 14
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
|
Цитата:
|
Ну так я же тебе и говорю, не надо каждый раз их писать, в каждой новой программе ты просто вставляешь в основной текст заранее сделанный файл директивой #include ‹имя твоего заранее подготовленного файла›.
|
Так директива #include просто тупо вставляет коды из подключаемого файла, т.е. те же 300 строк кода. И, чтобы блок данных появился, надо их ещё и выполнить, т.е.тратить процессорное время. Это, правда, не сильно напрягает, но создает ощущение неправильной половой ориентации..
А весь смысл затеи состоит в том, чтобы не вставлять эти 300 строк, а вставить сразу готовый дамп программной памяти.
Ориентация сразу и восстановится...
Я вот подумал - а если взять готовый НЕХ - файл прошивки без подключенного файла и просто вбить в нужные места коды в текстовом режиме с помощью какого-нибудь макроса...Только вот ещё контрольные суммы считать....
2 deCoder, так вот я и хочу понять как подключить, чтобы осуществить сабж...
|
|
|
|
07.06.2006, 04:06
|
|
Прописка
Регистрация: 16.04.2004
Сообщений: 201
Сказал спасибо: 337
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Цитата:
|
Так директива #include просто тупо вставляет коды из подключаемого файла, т.е. те же 300 строк кода. И, чтобы блок данных появился, надо их ещё и выполнить, т.е.тратить процессорное время. Это, правда, не сильно напрягает, но создает ощущение неправильной половой ориентации..
|
Ну процессорное время тратится только при компиляции, а в пике уже будет в конце концов абсолюьтно то же самое. Так что если у тебя даже пень 300 то ему скомпилить этот кусок кода - пару милисекунд, и это разовая акция. Нашел из-за чего беспокоиться. ![Бьюсь об стену](images/smilies/icon_obstenu.gif) Ну а такого способа как ты хочешь по-моему не существует ввиду его полной ненужности. Разве что есть такие программаторы, которые позволяют прошивать пик по частям, но это гораздо гиморнее, чем просто вставит #include. И 300 строк это совсем не много.
|
|
|
|
07.06.2006, 19:06
|
|
Вид на жительство
Регистрация: 23.04.2006
Сообщений: 308
Сказал спасибо: 14
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
|
Ну надо же так подумать, что меня беспокоит время компиляции на компе...
Я имел в виду, что эти 300 строк кода должен выполнить микроконтроллер. А если уже готовый дамп памяти вставить, этой "пустой" работы можно не делать.
2 deCoder - вот только теперь вьехал в твой метод. Да, это должно сработать. И "мусор" нужен для того, чтоб блок данных начался с заданного адреса. А подключаемые файлы тут не годятся, поскольку они могут быть только с кодами, и компилятор создаёт выходной файл только из кодов. Всё, что есть в памяти ОЗУ, ЕEPROM и в программной памяти туда не попадает. Кстати, некоторые прошивальщики могут редактировать НЕХ-файл, т.е. можно вписать нужный дамп памяти на этом этапе.
|
|
|
|
07.06.2006, 20:14
|
|
Прописка
Регистрация: 27.05.2005
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
|
Я до сих пор поддерживаю старые (ужасно большие )проекты написанные для консольного компилятора x51. Там все прозрачно. Асемблер делает из каждого файла исходника объектный файл. Есть файл с .lnk с видом типа:
drvheader
drvegin
drvuild
...
Где перечислены все включаемые объектные файлы. (пользователь сам его формирует)
Далее линковщик собирает бинарник согласно этому файлу.
В любом компиляторе все это есть. Просто за вас все это делается автоматически. Остается найти ассемблер и линковщик в своей среде. Изучить его ключи.
То есть.
Любой современный компилятор:
при "build" - делает объектники для измененных файлов и производит линковку
"rebuild" - для всех файлов.
Задача: развести эти 2 команды, то есть сделать команду получения объектника из нужного файла. И команду тупо собирающую проект из объектников. То есть в этом случае линковщику можно подсунуть что угодно.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:29.
|
|