MPLAB X IDE

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Родился
Сообщения: 4
Зарегистрирован: Вт сен 08, 2015 08:57:47

Сообщение picpower »

[uquote="alex_",url="/forum/viewtopic.php?p=4355819#p4355819"]Вечером времени не оказалось :(
Спойлер

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

struct Serv485u8// данные выдаются в формате char
{
    unsigned char Addr;  //1 1
    unsigned char contr; //1 2//0x5A  
    unsigned short len;  //2 4 
    unsigned char pak[2];//2 6
    unsigned char c[1024];//передаваемые данные 
};

struct 
{
    unsigned char pac;
    unsigned char read;
}uk;//указатель на точки чтения и записи

unsigned char uart_rx[1024]; // кольцевой буфер приёма
unsigned char adr = 0x50;

void InPac();
bool СheckCRC485(unsigned char *Buff, unsigned short len);
void ReadPac(unsigned char * pcBlock, unsigned short len);

//----------
void __ISR(_UART_2_VECTOR, IPL1AUTO) UART2Interrupt(void)//
{    
    unsigned short i0=10;//блокировка зацикливания
    
    
    if(IFS1bits.U2EIF)//проверить на наличие ошибок
    {                   
        CheckError(); //читаем биты ошибок  
    }
    else   
    {   // ошибок нет, читаем 
        do
        {
            uart_rx[uk.pak] = U2RXREG;
            
            if(uk.pak<sizeof(uart_rx)-1)//индекс сдвинули на байт
                uk.pak++; 
            else uk.pak=0;                      
            
            i0--;
        } while(U2STAbits.URXDA && i0);    
    }     
    
    IFS1bits.U2RXIF=0; //сброс флага прерывания
}
//======
void main()
{
    
    while(1)
    {
        if((uk.pac - uk.read) >4)
            InPac();
        
        // тут ещё много всяких if'ов которые по флагам от таймеров и иных прерываний выполняют различные задания
    }
}
//----------
void InPac()
{
    struct Serv485u8 *serv;
    
    while(uk.read!=uk.pac)// пока всё не прочитаем
    // помню что буфер кольцевой, но этот вопрос буду решать позже, главное с выравниванием разобраться
    {
        
        if(uart_rx[uk.read]==adr && uart_rx[uk.read+1]==0x5A)//;
        {//собираем пакет
            serv=(void*)&uart_rx[uk.read];// можно было и так serv=(struct Serv485u8*)&uart_rx[uk.read]; но ничего особо не меняет
            //если uk.read не чётное число, адрес получается тоже нечётный
            //если обратиться к структуре(например serv->len) то тут вылетаем в ошибку
            if(serv->len < (uk.pac - uk.read))//если пришёл весь пакет
            {
                if(СheckCRC485(uart_rx[uk.read], serv485->len-2))
                {
                    ReadPac(uart_rx[uk.read], serv485->len-2);//передаём пакет на разборку
                    uk.read+=serv485->len; // данные считали, двинули указатель чтения
                    if(uk.read>=sizeof(uart_rx))//если вышли за пределы кольцевого массива, вернутся к началу 
                        uk.read-=sizeof(uart_rx); 
                }
                else  uk.read++;
            }
            else break; // выходим, зайдём в следующий раз, возможно к тому моменту успеет всё собраться    
        }
        else// не нашли нужных байт, двигаем указатель чтения
            uk.read++;
    }
    
}// Ну как то так
:tea:[/uquote]

А выровнять структуру при объявлении?

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

#pragma pack(push, 1)

struct Serv485u8// данные выдаются в формате char
{
    unsigned char Addr;  //1 1
    unsigned char contr; //1 2//0x5A  
    unsigned short len;  //2 4 
    unsigned char pak[2];//2 6
    unsigned char c[1024];//передаваемые данные 
};

struct 
{
    unsigned char pac;
    unsigned char read;
}uk;//указатель на точки чтения и записи

#pragma pack()
Реклама
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Сообщение alex_ »

Мне кажется тут даже не в выравнивании структуры, а в процессе обращения если указатель(адрес) оказывается нечётным, то всё сразу начинает идти по одному месту, поскольку контроллер 32 битный, 2 байта команда 2 байта данные то смещение на 1 байт ему ну очень не нравиться. Кстати функцию я эту уже полностью переписал, слишком сложно получилось и отнимает дополнительное время у контроллера.
Кстати я пытался копировать структуру по 2 байта через указатель на short работает быстрее чем копировать через указатель на char, но если опять же размер структуры оказывается нечётный или с нечётного адреса то опять слетаем в софт ребут, а с указателем на char дольше но всё стабильно копируется.
Реклама
Открыл глаза
Сообщения: 60
Зарегистрирован: Пт окт 19, 2018 14:17:14

Сообщение lin17 »

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

Периодически ещё выдаёт ошибку XC8 Timeout
Открыл глаза
Сообщения: 60
Зарегистрирован: Пт окт 19, 2018 14:17:14

Сообщение lin17 »

В итоге помогло убивать процесс xclm в диспетчере задач. Хотя так и не понятно, что происходит.
Реклама
Эиком - электронные компоненты и радиодетали
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Сообщение alex_ »

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

Сообщение alex_ »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4169752#p4169752"][uquote="alex_",url="/forum/viewtopic.php?p=4169701#p4169701"]Пробовал ли кто эти 2 бита ногодрыгом дослать? :roll:[/uquote]
Ничего не надо досылать. Посылается количество бит, которое БОЛЬШЕ, чем требуемое. Лишние просто будут вытолкнуты в приемнике.[/uquote]
Дисплей на контроллере WS0010, а вот как называется - хрен вам с матрёшкой :tea: Пришлось поднять старую тему и перейти на аппаратный SPI.
Эта зараза не выталкивает не один лишний разряд, отсчитывая свои первые 10 бит их и принимает в обработку :kill:
Не первый день этот дисплей долбаю на аппаратном SPI, с командами вроде разобрался, выдаём 2 байта последние 6 бит просто игнорирует. А вот с догрузкой данных блин косяк, сначала надо выдать 2 бита а потом кратно 8 битам данные :facepalm:
Разработчики данного контроллера походу знают толк в извращениях :))

Добавлено after 3 hours 12 minutes 9 seconds:
Усё сдаюсь, аппаратный SPI здесь работать не будет, идеи кончились, только ногодрыг :( :facepalm:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 629
Зарегистрирован: Ср дек 08, 2010 19:03:17

Сообщение sunjob »

день добрый!
микрочиб закрыл доступ, как выкручиваемся?
Енот - это кот, только инкогнито!
p.s. держитесь обоими руками, а то прорвет...
Электрический кот
Аватара пользователя
Сообщения: 1032
Зарегистрирован: Ср окт 04, 2017 20:47:40

Сообщение valentinovich »

sunjob писал(а):микрочиб закрыл доступ, как выкручиваемся?
К чему доступ закрыт? Непосредственно к "телу" оф. сайта?
Может сбой какой, подождём, посмотрим.
Ну дык на сегодня чего там такого, что нонче у нас нет? :)
Так что пока даже не "ёрзаем". :)) Не паникуем и ждём-с новостей.
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Чт июл 28, 2022 20:33:37

Сообщение БесТолковый »

[uquote="sunjob",url="/forum/viewtopic.php?p=4507755#p4507755"]день добрый!
микрочиб закрыл доступ, как выкручиваемся?[/uquote]
VPN в помощь.
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Сб янв 28, 2006 22:47:24

Сообщение Asmodey »

[uquote="valentinovich",url="/forum/viewtopic.php?p=4507810#p4507810"]
sunjob писал(а):микрочиб закрыл доступ, как выкручиваемся?
К чему доступ закрыт? Непосредственно к "телу" оф. сайта?
Может сбой какой, подождём, посмотрим.[/uquote]
Какой сбой? У меня давным давно при попытке зайти на microchip.com выдает Access Denied. То же самое с аналог девайс и прочими. Только STMicroelectronics пускает к себе на сайт, да и там без регистрации ничего не качнешь. Власть придержащие пиндосы прикрикнули на существующие в условиях свободного рынка транснациональные компании, и те закрыли доступ к сайту из России.

Учитесь жить без Microchip.
Астролябия-сама меряет, было бы что мерять!!!
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="Asmodey",url="/forum/viewtopic.php?p=4507889#p4507889"]Какой сбой? У меня давным давно при попытке зайти на microchip.com выдает Access Denied.[/uquote]
А у меня не выдает... :)
Изображение
Зачем лишать себя профессиональной информации, если есть VPN?
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Сб янв 28, 2006 22:47:24

Сообщение Asmodey »

Да ну их нафик с их ценами даже у китайцев.
Астролябия-сама меряет, было бы что мерять!!!
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="Asmodey",url="/forum/viewtopic.php?p=4508353#p4508353"]с их ценами даже у китайцев.[/uquote]
Увы, но часть их продукции очень плохо заменяется.
Например, цифровые потенциометры.
Или последние семейства dsPIC33.
Так же трудно заменить 16-битные SAR ADC. Они оказываются в два раза дешевле тех, что выпускает Аналог девайс при пин2пин совместимости.
Если учесть, что с поставками Микрочипа есть вполне пристойные варианты (естественно, что не поштучно), то доступ на сайт оказывается вполне необходимым.
Опять же, для замены некоторых микросхем на китайские, нужны исходные даташиты и прочая документация.
Открыл глаза
Сообщения: 72
Зарегистрирован: Чт ноя 15, 2007 19:31:24

Сообщение Donetsk »

Изображение
Научите где найти информацию по этому интерфейсу? Какая кнопка и для чего?

кнопка Build - это компиляция?
Как проект назначить - Главным?
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Внезапно есть pdf-мануал в папке среды. Но можно воспользоваться Хелпом в верхнем меню. Так же есть всплывающие подсказки при наведении мышью на пиктограмму.
Английский глагол "Билд" является уже международным англицизмом, чтобы задавать такой вопрос. В всех компиляторах используется.
Чтобы сделать проект главным, нужно правой кнопкой мыши кликнуть по корневому имени проекта в дереве и в выпавшем меню найти искомое.
Открыл глаза
Сообщения: 72
Зарегистрирован: Чт ноя 15, 2007 19:31:24

Сообщение Donetsk »

Добавлено after 47 seconds:
Внезапно есть pdf-мануал в папке среды.

Как найти эту папку?
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Стандартный путь: C:\Program Files\Microchip\MPLABX\v5.50\docs
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вт сен 29, 2009 09:28:51
Откуда: Ульяновск

Сообщение a.garkin »

Прошу прощения. Пишу здесь чтобы тему не плодить. Вопрос элементарный: как этому чудо скормить в Makefile F_CPU для AVR? попробовал в самом makefile прописать CFLAGS += -DF_CPU=1000000 как по старинке он игнорирует опцию. При сборке пишет make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf, но Makefile-default.mk каждый раз генерируется на основе ../Makefile куда и прописал. Или они такой изврат специально сделали если 10 библиотек подключаешь и везде где delay надо вручную прописывать F_CPU.
Контактная информация:
OKF
Это не хвост, это антенна
Сообщения: 1454
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Какому чуду? В нормальных Makefile просто тупо указывается F_CPU = 1000000, как и всё остальное.
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вт сен 29, 2009 09:28:51
Откуда: Ульяновск

Сообщение a.garkin »

[uquote="OKF",url="/forum/viewtopic.php?p=4534519#p4534519"]Какому чуду? В нормальных Makefile просто тупо указывается F_CPU = 1000000, как и всё остальное.[/uquote]
И так тоже естественно пробовал.
Контактная информация:
Ответить

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