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

Re: MPLAB X IDE

Чт сен 01, 2022 20:52:40

Есть глобальные переменные которые находятся в файле Global.h
Всё объявлено через #ifndef, чтобы было подключено только 1 раз, чтобы файлы имели доступ к объявленным переменным. Почти в каждом .c файле идёт подключение к файлу Global.h, в компиляторе XC32v2.5 всё работало отлично

Вообще то НЕ ДОЛЖНО было работать.
Какое отношение #ifndef имеет к ПЕРЕМЕННЫМ? Это условие К ДЕФАЙНАМ, а не к переменным.
Я канешна не великий знаток Си, но правила требуют объявления внешних к файлу глобальных переменных через extern. И никаких других способов я не знаю.
А так да, я тоже сделал аналогичный финт на XC8 года два назад (версия вроде бы 2.01), но когда решил повторить это в Кейле для АРМов, то был немедленно послан матом эррором.
ЗЫ. К вопросу о целесообразности заявленного.
Проблема с глобальными переменными лишь говорит о том, что код написан ..... (вставьте сами, чтобы не обижаться).
Глобальных переменных много быть не должно. А остальным не в падлу и extern приклеить. :)))

Re: MPLAB X IDE

Пт сен 02, 2022 13:02:29

Deoptim писал(а):alex_, <xc.h> подключали?

Ага, иначе бы и в версии 2,5 не заработало. С этим косяком я уже разобрался, больше не забываю подключить xc :)))
КРАМ, всё же компиляторы микроси и XC очень отличаются, по началу я даже офигевал от того как он это делает, а именно XC каждый файл .с он обрабатывает отдельно а потом склеивает всё вместе. Микроси же все инклуды подключает в общую кучу получая один файл и его разом компилирует за одно и оптимизирует. За счёт этого не надо каждый раз инклудить <xc.h> в каждом .с файле, и в экстернах смысл пропадает постольку компилятор в итоге видит только один склеенный файл main.c в котором все переменные и все функции проекта.

Re: MPLAB X IDE

Пт сен 02, 2022 13:10:11

в экстернах смысл пропадает постольку компилятор в итоге

Не нужно собственную частную целесообразность распространять на стандарт языка.
Не все что удобно будет безопасно. Объявление переменных - это выделение памяти, а определение литералов и собственных типов - это просто инструкции препроцессора. Поэтому в этих РАЗНЫХ процессах действуют РАЗНЫЕ правила.
И если Микрочип решил причесать вольности в компиляторе, то это их право и святая обязанность. Иначе переносимости не добъешься.

Re: MPLAB X IDE

Пт сен 02, 2022 14:24:49

Я абсолютно не спорю с Микрочипом, я про то, что насколько сильно микроси отклонились от языка, такое чувство (при переносе кода), как будто с китайского на татарский переводишь. Хотя не спорю, микроси удобнее и старт быстрее.
Не все что удобно будет безопасно.
Поэтому и слажу с него, глюки оптимизатора задолбали настолько, что готов все свои проекты перенести на МПЛаб.
А кстати насколько язык c позволяет партировать код из MPLAB в среду CubeIDE, что планируется в ближайшем будущем.

Re: MPLAB X IDE

Пт сен 02, 2022 14:29:47

из MPLAB в среду CubeIDE

Я не пользуюсь средой STM-а. Предпочитаю Keil. В Keil переносится на ура. Но нужно понимать, что переносится только аппаратно независимый код. То есть инициализацию, драйверы и обработчики прерываний нужно писать заново.

Re: MPLAB X IDE

Пт сен 02, 2022 15:20:43

То есть инициализацию, драйверы и обработчики прерываний нужно писать заново.

Это да, знаем, проходили :)
mikroC for PIC32 -> mikroC for ARM

Re: MPLAB X IDE

Пн сен 26, 2022 14:23:17

Ботлоадером никто из гармонии случайно не пользовался? Я проект создал, залил, а где программу взять которая бы взаимодействовала с этим загрузчиком или она где то в самой среде MPLAB'a. Нашёл на просторах интернета пакет с программой PIC32UBL.exe (AN1388_Source_Code_2014_02_14), но это старьё уже не работает :facepalm:

Re: MPLAB X IDE

Вт сен 27, 2022 15:47:50

Ещё один момент выяснил дойдя до bootloader'a, настройки я храню за пределами основной прошивки, чтобы при перезаписи настроек не потереть прошивку, делал это вот так
Код:
const unsigned char __attribute__((address(0x1D020000))) ConstTST []= {1,2,3,4,5,6,7,8,9,0};

Когда я открыл файл прошивки то несколько приофигел, если я использую одну константу компилятор ещё переваривает, если 2 константы с разными адресами, то тупо делит прошивку и часть ее располагает между этими константами, где по идее ничего лишнего быть не должно :kill:
---
Основная прошивка должна лежать по адресу 0x1D000000-0x1D011000, после деления получаем 0x1D000000-0x1D00ECD0 и 0x1D020000-0x1D022010, константы располагаются по адресам 0x1D020000, 0x1D021000, 0x1D022000, и как раз оказываются в прошивке. А в диапазоне: 0x1D00ECD0 - 0x1D020000 одни FF :facepalm:

Re: MPLAB X IDE

Ср сен 28, 2022 00:13:03

alex_ писал(а):то тупо делит прошивку и часть ее располагает между этими константами, где по идее ничего лишнего быть не должно
Кто ж такое Вам сказал, что не должно ?
Вы зарезервировали для своих нужд эти адреса ? Скорее всего - нет. А компилятору пофиг, свободно - он забрал :))

Re: MPLAB X IDE

Ср сен 28, 2022 08:58:19

Спасибо за наводку, поскольку среда для меня новая, ещё не во всём разобрался.
Зарезервировал память строкой: -mreserve=prog@0x1D020000:0x1D023000, но теперь константы туда положить не могу :facepalm:

Re: MPLAB X IDE

Ср сен 28, 2022 19:54:01

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

Re: MPLAB X IDE

Пт окт 28, 2022 14:46:10

Добрый день!
Подскажите, как передать extern char * _Lidata; из main.c в *.s?

Пробую использовать даташит, поэтому не заморачиваюсь с именами переменных. Проц в макете 877А


#include "main.h"
#include <xc.h>
//==============
unsigned int volt;
float inp_volt;
float akb_volt;
float out_volt;
unsigned char inp;
unsigned char akb;
unsigned char out;
unsigned char log, low_akb;
unsigned char uart;
unsigned char temp;
#define Baud_rate 9600
volatile unsigned char temp2;
extern char * _Lidata;

void barfunc();

void UART_Initialize()
{
TRISC=0X00;




Программа на асм:

#include <xc.inc>

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

global _ds19 ; extern of bar function goes in the C source file
_ds19:

movwf PORTA

; movf PORTA,w ; here we use a symbol defined via xc.inc


return

Re: MPLAB X IDE

Сб окт 29, 2022 21:16:50

Добрый день.
Подскажите, при написании программы на ассемблере, используются большие или маленькие буквы? Я повторил пример из самоучителя, там было написано большими буквами, у меня повылазили ошибки при компиляции. Видел, что многие используют маленькие буквы. Размер букв имеет значение в ассемблере или нет?

Re: MPLAB X IDE

Сб окт 29, 2022 22:10:19

Для написания резервированного синтаксиса ассемблера не имеет. Для остального кода зависит от настроек среды, но по дефолту имеет значение. То есть имена регистров и своих переменных чувствительны к регистру.

Re: MPLAB X IDE

Вс окт 30, 2022 20:54:36

Вопрос немного смешной, но как переключиться на другой проект? Я нажимаю кнопкой мыши по проекту, но у меня просто открывается содержимое этого проекта, и все. А я по прежнему остаюсь на нижнем проекте.
Вложения
Прин.jpg
(207.79 KiB) Скачиваний: 69

Re: MPLAB X IDE

Вс окт 30, 2022 20:57:54

Это просто.
Наводите на проект, правой кнопкой - свойства - сделать главным проектом.

Re: MPLAB X IDE

Вс окт 30, 2022 21:41:07

Спасибо, я то уже пол-часа мучаюсь

Добавлено after 1 minute 52 seconds:
Кстати компилятор ХС-8 - он только для языка си?

Re: MPLAB X IDE

Вс окт 30, 2022 22:05:39

Да и для Си 8- бит.

Re: MPLAB X IDE

Вс окт 30, 2022 22:32:42

Да не, для си - это понятно. А ассемблер он поддерживает?

Re: MPLAB X IDE

Пн окт 31, 2022 03:34:20

Поддерживает. Только это не MPASM, а PIC-AS. Если вам нужен MPASM, на котором написан код на скрине, то придется поставить MPLABX версии максимум 5.35.
ЗЫ. В догон, для пущего понимания. MPASM всегда являлся самостоятельным продуктом, который к Си-компиляторам не имел никакого отношения и поставлялся СО СРЕДОЙ РАЗРАБОТКИ (MPLAB/MPLABX). Вплоть до MPLABX версии 5.35, после чего он был выпилен из среды и предложено вместо него пользоваться ассемблером Си-компилятора XC8, который называется PIC-AS, который функционирует и в бесплатной версии компилятора. Но синтаксис проекта у PIC-AS несколько иной. В доках на компилятор есть мануал на этот ассемблер. Учите матчасть...
Ответить