MPLAB X IDE

Поклонники продукции Microchip Technology Inc тусуются тут.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25154
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: MPLAB X IDE

Сообщение КРАМ »

[uquote="serg_svd",url="/forum/viewtopic.php?p=4181469#p4181469"]Но в этом апноте код написан для MPASM. как его прикрутить к XC8, да еще и к проекту, написанному на С? В частности библиотеку умножения 16-битных значений (см. вложение).
Есть инструкции на компилятор https://microchipdeveloper.com/swtools:pic-asm. Но я что-то делаю не так. Постоянно выводит ошибку синтаксиса на макрос. Да и с регистром STATUS не понятно, тоже постоянно строчка висит в ошибке. Хотя библиотека xc.inc подключена.[/uquote]
1. 526-ая аппнота написана на MPASM, а вы пишите на PIC-AS. Это разные ассемблеры. В PIC-AS, насколько мне не изменяет склероз, нет макросов. Такшта придется их вручную инлайнить.
2. Синтаксис при обращении к спецрегистрам и вообще к переменным в PIC-AS требует ограничить адресное поле. Для чего есть директива BANKMASK(имя переменной). Возможно проблема в этом.
А вообще, гадать на кофейной гуще - так себе занятие. Приводите диагностику ошибок из окна Output.
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: MPLAB X IDE

Сообщение serg_svd »

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

Код: Выделить всё

#include <xc.inc>

; When assembly code is placed in a psect, it can be manipulated as a
; whole by the linker and placed in memory.  
;
; In this example, barfunc is the program section (psect) name, 'local' means
; that the section will not be combined with other sections even if they have
; the same name.  class=CODE means the barfunc must go in the CODE container.
; PIC18's should have a delta (addressible unit size) of 1 (default) since they
; are byte addressible.  PIC10/12/16's have a delta of 2 since they are word
; addressible.  PIC18's should have a reloc (alignment) flag of 2 for any
; psect which contains executable code.  PIC10/12/16's can use the default
; reloc value of 1.  Use one of the psects below for the device you use:

psect   barfunc,local,class=CODE,delta=2 ; PIC10/12/16
; psect   barfunc,local,class=CODE,reloc=2 ; PIC18

global _bar ; extern of bar function goes in the C source file
_bar:
    movf PORTA,w    ; here we use a symbol defined via xc.inc
    return
Вот хотелось бы понять по порядку.
1) что делает psect?
2) в коде объявляется глобальная функция _bar. Как ее теперь определить и вызвать в коде Си?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25154
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: MPLAB X IDE

Сообщение КРАМ »

[uquote="serg_svd",url="/forum/viewtopic.php?p=4181648#p4181648"]1) что делает psect?
2) в коде объявляется глобальная функция _bar. Как ее теперь определить и вызвать в коде Си?[/uquote]
А вы точно открывали мануал на Ассемблер? :)
В папке docs компилятора XC8 имеется два пдф-файла: MPLAB_XC8_PIC_Assembler_User_Guide и MPLAB_XC8_PIC_Assembler_User_Guide_for_Embedded_Engineers. Может стоит сначала их прочитать?
А то мы так с вами тут будет кругами ходить...
Подчеркиваю - мануалы на Ассемблер не содержат списка инструкций контроллера. В них описаны лишь сами правила языка. Инструкции имеются в даташите на контроллер.
Директива BANKMASK() ограничивает адресное поле переменной (регистра ОЗУ) семью разрядами и ее синтаксис выглядит как movwf BANKMASK(var), где var - имя переменной, а по сути ее ПОЛНЫЙ адрес в ОЗУ.
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: MPLAB X IDE

Сообщение serg_svd »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4181667#p4181667"]А вы точно открывали мануал на Ассемблер? :)[/uquote]
Да я не расстроен, что вы сомневаетесь в этом. Конечно открывал (с.38,46). Перевожу потихоньку с помощью гугловского переводчика, ибо языком оригинала не владею совсем. Но главная беда не в этом, а в незнании ассемблера.
Что касается psect, то я действительно не понял эту инструкцию и где ее применять. То ли глобально на весь кусок кода, то ли индивидуально для каждой функции. Эти классы, директивы и тп пока сложно даются. Я вообще не хотел влезать в этот ассемблер, но пришлось окунуться.
Хотя может азарт кончится и я плюну на это дело, как тут советовали, и оставлю только Си. Тем более вчера в дизасме подглядел какую функцию на умножение подтягивает компилятор. А там до безобразия все просто... :facepalm:
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: MPLAB X IDE

Сообщение alex_ »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4169752#p4169752"]Ничего не надо досылать. Посылается количество бит, которое БОЛЬШЕ, чем требуемое. Лишние просто будут вытолкнуты в приемнике.[/uquote]
А как с этим поступать, если к примеру нужно байт 100 отослать
Изображение
Чипселект постоянно дёргать? :roll:
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25154
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: MPLAB X IDE

Сообщение КРАМ »

[uquote="alex_",url="/forum/viewtopic.php?p=4191726#p4191726"]Чипселект постоянно дёргать? :roll:[/uquote]
Вообще то да...
А что вас так смущает? Дергание чип селекта - стандартная процедура обмена по SPI. В новых контроллерах Микрочипа (PIC18Q) есть механизм автоматического формирования чип селекта. Но и он требует запуска перед каждой транзакцией. Автоматической является только длительность (не требуется формировать задний фронт).
Удобно использовать для автоматизации Output Compare, если таковой остался свободным.
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: MPLAB X IDE

Сообщение alex_ »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4191814#p4191814"]А что вас так смущает?[/uquote]
Ну тут как бы "на волне" можно все байты передать одним движением чипселекта, с другой стороны вроде как бы скорость(лишние байты слать не надо),но вопрос спорный, аппаратный SPI быстрее работает.
Пока работает на совтовом по 10 бит, надо будет попробовать на аппаратном или на параллельную шину может посажу, чтоб время не тратить :tea:
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25154
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: MPLAB X IDE

Сообщение КРАМ »

[uquote="alex_",url="/forum/viewtopic.php?p=4191828#p4191828"]Ну тут как бы "на волне" можно все байты передать одним движением чипселекта, с другой..... аппаратный SPI быстрее работает.[/uquote]
Вы несете оголтелую чушь. Чип селект является синхронизирующим сигналом разделяющим защелкиваемые слова. Если архитектура периферийного устройства с которым осуществляется обмен требует на каждое слово свой строб чип селекта, то никакого иного способа это сделать не существует.
Кроме того, дергание чип селектом элементарно автоматизируется. У меня есть несколько изделий, где обмен по SPI идет на предельном рейте для используемого МК - 15 МГц. Строб чип селекта формируется с помощью Output Compare запускаемый от того же события, что и DMA, через который и выталкиваются данные в устройство.
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: MPLAB X IDE

Сообщение alex_ »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4192022#p4192022"]Вы несете оголтелую чушь. . . . Если архитектура периферийного устройства с которым осуществляется обмен требует на каждое слово свой строб чип селекта, то никакого иного способа это сделать не существует.[/uquote]
Вот тут я полагаю что вы ошибаетесь, данный чип как раз не требует трогать чипселект в процессе всей передачи, вот ещё пример

Изображение

тут я засылаю килобайт на одном движении чипселекта (W5500).
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25154
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: MPLAB X IDE

Сообщение КРАМ »

[uquote="alex_",url="/forum/viewtopic.php?p=4192127#p4192127"]тут я засылаю килобайт на одном движении чипселекта (W5500).[/uquote]
И что из этого следует?
Засылайте хоть мегабайт.
Разговор шел лишь о том, что чип селект накрывает СЛОВО обмена. А длина этого слова ни разу не обсуждалась.
Если слово не кратно байту, то засылают слово длинее, чтобы достичь кратности.
И все.
В остальном протокол должен соответствовать даташиту на периферийное устройство.
Что не так?
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: MPLAB X IDE

Сообщение alex_ »

Я почему то подумал, что после каждого байта нужно чипселектом махать :)
Аватара пользователя
Asmodey
Друг Кота
Сообщения: 6164
Зарегистрирован: Сб янв 28, 2006 22:47:24

Re: MPLAB X IDE

Сообщение Asmodey »

Тут зависит от ведомого устройства, нужно ему переключение CS после каждого полученного байта или нет.
Астролябия-сама меряет, было бы что мерять!!!
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: MPLAB X IDE

Сообщение alex_ »

Да собственно весь сырбор вышел из-за того, что нужно слать количество бит не кратное 8 через аппаратный SPI, а он шинковать не особо умеет.
Чипселектом при этом не требуется махать через каждый 1-2 байта, можно выслать все 100 байт на одном движении чипселекта, но опять упираемся в кратность 10 бит.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25154
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: MPLAB X IDE

Сообщение КРАМ »

[uquote="alex_",url="/forum/viewtopic.php?p=4193299#p4193299"]опять упираемся в кратность 10 бит.[/uquote]
Где 10 бит - формируйте аппаратный чип селект и передавайте 16 бит. Вы выдумываете проблемы.
Deoptim
Грызет канифоль
Сообщения: 286
Зарегистрирован: Пт дек 30, 2016 18:05:50
Откуда: Украина.

Re: MPLAB X IDE

Сообщение Deoptim »

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.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25154
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: MPLAB X IDE

Сообщение КРАМ »

[uquote="Deoptim",url="/forum/viewtopic.php?p=4224234#p4224234"]Ладно, проект побольше[/uquote]
Особенностью конкретно 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
Красным цветом и болдом в цитате выделил я. В реальном тексте все это написано неприметным общим кеглем, шрифтом и цветом.
veresk132
Родился
Сообщения: 3
Зарегистрирован: Пн май 02, 2022 04:12:13

Re: MPLAB X IDE

Сообщение veresk132 »

Уважаемые профи!
Прошу помощи новичку. Как протестировать и пошагово отладить прогу на асме в MPLAB X IDE v5.30? Текст проги компилируется. Устанавливаю BreakPoint на строке листинга. Затем жму Launch Debugger Main Project. После - F7, ..и ничего. Значки тускнеют. Курсор остается там же на BreakPoint. Наверно что-то не так делаю, ибо с английским не особо. Если есть ссылочка на разжеванный материал, было бы здорово!
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25154
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: MPLAB X IDE

Сообщение КРАМ »

[uquote="veresk132",url="/forum/viewtopic.php?p=4225355#p4225355"]Как?[/uquote]
Тут есть, в том числе, и про это: https://radiokot.ru/forum/viewtopic.php?f=58&t=159905
Однако вы ничего не сказали про:
1. О каком МК идет речь?
2. О каком инструменте дебага идет речь?
veresk132
Родился
Сообщения: 3
Зарегистрирован: Пн май 02, 2022 04:12:13

Re: MPLAB X IDE

Сообщение veresk132 »

Спасибо за отклик! Вернулся к своему давнему увлечению, но явно что-то забыл.
Задача состоит в том, что не прибегая к внешнему железу, только в 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.
(Необходимо кучу настроек среды, функций и т.д.).
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25154
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: MPLAB X IDE

Сообщение КРАМ »

[uquote="veresk132",url="/forum/viewtopic.php?p=4225398#p4225398"]Странно, но наверно чистый ASM потихоньку уходит, и посему в новых версиях не все так просто, что бы подергать напрямую 0 и 1.
(Необходимо кучу настроек среды, функций и т.д.).[/uquote]
Это чушь. Я предложил вам где посмотреть. Ничего сложного там нет. Версия 5.35 является последней, которая поддерживает ассемблер MPASM (mpasmx). Более поздние версии перешли на другой ассемблер: pic-as. Он имеет несколько другой синтаксис и интегрирован в Си-компилятор, что позволяет писать смешанные проекты, где имеются и Си и Асм файлы.
Запуск симулятора (вы вели речь о нем) ничем не отличается во всех версиях MPLABX.
Ответить

Вернуться в «PIC»