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

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

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

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

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

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

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

Закрытая тема
Опции темы
Непрочитано 08.06.2006, 04:11   #11
Drex
Прописка
 
Аватар для Drex
 
Регистрация: 16.04.2004
Сообщений: 201
Сказал спасибо: 337
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
Drex на пути к лучшему
По умолчанию

Цитата:
Я имел в виду, что эти 300 строк кода должен выполнить микроконтроллер. А если уже готовый дамп памяти вставить, этой "пустой" работы можно не делать.
Микроконтроллер выполнит эти 300 строк в любом случае, хоть ты в исходник вставишь 300 строк, хоть в hex файл - результат 100% одинаковый. В памяти программ хранятся только команды процессора, а не дампы строк. Просто есть такие команды, которые можно использовать как раз в этих целях.
Ну вот ты сам себе пустую работу и придумал, так как я предложил нужно всего лишь скомпилить, загрузить hex в программатор и прошить. А так как ты хочешь, нужно после компиляции еще и линковать и прочие заморочки - зачем оно надо, никак не пойму?
Реклама:
Drex вне форума  
Непрочитано 08.06.2006, 19:33   #12
zelanez
Вид на жительство
 
Регистрация: 23.04.2006
Сообщений: 308
Сказал спасибо: 14
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
zelanez на пути к лучшему
По умолчанию

Drex, эти 300 строк кода в МК делают только одно дело - создают в памяти программ блок данных. Поскольку память программ МК FLASH, то эти данные там хранятся независимо от наличия питания. Основная программа пользуется отдельными кусочками из этого блока. А вот упомянутые 300 строк больше не нужны. Совсем. Вообще. Никогда. Отсюда и возник вопрос по сабжу. Не зашивать эти 300 строк, а сразу зашить данные в программную память и всё. Чистая экономия 300(!) 14-битных слов в памяти программ.

2 deCoder, когда я начинал эту тему, написанный тобой макет действий у меня был в голове. Но сколько вопросов возникает - как это сделать в MPLAB, как сделать файл из куска прграммной памяти, как залинковать так, чтобы данные из этого файла прописались в программную память по нужному адресу?

Ведь могло оказаться так, что в этой конфе попадется человек, всё это уже проделавший и имеющий желание поделиться своим опытом....
Пока что разбираюсь с форматом НЕХ-файла, чтобы корректно вписать в него свои коды. Навскидку ничего сложного нет, разобраться можно. Осталось один вопрос решить - а нет ли специального байта для обозначения данных? Для кодов - 00h... Начну с метода тыка...
zelanez вне форума  
Непрочитано 09.06.2006, 17:26   #13
zelanez
Вид на жительство
 
Регистрация: 23.04.2006
Сообщений: 308
Сказал спасибо: 14
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
zelanez на пути к лучшему
По умолчанию

Так.... То ли тема сложная, то ли не интересная...
Насчёт последнего - точно интересная. Тогда продолжим. Хочтся решить с общей помощью эту проблему красиво, чтоб и другие люди любовались и пользовались...
Короче, сделал я НЕХ файл, как посоветовал deCoder, набив пустых строк NOP для достижения адреса 1000h. Удобно оказалось - контрольные сумы легко считать.
Потом вставил не весь блок, а пару стрингов, для теста. Теперь появилась проблема - MPLAB не работает с НЕХ - файлом, а поэтому проверить тест в нём нельзя. Тогда я в Poteus. Сделал всё, как полагается - загнал асм-файл, сделал Build All, в полученный НЕХ загнал нужный дамп. Запускаю проект - а Протеус глючит - не читает дамп, хотя в программной памяти данные присутствуют, гляньте на картинку...
В программной памяти начиная с адреса 1000h пошли данные. Сначала пробелы (20Н), а потом буквы. На скрине EEADRH+EEADR = 1006h. На индикаторе черные прямоугольники - потому что считываются байты FF вместо данных (EEDATA=FF). На скринах Watch-окна видно, что адрес проходит верно, а чтения нет...
Как можно проверить, не зашивая всё это в МК? Подайте идею...

-- Прилагается рисунок: --

zelanez вне форума  
Непрочитано 10.06.2006, 04:13   #14
deCoder
Прописка
 
Регистрация: 27.05.2005
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
deCoder на пути к лучшему
По умолчанию

я так понял ты сам не знаешь чего хочешь ) Вернее не понимаешь. Выигрыша никакого ведь нет.
А кодеры перешедшие из пионеров в комсомол обычно поступают так:

организовывается массив.
string_array:
;0
db 0,1,2,ffh ;0 строка
;1
db 55, 'my2string',ffh; 1 строка
;2
....

каждая строка заканчивается спецсимволом (например FF)
string_array - это ведь не только метка но и адрес в памяти.
Далее если тебе нужно считать например 40 строку то загружаешь адрес данного массива string_array,
в функции чтения строки находишь 39 символов FF и далее считываешь 40 ую строку до символа FF.
Подумай на досуге нахрена тебе абсолютные адреса строк.
deCoder вне форума  
Непрочитано 10.06.2006, 09:19   #15
zelanez
Вид на жительство
 
Регистрация: 23.04.2006
Сообщений: 308
Сказал спасибо: 14
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
zelanez на пути к лучшему
По умолчанию

Я только октябрёнок, но со временем собираюсь вступить в партию (кодеров)
Понял твоё предложение - не нужно создавать дамп данных в памяти программ. Нужно сразу обращаться к той строке матрицы кодов, где находятся нужный стринг. Понятно, попробую.
Но экономия в варианте с дампом памяти всё же есть, поскольку компилятор из предложенной тобой строки с директивой db ‹string›, создает соответствующее количество строк retlw ‹знак›, т.е обратно получаем в зашитой в МК программе 300 строк...Хотя они уже будут работать постоянно.
У меня программа насыщена текстовыми сообщениями, выводимыми на двухстрочный LCD. Из 1000 строк кода около 70 % стринги. И ещё столько же добавится.
Потому и напрягает...
А ещё одно соображение - способ с директивами db, dw - слишком прямолинеен. Свеженького хочется...

Кстати, в дополнение к предыдущему сообщению, представляю скрин, как Proteus работает с дампом данных в программной памяти и читает из него стринги.
Хотя в окне программной памяти в области адресов чтения ничего нет....А вот в MPLAB тот же код создает видимый в таком же окне блок данных.

-- Прилагается рисунок: --

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

deCoder, проверил твоё предложение.Оказалось, что оно не совсем верное. Директива db - путь в один конец, не возвращает байт, а просто записывает его в программную память. А как взять его оттуда - проблема кодера. Т.е. опять нужно привязываться к абсолютным адресам программной памяти для чтения байта. С чего начали, к тому и пришли.
Попутно выяснилось, что многие ассемблерные директивы могут писать в память, а читать из неё ни одна не может. Кроме одной, dt - которая возможно возвращает байт в аккумуляторе.
Но польза в твоём предложении есть - количество строк кода для ввода стрингов сократилось с 300 до 15.
Proteus не видит данные в программной памяти, как и раньше, но читает их и выводит на LCD. И ещё, для вывода на LCD нужно читать стринг побайтно, поэтому запись и чтение целого стринга не подходит.
Короче, пока запись сделал директивой dw по адресу 1000Н. И тут ещё один момент - при каждом включении будет происходить перезапись данных в программной памяти. Хватит ли её ресурса на весь срок эксплуатации?

-- Прилагается рисунок: --

zelanez вне форума  
Непрочитано 12.06.2006, 00:00   #17
deCoder
Прописка
 
Регистрация: 27.05.2005
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
deCoder на пути к лучшему
По умолчанию

чевой то я совсем запутался. Я думал что нужно хранить статичные строки... хотя без разницы. Если для авр:
mov Z, 0x1000
lpm
(загружаем в r0 значение из памяти с адресом 0x1000) То должно работать и

mov Z, string_array
lpm
Или че то типо того. абсолютные адреса не нужны.
deCoder вне форума  
Непрочитано 12.06.2006, 08:56   #18
zelanez
Вид на жительство
 
Регистрация: 23.04.2006
Сообщений: 308
Сказал спасибо: 14
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
zelanez на пути к лучшему
По умолчанию

И меня, тоже хочешь запутать?
В твоём примере
"...mov Z, string_array..."
да,тоже сработает, если заранее определить, что
string_array EQU 0х1000
zelanez вне форума  
Непрочитано 12.06.2006, 13:20   #19
deCoder
Прописка
 
Регистрация: 27.05.2005
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
deCoder на пути к лучшему
По умолчанию

а зачем че то заранее определять? И без этого должно работать.
deCoder вне форума  
Непрочитано 13.06.2006, 10:03   #20
Drex
Прописка
 
Аватар для Drex
 
Регистрация: 16.04.2004
Сообщений: 201
Сказал спасибо: 337
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
Drex на пути к лучшему
По умолчанию

zelanez

Слушай, че-то я не пойму. В даташите на пик ясно сказано, что пользовательская программа не имеет доступа к памяти программ. Как же ты в программе создаешь блок данных в ней? Или ты всетаки имеешь в виду EEPROM область ?
Drex вне форума  
Закрытая тема

Закладки

Опции темы

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

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, время: 12:23.


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