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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 17.02.2020, 23:44   #1
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 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
Сообщений: 3,092
Вес репутации: 4015/117
Марк 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
Сообщений: 115
Вес репутации: 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
Сообщений: 3,092
Вес репутации: 4015/117
Марк 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
Сообщений: 115
Вес репутации: 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
Сообщений: 3,092
Вес репутации: 4015/117
Марк 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.
Марк вне форума   Ответить с цитированием
Ответ

Метки
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, время: 04:11.


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