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

Re: MPLAB X IDE

Вт фев 15, 2022 16:23:49

Но в этом апноте код написан для MPASM. как его прикрутить к XC8, да еще и к проекту, написанному на С? В частности библиотеку умножения 16-битных значений (см. вложение).
Есть инструкции на компилятор https://microchipdeveloper.com/swtools:pic-asm. Но я что-то делаю не так. Постоянно выводит ошибку синтаксиса на макрос. Да и с регистром STATUS не понятно, тоже постоянно строчка висит в ошибке. Хотя библиотека xc.inc подключена.

1. 526-ая аппнота написана на MPASM, а вы пишите на PIC-AS. Это разные ассемблеры. В PIC-AS, насколько мне не изменяет склероз, нет макросов. Такшта придется их вручную инлайнить.
2. Синтаксис при обращении к спецрегистрам и вообще к переменным в PIC-AS требует ограничить адресное поле. Для чего есть директива BANKMASK(имя переменной). Возможно проблема в этом.
А вообще, гадать на кофейной гуще - так себе занятие. Приводите диагностику ошибок из окна Output.

Re: MPLAB X IDE

Вт фев 15, 2022 16:57:32

КРАМ, по поводу п. 1 согласеен. Я в листинге сделал все исправления согласно выше указанным документам на компилятор. Но мог чего-то не дописать. Насчет макроса у них в одном документе по переходу с MPASM на pic-as указано, что нет макросов. А в руководстве на компилятор pic-as есть листинги програм с макросами. Так что тут непонятно до конца.
По п. 2. BANKMASK я пока не знаю как применять. Это надо изучить. Повторюсь, я на ассемблерене писал программ и я с ним плохо дружу. Прошу понять.
Я решил пока попроще поступить. При добавлении в Source Files файла ассемблерного кода, MPLAB X добавляет подсказку. Вот хотелось бы ее разобрать, а не лезть в код, что я пишу.
MPLAB предлагает так:

Вот хотелось бы понять по порядку.
1) что делает psect?
2) в коде объявляется глобальная функция _bar. Как ее теперь определить и вызвать в коде Си?

Re: MPLAB X IDE

Вт фев 15, 2022 17:18:59

1) что делает psect?
2) в коде объявляется глобальная функция _bar. Как ее теперь определить и вызвать в коде Си?

А вы точно открывали мануал на Ассемблер? :)
В папке docs компилятора XC8 имеется два пдф-файла: MPLAB_XC8_PIC_Assembler_User_Guide и MPLAB_XC8_PIC_Assembler_User_Guide_for_Embedded_Engineers. Может стоит сначала их прочитать?
А то мы так с вами тут будет кругами ходить...
Подчеркиваю - мануалы на Ассемблер не содержат списка инструкций контроллера. В них описаны лишь сами правила языка. Инструкции имеются в даташите на контроллер.
Директива BANKMASK() ограничивает адресное поле переменной (регистра ОЗУ) семью разрядами и ее синтаксис выглядит как movwf BANKMASK(var), где var - имя переменной, а по сути ее ПОЛНЫЙ адрес в ОЗУ.

Re: MPLAB X IDE

Ср фев 16, 2022 10:55:07

А вы точно открывали мануал на Ассемблер? :)

Да я не расстроен, что вы сомневаетесь в этом. Конечно открывал (с.38,46). Перевожу потихоньку с помощью гугловского переводчика, ибо языком оригинала не владею совсем. Но главная беда не в этом, а в незнании ассемблера.
Что касается psect, то я действительно не понял эту инструкцию и где ее применять. То ли глобально на весь кусок кода, то ли индивидуально для каждой функции. Эти классы, директивы и тп пока сложно даются. Я вообще не хотел влезать в этот ассемблер, но пришлось окунуться.
Хотя может азарт кончится и я плюну на это дело, как тут советовали, и оставлю только Си. Тем более вчера в дизасме подглядел какую функцию на умножение подтягивает компилятор. А там до безобразия все просто... :facepalm:

Re: MPLAB X IDE

Вт мар 01, 2022 15:00:54

Ничего не надо досылать. Посылается количество бит, которое БОЛЬШЕ, чем требуемое. Лишние просто будут вытолкнуты в приемнике.

А как с этим поступать, если к примеру нужно байт 100 отослать
Изображение
Чипселект постоянно дёргать? :roll:

Re: MPLAB X IDE

Вт мар 01, 2022 16:37:05

Чипселект постоянно дёргать? :roll:

Вообще то да...
А что вас так смущает? Дергание чип селекта - стандартная процедура обмена по SPI. В новых контроллерах Микрочипа (PIC18Q) есть механизм автоматического формирования чип селекта. Но и он требует запуска перед каждой транзакцией. Автоматической является только длительность (не требуется формировать задний фронт).
Удобно использовать для автоматизации Output Compare, если таковой остался свободным.

Re: MPLAB X IDE

Вт мар 01, 2022 16:48:28

А что вас так смущает?

Ну тут как бы "на волне" можно все байты передать одним движением чипселекта, с другой стороны вроде как бы скорость(лишние байты слать не надо),но вопрос спорный, аппаратный SPI быстрее работает.
Пока работает на совтовом по 10 бит, надо будет попробовать на аппаратном или на параллельную шину может посажу, чтоб время не тратить :tea:

Re: MPLAB X IDE

Вт мар 01, 2022 22:16:20

Ну тут как бы "на волне" можно все байты передать одним движением чипселекта, с другой..... аппаратный SPI быстрее работает.

Вы несете оголтелую чушь. Чип селект является синхронизирующим сигналом разделяющим защелкиваемые слова. Если архитектура периферийного устройства с которым осуществляется обмен требует на каждое слово свой строб чип селекта, то никакого иного способа это сделать не существует.
Кроме того, дергание чип селектом элементарно автоматизируется. У меня есть несколько изделий, где обмен по SPI идет на предельном рейте для используемого МК - 15 МГц. Строб чип селекта формируется с помощью Output Compare запускаемый от того же события, что и DMA, через который и выталкиваются данные в устройство.

Re: MPLAB X IDE

Ср мар 02, 2022 08:15:37

Вы несете оголтелую чушь. . . . Если архитектура периферийного устройства с которым осуществляется обмен требует на каждое слово свой строб чип селекта, то никакого иного способа это сделать не существует.

Вот тут я полагаю что вы ошибаетесь, данный чип как раз не требует трогать чипселект в процессе всей передачи, вот ещё пример

Изображение

тут я засылаю килобайт на одном движении чипселекта (W5500).

Re: MPLAB X IDE

Ср мар 02, 2022 09:32:10

тут я засылаю килобайт на одном движении чипселекта (W5500).

И что из этого следует?
Засылайте хоть мегабайт.
Разговор шел лишь о том, что чип селект накрывает СЛОВО обмена. А длина этого слова ни разу не обсуждалась.
Если слово не кратно байту, то засылают слово длинее, чтобы достичь кратности.
И все.
В остальном протокол должен соответствовать даташиту на периферийное устройство.
Что не так?

Re: MPLAB X IDE

Ср мар 02, 2022 11:26:57

Я почему то подумал, что после каждого байта нужно чипселектом махать :)

Re: MPLAB X IDE

Ср мар 02, 2022 12:33:08

Тут зависит от ведомого устройства, нужно ему переключение CS после каждого полученного байта или нет.

Re: MPLAB X IDE

Пт мар 04, 2022 10:10:30

Да собственно весь сырбор вышел из-за того, что нужно слать количество бит не кратное 8 через аппаратный SPI, а он шинковать не особо умеет.
Чипселектом при этом не требуется махать через каждый 1-2 байта, можно выслать все 100 байт на одном движении чипселекта, но опять упираемся в кратность 10 бит.

Re: MPLAB X IDE

Пт мар 04, 2022 17:05:14

опять упираемся в кратность 10 бит.

Где 10 бит - формируйте аппаратный чип селект и передавайте 16 бит. Вы выдумываете проблемы.

Re: MPLAB X IDE

Пт апр 29, 2022 23:32:29

Pro оптимизация, небольшой обзор, взято отсюда.

Провёл некоторый тесты на PIC12F1822 контроллере(конечно не показатель, но всё же).
И на Arduino (этот XC8-AVR).
Вот результаты:

Личный код PIC12F с выключенным xclm2.exe(т.е. без лицензии):
Код:
d:\Programming\_pic\_try_pic12f1822>make
xc8-cc -mcpu=12f1822 -Os main.c
::: advisory: (2051) the current license does not permit the selected optimization level, using optimization level 2
main.c:302:30: warning: implicit conversion changes signedness: 'volatile unsigned char' to 'signed char'
      [-Wsign-conversion]
      Button.clicks = Button.clickCount;
                    ~ ~~~~~~~^~~~~~~~~~
main.c:310:25: warning: implicit conversion changes signedness: 'int' to 'signed char' [-Wsign-conversion]
      Button.clicks = 0 - Button.clickCount;
                    ~ ~~^~~~~~~~~~~~~~~~~~~
2 warnings generated.

Memory Summary:
    Program space        used   3A0h (   928) of   800h words   ( 45.3%)
    Data space           used    33h (    51) of    80h bytes   ( 39.8%)
    EEPROM space         used     0h (     0) of   100h bytes   (  0.0%)
    Configuration bits   used     2h (     2) of     2h words   (100.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)

Removing ...
Done.

d:\Programming\_pic\_try_pic12f1822>


Личный код PIC12F с включенным xclm2.exe(т.е. с лицензией):
Код:
d:\Programming\_pic\_try_pic12f1822>make
xc8-cc -mcpu=12f1822 -Os main.c
main.c:302:30: warning: implicit conversion changes signedness: 'volatile unsigned char' to 'signed char'
      [-Wsign-conversion]
      Button.clicks = Button.clickCount;
                    ~ ~~~~~~~^~~~~~~~~~
main.c:310:25: warning: implicit conversion changes signedness: 'int' to 'signed char' [-Wsign-conversion]
      Button.clicks = 0 - Button.clickCount;
                    ~ ~~^~~~~~~~~~~~~~~~~~~
2 warnings generated.

Memory Summary:
    Program space        used   39Eh (   926) of   800h words   ( 45.2%)
    Data space           used    33h (    51) of    80h bytes   ( 39.8%)
    EEPROM space         used     0h (     0) of   100h bytes   (  0.0%)
    Configuration bits   used     2h (     2) of     2h words   (100.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)

Removing ...
Done.

d:\Programming\_pic\_try_pic12f1822>


В маленькой программе практически нет результата, справедливости ради, необходимо проверять на большом проекте.
Но этот же код в компиляторе SDCC вообще не компилируется т.к. ругается на то, что не помещается в памяти(т.е. оптимизации никакой).

Ладно, проект побольше, из примеров:

Стандарт -O2:
Код:
Memory Summary:
    Program space        used   9DBh (  2523) of  2000h words   ( 30.8%)
    Data space           used    A9h (   169) of   400h bytes   ( 16.5%)
    EEPROM space         None available
    Configuration bits   used     5h (     5) of     5h words   (100.0%)
    ID Location space    used     4h (     4) of     4h bytes   (100.0%)

make[2]: Leaving directory 'C:/Users/Dima/Downloads/pic16f15245-lpc-demo-code-master/pic16f15245-lpc-demo-code.X'
make[1]: Leaving directory 'C:/Users/Dima/Downloads/pic16f15245-lpc-demo-code-master/pic16f15245-lpc-demo-code.X'

BUILD SUCCESSFUL (total time: 12s)


Про фитча -Os:
Код:
Memory Summary:
    Program space        used   8B2h (  2226) of  2000h words   ( 27.2%)
    Data space           used    99h (   153) of   400h bytes   ( 14.9%)
    EEPROM space         None available
    Configuration bits   used     5h (     5) of     5h words   (100.0%)
    ID Location space    used     4h (     4) of     4h bytes   (100.0%)

make[2]: Leaving directory 'C:/Users/Dima/Downloads/pic16f15245-lpc-demo-code-master/pic16f15245-lpc-demo-code.X'
make[1]: Leaving directory 'C:/Users/Dima/Downloads/pic16f15245-lpc-demo-code-master/pic16f15245-lpc-demo-code.X'

BUILD SUCCESSFUL (total time: 12s)


А вот в Arduino 1.8.19 есть достаточно существенный результат, вот скетч.
1. Тест оригинального компилятора, оптимизация и так там стоит -Osplatform.txt стоит "compiler.path={runtime.tools.avr-gcc.path}/bin/"):
Код:
...
"C:\\Arduino\\portable\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-size" -A "C:\\Users\\Dima\\AppData\\Local\\Temp\\arduino_build_613730/ProgramPic.ino.elf"
Скетч использует 12254 байт (39%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 463 байт (22%) динамической памяти, оставляя 1585 байт для локальных переменных. Максимум: 2048 байт.


2. Тест компилятора XC8(на основе avr версии 5.4.0, т.е. старше чем верхний 7.3.0) с выключенным xclm2.exe(т.е. без лицензии)(в platform.txt стоит "compiler.path=C:/xc8/v2.36/avr/bin/"):
Код:
...
C:/xc8/v2.36/avr/bin/avr-size -A "C:\\Users\\Dima\\AppData\\Local\\Temp\\arduino_build_613730/ProgramPic.ino.elf"
Скетч использует 12300 байт (40%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 477 байт (23%) динамической памяти, оставляя 1571 байт для локальных переменных. Максимум: 2048 байт.


3. Тест компилятора XC8(на основе avr версии 5.4.0, т.е. старше чем верхний 7.3.0) с включенным xclm2.exe(т.е. с лицензией)(в platform.txt стоит "compiler.path=C:/xc8/v2.36/avr/bin/"):
Код:
...
C:/xc8/v2.36/avr/bin/avr-size -A "C:\\Users\\Dima\\AppData\\Local\\Temp\\arduino_build_613730/ProgramPic.ino.elf"
Скетч использует 9370 байт (30%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 477 байт (23%) динамической памяти, оставляя 1571 байт для локальных переменных. Максимум: 2048 байт.


Чтобы оно успешно компилировало в среде Arduino, необходимо было скачать версию 5.4.0(avr8-gnu-toolchain-3.6.2.1778-win32.any.x86.zip) и скопировать avr8-gnu-toolchain-win32_x86\avr\include и avr8-gnu-toolchain-win32_x86\avr\lib файлы по пути xc8\v2.36\avr\avr\include и xc8\v2.36\avr\avr\lib соответственно, т.к. в xc8 отсутствует часть библиотек.

Так что это еще смело в тему AVR.

Re: MPLAB X IDE

Сб апр 30, 2022 06:46:11

Ладно, проект побольше

Особенностью конкретно XC8 является то, что НЕ ЗАВИСИМО от наличия РАБОТАЮЩЕЙ PRO-лицензии, среда в лице компилятора ДЕЛАЕТ ВИД, что оптимизация работает.
Однако она в Output прямо заявляет, что:
"C:\Program Files (x86)\Microchip\xc8\v2.10\bin\xc8-cc.exe" -mcpu=18F27Q43 -c -fno-short-double -fno-short-float -memi=wordwrite -Os -fasmfile -Og -flocal -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default -msummary=-psect,-class,+mem,-hex,-file -ginhx032 -Wl,--data-init -mno-keep-startup -mno-download -mno-default-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto:auto -o build/default/production/BLA_BLA_BLA.p1 BLA_BLA_BLA.c
::: advisory: (2051) The current license does not permit the selected optimization level, using optimization level 2

Красным цветом и болдом в цитате выделил я. В реальном тексте все это написано неприметным общим кеглем, шрифтом и цветом.

Re: MPLAB X IDE

Пн май 02, 2022 05:03:58

Уважаемые профи!
Прошу помощи новичку. Как протестировать и пошагово отладить прогу на асме в MPLAB X IDE v5.30? Текст проги компилируется. Устанавливаю BreakPoint на строке листинга. Затем жму Launch Debugger Main Project. После - F7, ..и ничего. Значки тускнеют. Курсор остается там же на BreakPoint. Наверно что-то не так делаю, ибо с английским не особо. Если есть ссылочка на разжеванный материал, было бы здорово!

Re: MPLAB X IDE

Пн май 02, 2022 06:51:11

Как?

Тут есть, в том числе, и про это: viewtopic.php?f=58&t=159905
Однако вы ничего не сказали про:
1. О каком МК идет речь?
2. О каком инструменте дебага идет речь?

Re: MPLAB X IDE

Пн май 02, 2022 11:24:25

Спасибо за отклик! Вернулся к своему давнему увлечению, но явно что-то забыл.
Задача состоит в том, что не прибегая к внешнему железу, только в MPLAB X IDE 5.30 пошагово пройти всю программу, посмотреть содержимое регистров, найти ошибки в коде. Чип "старенький" - PIC16F877A, пробую отладить модульный (перемещаемый) код вывода текста на LCD128x64, работает но коряво. Решил переделать в один файл абсолютным кодом и пошагово пройти, но не получилось. Пользовался видео https://youtu.be/1V78piTf2rE , там все просто и работает. У меня же после нажатия на "Step Into" т.е. F7, переход на следующую строчку не происходит. Кнопки "Step Into", ... становятся серыми и недоступными. Отладка останавливается. Думаю уже переустановить MPLAB...

Добавлено after 56 minutes 6 seconds:
Проблема разрешилась откатом к версии MPLAB X IDE v2.35
Странно, но наверно чистый ASM потихоньку уходит, и посему в новых версиях не все так просто, что бы подергать напрямую 0 и 1.
(Необходимо кучу настроек среды, функций и т.д.).

Re: MPLAB X IDE

Пн май 02, 2022 14:56:00

Странно, но наверно чистый ASM потихоньку уходит, и посему в новых версиях не все так просто, что бы подергать напрямую 0 и 1.
(Необходимо кучу настроек среды, функций и т.д.).

Это чушь. Я предложил вам где посмотреть. Ничего сложного там нет. Версия 5.35 является последней, которая поддерживает ассемблер MPASM (mpasmx). Более поздние версии перешли на другой ассемблер: pic-as. Он имеет несколько другой синтаксис и интегрирован в Си-компилятор, что позволяет писать смешанные проекты, где имеются и Си и Асм файлы.
Запуск симулятора (вы вели речь о нем) ничем не отличается во всех версиях MPLABX.
Ответить