Так я ничего и не резервирую. Я инициализиркю указатель на адрес регистра. В старом лабе он сразу виден в окне регистров под именем которое я ему дал. В новом лабе так не происходит. Так как за это отвечает препроцессор, клпать надо в заголовочных файлах. Непосредственно из кода define и equ результата не даёт.
Так я ничего и не резервирую. Я инициализиркю указатель на адрес регистра.
Вы ничего не инициализируете. Вы просто присваиваете имя константе. Поэтому ассемблер и среда не считают эти имена ни памятью, ни переменными. И не надо фантазировать. Нужно просто открыть мануал на ассемблер и прочесть в нем как резервируется память. Резервируется она ТОЛЬКО В ПЕРЕМЕЩАЕМОМ РЕЖИМЕ директивой ассемблера udata. Синтаксис выглядит так:
Код:
com_var udata 0x20 currPeltier res 2 setTemp res 2 tempRad res 2 tempPeltier res 2 tempBox res 2 startTimer res 1
udata_shr flags res 1 ;---------- data_ready equ 0 two_sec_req equ 1 first_time equ 2 alarm_req equ 3 ;---------- muxADC res 1 muxDataADC res 1
Этот пример из реального проекта. com_var udata 0x20 содержит имя секции неинициализированных данных com_var (выбирается произвольно) и начальный адрес 0х20. udata_shr является директивой выделения общего для всех банков сегмента памяти. директива res резервирует количество байт указанных после нее. res 1 - один байт. tempBox res 2 резервирует 2 байта. Обращение к ним в коде будет как tempBox и tempBox+1
И я не нашёл в ассемблере операнда или дерективы res Так же нет такой дерективы udata Мы вобще про какой ассемблер ведём речь? Я про pic-as Я создаю прямой указатель на регистр данных COUNT EQU 0x10h Далее использую этот COUNT как указатель в коде в место адреса, стандартный приём, во всех даташитах он как пример используется. Всё прекрасно работает и в старом мплабе и новом. В новом я естественно делаю этот указатель в нужном псекте. PSECT udata,reloc = 10h,abs,ovrld COUNT EQU 0x10h Всё прекрасно работает, но метка на адрес не отображается в окне файловых регистров. Вот и всё, просто неудобно.
Добавлено after 33 minutes 24 seconds: Спасибо ответившим котам. В старом и новом мплабе ассемблеры немного разные. Там много отличий как раз по выделению памяти. Скорее всего я не правильно работаю с памятью. Пойду перечитввать весь мануал подробно.
Я про pic-as Я создаю прямой указатель на регистр данных COUNT EQU 0x10h Далее использую этот COUNT как указатель в коде в место адреса, стандартный приём, во всех даташитах он как пример используется. Всё прекрасно работает и в старом мплабе и новом.
Тююю..., милейший! Да вы оригинал. Причем тут старый/новый MPLAB? Какие вы называете старым или новым? Под "старым" MPLAB называют СРЕДУ РАЗРАБОТКИ (MPLAB IDE) версии 8.92 и ниже. А под "новым" - версию X (MPLABX IDE). Вы же пытаетесь говорить об АССЕМБЛЕРЕ. Ассемблер не имеет отношения к среде разработки. У Микрочипа для 8-битных МК семейства PIC есть ДВА ассемблера: mpasm (mpasmx) и pic-as. Последней версией СРЕДЫ содержащей в своем пакете установки mpasmx была MPLABX IDE ver. 5.35. Версии 5.45 и последняя 5.50 уже не имеют старого ассемблера mpasm (mpasmx) - Микрочип перестал его поддерживать. Вместо него надлежит использовать pic-as, который является ЧАСТЬЮ С-компилятора XC8 и входит в его пакет установки. Синтаксис этих ассемблеров радикально отличается. В pic-as переменные резервируются в секции udata, но синтаксис выделения памяти выглядит так:
Код:
name_var: DS 1
DS - директива ассемблера выделяющая байты ОЗУ (Reserves storage). В мануале обозначена в таблице директив. Однако непонятно зачем вам этот геморрой? С какой целью вы перешли на версии среды не поддерживающие mpasmx? У вас применяются какие то суперновые чипы? Но даже если вы это сделали осмысленно, нужно отдавать себе отчет в том, что в сложившейся ситуации нет никакого смысла объявлять переменные в асм-файле. Проще это сделать в Си, а код можно писать на АСМе. У вас будет смешанный проект.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
В pic-as переменные резервируются в секции udata, но синтаксис выделения памяти выглядит так:
Код:
name_var: DS 1
DS - директива ассемблера выделяющая байты ОЗУ (Reserves storage). В мануале обозначена в таблице директив. Однако непонятно зачем вам этот геморрой? С какой целью вы перешли на версии среды не поддерживающие mpasmx? У вас применяются какие то суперновые чипы? Но даже если вы это сделали осмысленно, нужно отдавать себе отчет в том, что в сложившейся ситуации нет никакого смысла объявлять переменные в асм-файле. Проще это сделать в Си, а код можно писать на АСМе. У вас будет смешанный проект.
Перешёл потому что старый на линуксе не работает.
Пробоовал и DB и DS и DABS Не получается.
Мне для отладки нужно видеть что пишется в регистры, а когда они безымянные то сложно визуально выделать нужный. Когда их будет десяток, это будет просто ад. В старом мплабе, который с ассемблером mpasm эти метки появлялись автоматически после запуска дебагера. А в новом теперь такого нет. Вот скрин
Последний раз редактировалось andrey13 Пт дек 17, 2021 14:26:41, всего редактировалось 2 раз(а).
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Я так понимаю, эта специфичная строчка как раз из этого самого нового pic-as. Что она означает и где-нибудь вообще есть полноценный документ по этому асму (вроде известного mpasm.pdf) ?
Я так понимаю, эта специфичная строчка как раз из этого самого нового pic-as. Что она означает и где-нибудь вообще есть полноценный документ по этому асму (вроде известного mpasm.pdf) ?
Не знал, надо попробовать. Тем не менее, теперь придётся жить с новым ассемблером, и всё равно переходить на новую среду. Тем более новый ассемблер хорош, мне нравится их фишка с псектами.
У меня один и тот же код в обоих средах. И вот такое мальенькое неудобство в новой среде.
.... Тем не менее, теперь придётся жить с новым ассемблером, и всё равно переходить на новую среду ......
Придётся? Это ещё кто так сказал? Должны быть какие-то веские причины.
Если, например, говорить конкретней - вот, скажем, сижу я на 8.92 и пишу под 18f46k22... Вопрос: есть хоть один весомый аргумент, чтобы переехать на pic-as? Как именно он упростит мне задачу, сократит время.....?
Не, я отказался в новых 8-битных чипах от чистого асма. Либо Си, либо смешанный код. А старые чипы, где написано на mpasmx, я поддерживаю на версии 5.35.
Дело в том что вы уже крутые коты и давно сидите на микроконтррллерах, у вас уже всё устоялось, вы познали дзен. Я только второй месяц как начал их изучать, а если ты новичёк то зачем разрываться на несколько сред. Если ты с нуля, то лучше взять самую свежую среду, она поддерживает все контроллеры от самых старых до самых новых. И ассемблер тоже без разницы какой изучать, если нулевой уровень, логично изучить тот который в самой свежей среде, он же скорее всего и будет основным на долгое время.
У меня было так, мне отдали ноубук где стоит какая то предыдущая версия лаба, где mpasm ассемблер. Я что то там пытался делать. Ноутбук попросили вернуть. Я пытался на домашнем компе под вайном в линуксе запустить такую же как на ноутбуке, у меня что то не получилось (я думал что мплаб только под винду). Я зашёл на сайт микрочипа и скачал последний лаб на линукс. Установил и теперь на нём.
В принципе всё устаривает, нет меток в эмуляторе, ну и ладнно, не смертельно, буду смотреть регистры данных по их адресам, делов то.
asm вставки? А допустим, если наоборот, - в основе асм, но некоторые функции делать на си, компилировать и уже полученный фрагмент вставлять. Такое вообще практикуется, или это плохая идея?
Но тут у меня 5.35, давно не обновлялся. Всё в одной папке - "C:\Program Files (x86)\Microchip". Трудно здесь что-то напутать. Дома тоже самое. Вроде бы
Так о том и речь, что 5.35 содержит MPASM, а 5.45 уже НЕ содержит. И, начиная с версии 5.45, все инструменты Микрочипа попадают в папку Program Files, а не Program Files (x86).
В принципе всё устаривает, нет меток в эмуляторе, ну и ладнно, не смертельно, буду смотреть регистры данных по их адресам, делов то.
Есть такое обоснованное мнение, что вы не определили свои переменные как ГЛОБАЛЬНЫЕ. Добавьте сверху директиву global var1, var2, var3 , заменив имена переменных на свои и жизнь у вас наладится...
Что-то я не пойму. Заглянул сейчас в папку с установленным MPLAB X, а там есть папочка MPASM Suite. Всё есть, всё устанавливается....
Вы вот этой своей формулировкой ввели в заблуждение. Я тогда решил, что у вас в папке mplabx папка mpasm suite. А ныне фотки взглянул, а оказывается всё как обычно....... я бы вам сразу тогда написал, что папку mpasm suite создал 8-й mplab, к иксу она не имеет отношения (у него там своя есть mpasmx)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения