#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).
Да и (лично) я не пойму - что за любов к макросам. Сколько раза въ исползуете етот макрос в коде? И неужели он повъсить читаемость кода? Не верю!
_________________ Лом - ето город в Болгарии, а не инструмент юстировки електроники.
Нет, этот макрос по сути будет использован лишь 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
Сравните с то что въ предлагаете.
_________________ Лом - ето город в Болгарии, а не инструмент юстировки електроники.
Это немного не то. У Вас простой обработчик нажатия кнопки, вызывает соответствующую процедуру. И судя по всему, это простое одноуровневое меню, которе в зависимости от нажатой кнопки совершает 1 соответсвующее действие. У меня все немного сложнее. Есть 4 кнопки - крестовина, нажимаем любую - вызывается меню (курсор на 1 пункте). Нажимаем вниз-вверх - ходим по меню, наживаем вправо - входим в соответствующее подменю, там тоже гуляем вниз-вверх, еще раз нажимаем вправо и выполняем действие, на котором находиться курсор. Нажимаем влево - выходим в главное меню (курсор на пункте меню из которого только что вышли), еще раз влево - выход из меню. И это все (количество пунктов меню и каждого подменю) настраивается с помощью нескольких констант в заголовочном файле. И я сделал так, что все работает как надо, просто вот вылез интересный глюк препроцессора, который я пока поборол довольно банально, написав следующее: Спойлер
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Ето у меня 2-ой уровень (правда отсюда к первому возврата нет). За етим следуют до 2 уровня - вход и возврат, уменьшение/увеличение, память и т.д. Давно писал не помню уже все ....
Пока_без_кота писал(а):
поборол довольно банально, написав следующее:
Пока_без_кота писал(а):
довольно компактному и читабельному (кол. строчек по вертикали) коду:
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 страниц кода.
Вам виднее. Если вам так нравится - делайте так.
_________________ Лом - ето город в Болгарии, а не инструмент юстировки електроники.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
А зачем писать на АСМе, если Вас волнует читабельность в стиле Си? Поддержу болгарского коллегу на предмет "кому нравится арбуз, а кому свиной хрящик". Человеку пишущему, в том числе, на АСМе нет необходимости громоздить макросные синтаксические конструкции имеющие целью скрыть собственно АСМ аббревиатуры, заменив их на абстракции. К тому же эти абстракции ни разу не сокращают сам листинг. ПишИте подобные меню на Си и будет не только искомая читабельность, но и НАСТОЯЩЕЕ абстрагирование кода с сокращением текста до уровня "беллетристики для дилетанта".
Что "это"? Вы поразительно невнятно выражаетесь... Вместо предложений что либо сделать, изложите свои проблемы конкретно. Я копирую код из референсных исходников и на АСМе и на Си. Что Вы желаете увидеть?
Выражусь по другому. Как вот от этого избавиться кроме ручной очистки. Или как это импортировать (вставить) в МПЛАБ для компиляции. Если ни как, то зачем такие тексты в АНах печатают ?
Затем, чтобы их ЧИТАЛИ. А копипастить если и нужно, то из прилагаемых к аппнотам архивов с референсными кодами. Можно и из аппноты набрать текст РУЧКАМИ - не велик труд. Заодно и разобраться в том, как он работает. К слову, в аппнотах на АСМе больших текстов не бывает. Максимум на три десятка строк. То, что Вы тут показали - это листинг дизасма, то есть и текст и собственно адреса с кодами. Для вставки нужны только команды. Адрес и код удаляется.
Я понимаю что нужно удалить и куда вставить. Не понимаю зачем их в таком виде печатают, если МПЛАБ их не ест. А читать код можно чистый и с коментариями. Цифры для этого не нужны.
Листинги в аппнотах публикуют ПО РАЗНОМУ. Это зависит от АВТОРА аппноты. В отличии от даташитов и мануалов, аппноты являются техническими статьями конкретных авторов, а не нормативными документами. Кто то из этих авторов предпочитает публиковать дизасм, а кто то исходник. Не вижу в этом никаких проблем. К слову, в референсных мануалах неоднократно встречал такое форматирование исходников в пдф, которое при копировании текста требует еще больше усилий, нежели удаление лишнего из дизасма.
Я в непонятках, может, кто по-быстрому подскажет в чем проблема. Захотел скомпилировать код столетней давности. Поставил свеженький 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 в настройках компилятора я выключаю.
_________________ А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения