Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 17.02.2020, 23:44   #1
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 111
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Как читать данные из памяти программ в PIC24?

Здравствуйте.
Пробую писать ПО на ассемблере для PIC24. В памяти программ размещаю константы, например текстовая строка:

.section mess,psv
adres: .ascii "Stroka",<13>,<0>

Будьте добры - подскажите как сослаться на адрес "adres" и как осуществить чтение символов текста в регистры MCU?
Заранее благодарен, Алексей.
alex_zas вне форума   Ответить с цитированием
Старый 18.02.2020, 08:18   #2
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,878
Вес репутации: 3951/114
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как читать данные из памяти программ в PIC24?

Механизм PSV-доступа в разных семействах 16-битной платформы может заметно отличаться. Полагаю, что Вы ведете речь о ранее озвученном Вами PIC24FJ128GA204. Если это так, то в даташите есть раздел 4.2.5 регламентирующий адресацию программной памяти через адресное пространство ОЗУ.
Основной переключатель адресного пространства - регистр DSRPAG.
Запись в него значений от 0x200 до 0x2FF приведет к доступности младшего слова (16 бит) программной памяти постранично (32К).
Запись от 0x300 до 0x3FF - старшего слова памяти программ соответственно.
Но собственно адрес доступа всегда должен содержать 1 в 15 разряде. То есть нулевой адрес страницы флеша будет доступен с указателем равным 0x8000.
В ассемблере XC16 (ASM16) есть специальный макрос, который упрощает этот доступ через метку (имя) массива констант во флеше.
Выглядит это как:
Код:
	mov		#psvpage(adres), W0
	mov		W0, DSRPAG
	mov		#psvoffset(adres), W0
	mov		[W0++], W1   ; W1 получил значение младшего слова [adres]
	mov		[W0], W2   ; W2 получил значение следующего слова [adres+2]
Причем загрузку DSRPAG совершенно не обязательно повторять, если речь идет об одной и той же странице флеша. Запишите туда значение один раз и затем пользуйтесь только #psvoffset

Последний раз редактировалось Марк; 18.02.2020 в 08:26.
Марк вне форума   Ответить с цитированием
Старый 19.02.2020, 09:53   #3
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 111
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Как читать данные из памяти программ в PIC24?

Марк - огромное спасибо! Всё получилось.
Будьте добры - подскажите как внутри макроса определить локальную метку?
В MPASM было "LOCAL adres". А как это сделать в ASM16?
alex_zas вне форума   Ответить с цитированием
Старый 19.02.2020, 10:07   #4
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,878
Вес репутации: 3951/114
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как читать данные из памяти программ в PIC24?

Я так понимаю, что в макросе тоже, что и в обычном коде.
Метка - это цифра от 0 до 9.
При использовании метки в командах ветвления к цифре надо добавить направление ветвления - f - forward или b - backward:
Код:
           bra     NZ, 0f
.........
.........

0:        mov   W0, W1
.........
.........
           bra     LTU,  0b
Марк вне форума   Ответить с цитированием
Старый 19.02.2020, 12:25   #5
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 111
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Как читать данные из памяти программ в PIC24?

У меня в макросе выполняется переход на метку, находящуюся внутри макроса.
При втором вызове макроса генерируется ошибка повторения имени метки. Нужно эту метку сделать локальной.
alex_zas вне форума   Ответить с цитированием
Старый 19.02.2020, 12:52   #6
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,878
Вес репутации: 3951/114
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как читать данные из памяти программ в PIC24?

Метки о которых я написал выше могут вообще следовать ОДИНАКОВЫЕ одна за другой. Написание направления ветвления и дает однозначность. Ветвление произойдет К БЛИЖАЙШЕЙ в этом направлении метке. У меня очень часто используется в одной функции (call) одинаковые локальные (цифровые) метки. А уж в разных, так само собой...
Вот пример одинаковых локальных меток:
Код:
0:      mov  W0, W1
...............
         bra    Z, 0f       ;  переход к нижней метке
..............

         bra    NZ, 0b       ;  переход к верхней метке
..............

0:      add   W0, W1, W1

Последний раз редактировалось Марк; 19.02.2020 в 12:57.
Марк вне форума   Ответить с цитированием
Старый 19.02.2020, 13:06   #7
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,878
Вес репутации: 3951/114
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как читать данные из памяти программ в PIC24?

Алексей, все задаваемые Вами вопросы отлично изложены в мануале на Ассемблер XC16. Он находится в папке документации папки с самим XC16.
Ну или откройте хелп в МПЛАБ Х. Там тоже есть такой раздел.
Мне не лень Вам ответить, но гораздо быстрее там прочитать про то, о чем Вы даже не догадаетесь спросить...
Марк вне форума   Ответить с цитированием
Старый 20.02.2020, 10:17   #8
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 111
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Как читать данные из памяти программ в PIC24?

По поводу "отлично изложены" не согласен. Описание каждой директивы или синтаксиса ОБЯЗАТЕЛЬНО должно сопровождаться примерами которые показывают ВСЕ варианты применения.
Я за 30 лет писал на разных ASM - 8080A, Z80,x86,PIC, и у меня возникают вопросы. А если бы читал новичек?
Беда в том что эти описания пишут для тех кто "все это знает". Им это описание не нужно. Нужно писать для новичков.
В этом деле нужен комромисс - конечно не нужно загромождать описание массой примеров, поставьте в описании ссылку на другой документ. Но недоговаривать тоже не правильно.
Описание должно исключать ситуацию когда у прочитавшего раздел описания есть сомнения, вариа́нты и вопросы.
Извините за лишнее беспокойство. Разобрался. Спасибо!
alex_zas вне форума   Ответить с цитированием
Старый 20.02.2020, 11:15   #9
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,220
Вес репутации: 4181/92
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Как читать данные из памяти программ в PIC24?

alex_zas
Описание каждой директивы или синтаксиса ОБЯЗАТЕЛЬНО должно сопровождаться примерами которые показывают ВСЕ варианты применения. - добро пожаловать в реальный мир.
besogon вне форума   Ответить с цитированием
Старый 20.02.2020, 11:19   #10
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,878
Вес репутации: 3951/114
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как читать данные из памяти программ в PIC24?

Цитата:
Сообщение от alex_zas Посмотреть сообщение
В этом деле нужен компромисс
Это прежде всего документация, а не учебник.
Технические писатели производителя ПО должны создать НОРМАТИВНЫЙ документ. Примеры в этом мануале имеются, но даже если их нет, любую сущность легко проверить в симуляторе МПЛАБа.
Я обычно так и делаю.
Но если что, обращайтесь. Почти все мои текущие проекты пишутся на АСМе и для 16-битной платформы Микрочипа (dsPIC33F, dsPIC33E, dsPIC33C, PIC24FJ)
Марк вне форума   Ответить с цитированием
Старый 20.02.2020, 11:22   #11
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,878
Вес репутации: 3951/114
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как читать данные из памяти программ в PIC24?

Цитата:
Сообщение от besogon Посмотреть сообщение
добро пожаловать в реальный мир.
АСМистам в этом смысле много проще. Отсутствует слой компилятора со своими "фирменными" странностями. Чем ближе к железу, тем меньше влияют недостатки продукта на конечный результат.
Марк вне форума   Ответить с цитированием
Старый 20.02.2020, 11:31   #12
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,878
Вес репутации: 3951/114
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как читать данные из памяти программ в PIC24?

В догон, чтобы не быть голословным.
Приведу скан из Мануала на Ассемблер-Линкер про локальные метки:

Нажмите на изображение для увеличения
Название: 2020.02.20 11-27-47.jpg
Просмотров: 18
Размер:	335.9 Кб
ID:	11548

Что тут непонятного? Разве приведенный пример недостаточен?

Что непонятно из этой таблицы:

Нажмите на изображение для увеличения
Название: 2020.02.20 11-35-08.jpg
Просмотров: 15
Размер:	474.8 Кб
ID:	11549


Что характерно, НАЧАЛО обсуждаемого мануала содержит пример обращения к строке как раз через psvoffset.

Последний раз редактировалось Марк; 20.02.2020 в 11:38.
Марк вне форума   Ответить с цитированием
Старый 20.02.2020, 13:47   #13
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,220
Вес репутации: 4181/92
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Как читать данные из памяти программ в PIC24?

Марк
АСМистам в этом смысле много проще. Отсутствует слой компилятора со своими "фирменными" странностями. - у меня недавно был интересный случай - писал код для pic32mm и оказалось, что для того чтобы сделать longcall, нужно к адресу функции прибавить единицу, тк. если этого не сделать будет ошибка шины, тк. нижний бит инструкции, на которую преобразовал asm код содержит метод кодирования и asm одну инструкцию-то заменяет другой, а тот факт, что в mm нет ничего кроме micromips никак не учитывает.

иначе говоря у Вас есть код на asm, он транслируется ассемблером так, как будет машине удобно и если этого не учесть, то будет о чем подумать.

И это при том, что в pic32mm архитектура и asm намного проще, чем в pic24.
besogon вне форума   Ответить с цитированием
Старый 20.02.2020, 14:05   #14
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,878
Вес репутации: 3951/114
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как читать данные из памяти программ в PIC24?

Цитата:
Сообщение от besogon Посмотреть сообщение
И это при том, что в pic32mm архитектура и asm намного проще, чем в pic24.
Отличием ПИК-архитектур (и 8, и 16 битных) является стабильная длина инструкций. Практически все инструкции имеют длину в одно слово флеша за исключением нескольких длинных команд в два слова содержащих длинный адрес ветвления, либо пару адресов операндов.
В смысле линейности архитектуры ПИКам нет равных. Это и достоинство и недостаток. Но эффективность исполнения ограничена..
Марк вне форума   Ответить с цитированием
Старый 20.02.2020, 14:07   #15
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,878
Вес репутации: 3951/114
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как читать данные из памяти программ в PIC24?

Цитата:
Сообщение от besogon Посмотреть сообщение
у Вас есть код на asm, он транслируется ассемблером так, как будет машине удобно
Нет, это не так, если говорить об АСМе ПИКов. Трансляция ассемблерного кода происходит "пиксель в пиксель".
Марк вне форума   Ответить с цитированием
Ответ

Метки
pic24, чтение памяти программ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вытащить старший байт из const int? Zenth Продукция MICROCHIP 19 18.12.2008 23:11
Не хочет переключать страницы памяти программ? Torik Продукция MICROCHIP 1 23.09.2008 15:06
страничная организация памяти программ ??? швондер Продукция MICROCHIP 42 18.05.2008 22:15
проблемка с PIC16F628A bereg_ok Продукция MICROCHIP 72 07.09.2007 11:00
Чтение из памяти программ(PIC18Fxxxx) electro_on Продукция MICROCHIP 3 09.06.2007 14:47


Часовой пояс GMT +3, время: 16:48.


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