Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Re: MPLAB в вопросах и ответах

Ср фев 01, 2017 06:44:28

MPSM Assembler help писал(а):#v(expr) - Return the integer value of expr. Typically, used to create unique variable names with common prefixes or suffixes. Cannot be used in conditional assembly directives (e.g. ifdef, while).

Особое внимание на ето - Cannot be used in conditional assembly directives (e.g. ifdef, while).

Да и (лично) я не пойму - что за любов к макросам. Сколько раза въ исползуете етот макрос в коде? И неужели он повъсить читаемость кода? Не верю!

Re: MPLAB в вопросах и ответах

Ср фев 01, 2017 08:03:00

Нет, этот макрос по сути будет использован лишь 1 раз. Но все они (макросы) в куче приводят вид обработчика перехода на нужную менюшку/подменюшку к довольно компактному и читабельному (кол. строчек по вертикали) коду:
Спойлер
Код:
   include   MicroMenu.h
;===========================
MicroMenu      code   0x100-3
Main_Menu_Table
   movfw   index_menu
   clrf   PCLATH
   bsf      PCLATH,0
   addwf   PCL
   goto   Zastavka
   goto_Punkt_Menu

Menu_Switch
   movfw   index_menu
   clrf   PCLATH
   bsf      PCLATH,0
   addwf   PCL
   nop
   goto_Menu_Table   
   goto_Menu_Submenu                  ; Супермакрос, создает цепочку макросов, в количестве пунктов меню
;===========================
Num_of_Submenu_Table                  ; Возвращаем количество пунктов в нужном подменю
   movfw   index_menu
   clrf   PCLATH
   bsf      PCLATH,0
   addwf   PCL
   retlw   0
   retlw_num_of_submenu_punkts
;===========================
Action_Switch                        ; Выполним действие, на котором находится курсор
   movfw   index_menu                  ; Берем выбраный пункт меню
   clrf   PCLATH
   bsf      PCLATH,0
   addwf   PCL                        ; Переходим на нужную ветку
   nop
   goto_Menu_Table_action
   goto_Menu_Submenu_action            ; Супермакрос, создает цепочку макросов, в количестве веток выполняемых действий

Re: MPLAB в вопросах и ответах

Ср фев 01, 2017 08:13:49

Пока_без_кота писал(а):лишь 1 раз.

!!!!!!?????
Как я делаю
Код:
main_loop
   call    Fr_Main_Ch      ; въбор режима и ожидание кнопки избор режим на работа и чакане за бутон
   btfsc    Fx_Key
   call    Fx_Work         ; Frequency
   btfsc    FxP_Key
   call    Fx_Work      ; Freq + Preskaler
   btfsc    Cx_Key
   call    Cx_Work         ; Cx Meter
   btfsc    Lx_Key   
   call    Lx_Work         ; Lx Meter
   btfsc    Tx_Key   
   call    Tx_Work         ; Tx Meter
   
   goto   main_loop


Сравните с то что въ предлагаете.

Re: MPLAB в вопросах и ответах

Ср фев 01, 2017 13:53:57

botchin писал(а):...Сравните с то что въ предлагаете.

Это немного не то. У Вас простой обработчик нажатия кнопки, вызывает соответствующую процедуру. И судя по всему, это простое одноуровневое меню, которе в зависимости от нажатой кнопки совершает 1 соответсвующее действие.
У меня все немного сложнее. Есть 4 кнопки - крестовина, нажимаем любую - вызывается меню (курсор на 1 пункте). Нажимаем вниз-вверх - ходим по меню, наживаем вправо - входим в соответствующее подменю, там тоже гуляем вниз-вверх, еще раз нажимаем вправо и выполняем действие, на котором находиться курсор. Нажимаем влево - выходим в главное меню (курсор на пункте меню из которого только что вышли), еще раз влево - выход из меню. И это все (количество пунктов меню и каждого подменю) настраивается с помощью нескольких констант в заголовочном файле. И я сделал так, что все работает как надо, просто вот вылез интересный глюк препроцессора, который я пока поборол довольно банально, написав следующее:
Спойлер
Код:
NUM_OF_SUBMENU_PUNKTS_1      equ      NUM_OF_SUBMENU_1_PUNKTS
NUM_OF_SUBMENU_PUNKTS_2      equ      NUM_OF_SUBMENU_2_PUNKTS
NUM_OF_SUBMENU_PUNKTS_3      equ      NUM_OF_SUBMENU_3_PUNKTS
NUM_OF_SUBMENU_PUNKTS_4      equ      NUM_OF_SUBMENU_4_PUNKTS
NUM_OF_SUBMENU_PUNKTS_5      equ      NUM_OF_SUBMENU_5_PUNKTS
NUM_OF_SUBMENU_PUNKTS_6      equ      NUM_OF_SUBMENU_6_PUNKTS
NUM_OF_SUBMENU_PUNKTS_7      equ      NUM_OF_SUBMENU_7_PUNKTS
NUM_OF_SUBMENU_PUNKTS_8      equ      NUM_OF_SUBMENU_8_PUNKTS

Re: MPLAB в вопросах и ответах

Ср фев 01, 2017 15:13:47

Ето у меня 2-ой уровень (правда отсюда к первому возврата нет). За етим следуют до 2 уровня - вход и возврат, уменьшение/увеличение, память и т.д. Давно писал не помню уже все ....

Пока_без_кота писал(а):поборол довольно банально, написав следующее:

Пока_без_кота писал(а):довольно компактному и читабельному (кол. строчек по вертикали) коду:

У вас сейчась как-то так:
Код:
NUM_OF_SUBMENU_PUNKTS_1      equ      NUM_OF_SUBMENU_1_PUNKTS
NUM_OF_SUBMENU_PUNKTS_2      equ      NUM_OF_SUBMENU_2_PUNKTS
NUM_OF_SUBMENU_PUNKTS_3      equ      NUM_OF_SUBMENU_3_PUNKTS
NUM_OF_SUBMENU_PUNKTS_4      equ      NUM_OF_SUBMENU_4_PUNKTS
NUM_OF_SUBMENU_PUNKTS_5      equ      NUM_OF_SUBMENU_5_PUNKTS
NUM_OF_SUBMENU_PUNKTS_6      equ      NUM_OF_SUBMENU_6_PUNKTS
NUM_OF_SUBMENU_PUNKTS_7      equ      NUM_OF_SUBMENU_7_PUNKTS
NUM_OF_SUBMENU_PUNKTS_8      equ      NUM_OF_SUBMENU_8_PUNKTS

retlw_num_of_submenu_punkts   macro      ; Макрос, автоматически создаст таблицу возвратов количества пунктов в нужном подменю
         local   a=1
            while   a<NUM_OF_MAIN_MENU_PUNKTS+1
               retlw   NUM_OF_SUBMENU_#v(a)_PUNKTS
               a+=1
            endw
         endm

заместо:
Код:
   154    3403     RETLW 0x3                      36:       retlw_num_of_submenu_punkts
   155    3403     RETLW 0x3   ;точка для обработки ...... .....
   156    3403     RETLW 0x3   ; или там что-то еще
   157    3403     RETLW 0x3
   158    3403     RETLW 0x3
   159    3403     RETLW 0x3   ;NUM_OF_SUBMENU_8_PUNKTS
   15A    3403     RETLW 0x3   ;или хотя так
   15B    3403     RETLW 0x3
с соответсвующие коментариев.

Извини, но для меня более приглядно второе представление. Напоминаете моего коллега расспишавнии умножение на 1.2 на 22 страниц кода.

Вам виднее. Если вам так нравится - делайте так.

Re: MPLAB в вопросах и ответах

Сб фев 04, 2017 08:14:59

Пока_без_кота писал(а):Это немного не то.

А зачем писать на АСМе, если Вас волнует читабельность в стиле Си?
Поддержу болгарского коллегу на предмет "кому нравится арбуз, а кому свиной хрящик".
Человеку пишущему, в том числе, на АСМе нет необходимости громоздить макросные синтаксические конструкции имеющие целью скрыть собственно АСМ аббревиатуры, заменив их на абстракции. К тому же эти абстракции ни разу не сокращают сам листинг.
ПишИте подобные меню на Си и будет не только искомая читабельность, но и НАСТОЯЩЕЕ абстрагирование кода с сокращением текста до уровня "беллетристики для дилетанта".

Re: MPLAB в вопросах и ответах

Сб фев 04, 2017 09:07:37

Как импортировать текст из ДШ и ANов в МПЛАБ для компиляции ?

Например:
003F 00152 Freq10Kto50
003F 0070 00153 clrf InputCounthi ;0 --> InputCount
0040 006F 00154 clrf InputCountlo ; /
0041 0C17 00155 movlw B’00010111’ ;start TMR0 with internal
0042 0002 00156 option ; clk. = 1uS
0043 0C0F 00157 movlw B’00001111’ ;set RA0 as a input
0044 0005 00158 tris PORTA ; /
0045 0705 00159 btfss _ra0 ;see if level low
0046 0A49 00160 goto FirstHigh ;yes then check leading edge

Re: MPLAB в вопросах и ответах

Вс фев 05, 2017 08:04:52

otest писал(а):Как импортировать текст из ДШ и ANов в МПЛАБ для компиляции ?...

Так почти всегда, к AN прилагаются файлы с исходниками.

Re: MPLAB в вопросах и ответах

Вс фев 05, 2017 08:58:10

Ну и как их скормить MPLAB ???

Re: MPLAB в вопросах и ответах

Вс фев 05, 2017 09:06:44

Так же, как и свои, создав проект и включив в этот проект файлы с исходниками примеров, либо просто скопипастить из этих файлов фрагменты кода.

Re: MPLAB в вопросах и ответах

Вс фев 05, 2017 11:22:17

КРАМ
Попробуй это сделать и выложи скрин.

Re: MPLAB в вопросах и ответах

Вс фев 05, 2017 11:31:03

Как вариант - вначале скопируйте текст в MS Word и отредактируйте.
Выделение вертикальных блоков - нажатый Alt + "левая кнопка мыши".

Re: MPLAB в вопросах и ответах

Вс фев 05, 2017 11:36:00

otest писал(а):КРАМ
Попробуй это сделать и выложи скрин.

Что "это"?
Вы поразительно невнятно выражаетесь...
Вместо предложений что либо сделать, изложите свои проблемы конкретно.
Я копирую код из референсных исходников и на АСМе и на Си. Что Вы желаете увидеть?
:dont_know:

Re: MPLAB в вопросах и ответах

Вс фев 05, 2017 13:06:18

Выражусь по другому.
Как вот от этого избавиться кроме ручной очистки.
Или как это импортировать (вставить) в МПЛАБ для компиляции.
Если ни как, то зачем такие тексты в АНах печатают ?

Re: MPLAB в вопросах и ответах

Вс фев 05, 2017 13:59:13

Уже ответили выше - как вариант, вставить в Word и с зажатым Alt удалить ненужное.

Re: MPLAB в вопросах и ответах

Вс фев 05, 2017 15:56:46

otest писал(а):зачем такие тексты в АНах печатают ?

Затем, чтобы их ЧИТАЛИ. А копипастить если и нужно, то из прилагаемых к аппнотам архивов с референсными кодами.
Можно и из аппноты набрать текст РУЧКАМИ - не велик труд. Заодно и разобраться в том, как он работает.
К слову, в аппнотах на АСМе больших текстов не бывает. Максимум на три десятка строк.
То, что Вы тут показали - это листинг дизасма, то есть и текст и собственно адреса с кодами.
Для вставки нужны только команды. Адрес и код удаляется.

Re: MPLAB в вопросах и ответах

Вс фев 05, 2017 16:09:15

Я понимаю что нужно удалить и куда вставить. Не понимаю зачем их в таком виде печатают, если МПЛАБ их не ест.
А читать код можно чистый и с коментариями. Цифры для этого не нужны.

Re: MPLAB в вопросах и ответах

Вс фев 05, 2017 16:16:24

Листинги в аппнотах публикуют ПО РАЗНОМУ. Это зависит от АВТОРА аппноты. В отличии от даташитов и мануалов, аппноты являются техническими статьями конкретных авторов, а не нормативными документами.
Кто то из этих авторов предпочитает публиковать дизасм, а кто то исходник. Не вижу в этом никаких проблем.
К слову, в референсных мануалах неоднократно встречал такое форматирование исходников в пдф, которое при копировании текста требует еще больше усилий, нежели удаление лишнего из дизасма.

Re: MPLAB в вопросах и ответах

Вт мар 14, 2017 12:32:54

Я в непонятках, может, кто по-быстрому подскажет в чем проблема. Захотел скомпилировать код столетней давности. Поставил свеженький MPLAB X и пытаюсь... Вот компилятору не понравилась такая конструкция, которую я ранее под gpasm-ом использовал, как предохранитель если таблица переползёт границу страницы:
Код:
statesel:
   goto   init_td
   goto   startconvert
   goto   waitconvert
   goto   read_td
   goto   relax   
   goto   relax   
   goto   tnext   
   goto   t_error
   IF HIGH(statesel)-HIGH($-1)                 ; <-- ошибка в этой строке.
   ERROR   "Table statesel over page edge"
   ENDIF


Ранее, оно работало правильно, а теперь мплаб выдаёт такое сообщение об ошибке:
Код:
Error[151]   C:\USERS\....\NEWPIC_8B_GENERAL.ASM 273 : Operand contains unresolvable labels or is too complex
case sensitivity в настройках компилятора я выключаю.

Re: MPLAB в вопросах и ответах

Вт мар 14, 2017 15:53:35

Укороти путь и имя.
Ответить