Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 03.06.2006, 10:38  
zelanez
Вид на жительство
 
Регистрация: 23.04.2006
Сообщений: 308
Сказал спасибо: 14
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
zelanez на пути к лучшему
По умолчанию Как создать подключаемый файл из блока данных?

После написания кодов программы в памяти программ PIC остаётся много места, которое можно использовать под хранение данных (текстовые сообщения). Так я и сделал, начиная с адреса 1000h в PIC16F876 записал свои данные.
Основная программа обращается по заданным адресам, считывая из блока отдельные стринги.
Теперь хочется перенести этот блок в другую программу. Например подключаемым файлом. И ещё нужно, чтобы вставляемый блок данных записался по адресу 1000h, чтоб не переделывать каждый раз адреса запросов.
Пишу коды на ассемблере. Юзаю MPLAB, PROTEUS.
Имею мануал ассемблера с сайта microchip.ru
По описанию директив ассемблера DA,DB,DATA,DW,IDATA не разобрался как это сделать. Поскажите, плз...Или дайте ссылку или книгу, статью, где этот вопрос обсуждается с примерами....
Реклама:
zelanez вне форума  
Непрочитано 05.06.2006, 10:39  
Drex
Прописка
 
Аватар для Drex
 
Регистрация: 16.04.2004
Сообщений: 201
Сказал спасибо: 337
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
Drex на пути к лучшему
По умолчанию

Ну во первых, создаешь отдльный файл со своими блоками данных, в котором написано все в точности так, как сейчас в твоей программе, за исключением одной маленькой детали:
Файл должен начинаться со строки
ORG h'1000'
Этим ты укажешь, что этот блок программы будет располагаться начиная с адреса 1000Н

В основной программе в любом месте (но обычно в начале программы) пишешь так:
#include ‹I2C.asm›;
Сам понимаешь, что в скобочках имя ТВОЕГО файла.

Потом ORG h'0000'
и далее как обычно
Вот и все, удачи!
Drex вне форума  
Непрочитано 05.06.2006, 18:18  
zelanez
Вид на жительство
 
Регистрация: 23.04.2006
Сообщений: 308
Сказал спасибо: 14
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
zelanez на пути к лучшему
По умолчанию

С этой частью всё понятно. Я так и сделал вчера, но забыл, как я понял из твоего сообщения, указать адрес возврата org 0000h. Теперь поправлю.
Но смысл моего вопрос был в том, что этот кусок кода создает в программной памяти дамп кодов, начиная с адреса 1000Н.
Возникает резонный вопрос - а зачем писать каждый раз эти коды, перечисляя вводимые данные, если можно сразу этот дамп памяти с адреса 1000Н по 1500Н скопировать, оформить отдельным файлом и просто вставлять (неизвестным мне способом) в любые другие программы, где требуется? У меня это просто сообщения, выводимые на 2х-строчный LCD (ASCII коды).
Из основной программы я обращаюсь по известным адресам к этому блоку, считывая нужные стринги....

Решил действовать топорным способом, раз нет других идей. Взял и просто скопировал в буфер коды из программной памяти в MPLAB. Вставил их в текстовый редактор, назвал этот файл block.hex и попытался подключить директивой #include
Естественно, ничего не получилось. Я рассчитывал, что MPLAB, чего-нибудь скажет. Но она терпит и молчит...
Жду подсказок, как соловей сказок...
zelanez вне форума  
Непрочитано 05.06.2006, 18:40  
deCoder
Прописка
 
Регистрация: 27.05.2005
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
deCoder на пути к лучшему
По умолчанию

делаешь hex2bin
приляпываешь какой нить мусор в конец
copy /b твойфайл+мусор
обрезаешь файл по нужному адресу.
cut.exe твойфайл+мусор
приляпываешь нужную тебе библиотеку
copy /b твойфайл+библиотека
bin2hex
Естестественно это все в бат файле.
Не вижу причин чтобы это не работало

Я как то для себя написал утилиты cut.exe bin2hex hex2bin и еще кое какие(то что есть в сети кажется не подходят так как нужны 8 битные версии)
Могу поделится. Если нужно и исходниками на чистом неразбавленном и неприплюснутом Си.
deCoder вне форума  
Непрочитано 05.06.2006, 20:15  
deCoder
Прописка
 
Регистрация: 27.05.2005
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
deCoder на пути к лучшему
По умолчанию

хотя... не знаю как в mplab но по идее это делается так: нужно в мап файл включить свой объектник и все.
deCoder вне форума  
Непрочитано 06.06.2006, 05:51  
Drex
Прописка
 
Аватар для Drex
 
Регистрация: 16.04.2004
Сообщений: 201
Сказал спасибо: 337
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
Drex на пути к лучшему
По умолчанию

DeCoder - ты че-то совсем пургу напарил....

zelanez
Цитата:
оформить отдельным файлом и просто вставлять (неизвестным мне способом) в любые другие программы, где требуется? У меня это просто сообщения, выводимые на 2х-строчный LCD (ASCII коды).
Из основной программы я обращаюсь по известным адресам к этому блоку, считывая нужные стринги....
Ну так я же тебе и говорю, не надо каждый раз их писать, в каждой новой программе ты просто вставляешь в основной текст заранее сделанный файл директивой #include ‹имя твоего заранее подготовленного файла›.

Кстати hex - это уже скомпилированные код для программатора, и ты никак его не вставишь в ассемблерный исходник.
Drex вне форума  
Непрочитано 06.06.2006, 20:08  
zelanez
Вид на жительство
 
Регистрация: 23.04.2006
Сообщений: 308
Сказал спасибо: 14
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
zelanez на пути к лучшему
По умолчанию

Цитата:
Ну так я же тебе и говорю, не надо каждый раз их писать, в каждой новой программе ты просто вставляешь в основной текст заранее сделанный файл директивой #include ‹имя твоего заранее подготовленного файла›.
Так директива #include просто тупо вставляет коды из подключаемого файла, т.е. те же 300 строк кода. И, чтобы блок данных появился, надо их ещё и выполнить, т.е.тратить процессорное время. Это, правда, не сильно напрягает, но создает ощущение неправильной половой ориентации..
А весь смысл затеи состоит в том, чтобы не вставлять эти 300 строк, а вставить сразу готовый дамп программной памяти.
Ориентация сразу и восстановится...
Я вот подумал - а если взять готовый НЕХ - файл прошивки без подключенного файла и просто вбить в нужные места коды в текстовом режиме с помощью какого-нибудь макроса...Только вот ещё контрольные суммы считать....

2 deCoder, так вот я и хочу понять как подключить, чтобы осуществить сабж...
zelanez вне форума  
Непрочитано 07.06.2006, 04:06  
Drex
Прописка
 
Аватар для Drex
 
Регистрация: 16.04.2004
Сообщений: 201
Сказал спасибо: 337
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
Drex на пути к лучшему
По умолчанию

Цитата:
Так директива #include просто тупо вставляет коды из подключаемого файла, т.е. те же 300 строк кода. И, чтобы блок данных появился, надо их ещё и выполнить, т.е.тратить процессорное время. Это, правда, не сильно напрягает, но создает ощущение неправильной половой ориентации..
Ну процессорное время тратится только при компиляции, а в пике уже будет в конце концов абсолюьтно то же самое. Так что если у тебя даже пень 300 то ему скомпилить этот кусок кода - пару милисекунд, и это разовая акция. Нашел из-за чего беспокоиться. Ну а такого способа как ты хочешь по-моему не существует ввиду его полной ненужности. Разве что есть такие программаторы, которые позволяют прошивать пик по частям, но это гораздо гиморнее, чем просто вставит #include. И 300 строк это совсем не много.
Drex вне форума  
Непрочитано 07.06.2006, 19:06  
zelanez
Вид на жительство
 
Регистрация: 23.04.2006
Сообщений: 308
Сказал спасибо: 14
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
zelanez на пути к лучшему
По умолчанию

Ну надо же так подумать, что меня беспокоит время компиляции на компе...
Я имел в виду, что эти 300 строк кода должен выполнить микроконтроллер. А если уже готовый дамп памяти вставить, этой "пустой" работы можно не делать.

2 deCoder - вот только теперь вьехал в твой метод. Да, это должно сработать. И "мусор" нужен для того, чтоб блок данных начался с заданного адреса. А подключаемые файлы тут не годятся, поскольку они могут быть только с кодами, и компилятор создаёт выходной файл только из кодов. Всё, что есть в памяти ОЗУ, ЕEPROM и в программной памяти туда не попадает. Кстати, некоторые прошивальщики могут редактировать НЕХ-файл, т.е. можно вписать нужный дамп памяти на этом этапе.
zelanez вне форума  
Непрочитано 07.06.2006, 20:14  
deCoder
Прописка
 
Регистрация: 27.05.2005
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
deCoder на пути к лучшему
По умолчанию

Я до сих пор поддерживаю старые (ужасно большие )проекты написанные для консольного компилятора x51. Там все прозрачно. Асемблер делает из каждого файла исходника объектный файл. Есть файл с .lnk с видом типа:
drvheader
drvegin
drvuild
...
Где перечислены все включаемые объектные файлы. (пользователь сам его формирует)
Далее линковщик собирает бинарник согласно этому файлу.

В любом компиляторе все это есть. Просто за вас все это делается автоматически. Остается найти ассемблер и линковщик в своей среде. Изучить его ключи.

То есть.
Любой современный компилятор:
при "build" - делает объектники для измененных файлов и производит линковку
"rebuild" - для всех файлов.

Задача: развести эти 2 команды, то есть сделать команду получения объектника из нужного файла. И команду тупо собирающую проект из объектников. То есть в этом случае линковщику можно подсунуть что угодно.
deCoder вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер КР1006ВИ1. Как создать непериодичность? nigvil Электроника - это просто 8 14.05.2009 03:01
Как создать новый диск в Vista? clodlet Делимся опытом 0 16.08.2008 18:02
Как создать файл для EEPROM? Prime Микроконтроллеры, АЦП, память и т.д 3 13.11.2006 21:43
IAR C for AVR. как создать файл для внешнего EEPROM? prottoss Микроконтроллеры, АЦП, память и т.д 7 07.11.2005 22:19
Как в Keil C51 создать hex файл? 011119xx Микроконтроллеры, АЦП, память и т.д 1 13.07.2005 11:59


Часовой пояс GMT +4, время: 08:29.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot