Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 06.09.2023, 17:27  
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Падает UART PIC24FV32KM302

Здравствуйте.

Есть МК PIC24FV32KM302. И с ним творится какая то дичь.
Написал прошивку для него давным давно для управления LED панелями.

Все было нормально до добавления новой конфигурации панели.

Обработка идет по таймеру в прерывании.

Код:
void __attribute__((__interrupt__, no_auto_psv)) _T1Interrupt(void) {
    if (IEC0bits.T1IE && IFS0bits.T1IF) {
        IFS0bits.T1IF = 0;
        lineidx = (lineidx % panelCfg.ScreenScanShift);

        DrawLine8(lineidx, 0);
        // отключил весь вывод, оставил только один метод но это не спасает.


//        switch (AdditionalFlag) {
//            case PanelFlagsUseAlternateRender:
//                DrawLine32_16_NonStandart(lineidx);
//                break;
//            case PanelFlagsUseAlternateRender2:
//                DrawLine8_nonst2(lineidx, 1);
//                break;
//            case PanelFlagsUseInvertAddress:
//                DrawLine8(lineidx, 1);
//                break;
//            default: DrawLine8(lineidx, 0);
//                break;
//        }

        lineidx++;

        // если идет прием то делаем отсчет времени сброса на случай если прием команд завис
        if (RceiveCMD != NONE_CMD) {
            ResetCMDTimeout++;
        }
        
    }
}

Конфигурация панелей у меня задается структурой.
Данные заданы как массивы.
Код:
const unsigned char Panel_p8_invert_adr_merged[] = {1, 4, 5, 3, 4, 4, 2, 8, 64, 0, 0, 0, 0};

Так вот при задании очередной конфигурации падает UART.
Причем без всяких ошибок.
Таймер работает, основной код также работает потому что можно вывести демо режим когда заполняется построчно панель.
Но уарт наглухо виснет.

добавил обработчики ошибок но сюда не попадает никогда.

Код:
void __attribute__((__interrupt__, auto_psv)) _DefaultInterrupt(void) {
    // may be error
    ThrowException(1);
}

void __attribute__((__interrupt__, auto_psv)) _OscillatorFail(void) {
    // may be error
    ThrowException(2);
}

void __attribute__((__interrupt__, auto_psv)) _AddressError(void) {
    // may be error
    ThrowException(3);
}

void __attribute__((__interrupt__, auto_psv)) _StackError(void) {
    // may be error
    ThrowException(4);
}

Уже перепроверил весь код пошагово в отладчике. Причем симмулятор тоже падает но пошагам я не вижу никаких делений на 0 или улетов в недопустимые области памяти.

Уже до дыр проглядел код.
Может кто нибдь знает метод как можно ошибки чтоли проверить?? или узнать причину почему перестает приниматься данные?

Куда можно глянуть??

Делаю в Mplabx
Спасибо.
Реклама:
worldmasters вне форума  
Непрочитано 07.09.2023, 10:14  
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Падает UART PIC24FV32KM302

А вот что нашел.
Периодически срабатывает ошибка OERR: Receive Buffer Overrun Error Status bit (clear/read-only)

Но откуда она берется то в симмуляторе? Прерывание же настроено.
worldmasters вне форума  
Непрочитано 08.09.2023, 00:50  
mtit
Почётный гражданин KAZUS.RU
 
Аватар для mtit
 
Регистрация: 21.03.2007
Адрес: М.(осква)
Сообщений: 4,317
Сказал спасибо: 2,137
Сказали Спасибо 1,734 раз(а) в 986 сообщении(ях)
mtit на пути к лучшему
По умолчанию Re: Падает UART PIC24FV32KM302

worldmasters, так перевод на русский - ошибка переполнения буфера приёма.
Алгоритм не заходит в процедуру очистки буфера, в частности потому, что прерывание не разрешено.
ЯТД, (мимокрокодил).
__________________
+ 7 903 641 87 25// 1. Иногда отвечаю "по памяти" 2. Часто заблуждаюсь >> Критикуйте, не обижусь.
mtit вне форума  
Непрочитано 08.09.2023, 08:56  
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Падает UART PIC24FV32KM302

Сообщение от mtit Посмотреть сообщение
Алгоритм не заходит в процедуру очистки буфера, в частности потому, что прерывание не разрешено.
Разрешено все.


У меня вывод каждой строчки происходит по прерыванию таймера каждую мс.
Видимо сам код обновления строки очень долгий и не дает нормально срабатывать прерыванию уарт.

вытащил код из прерывания таймера в основной поток но появились артефакты (((
Но зато уарт перестал страдать этой ошибкой.

Как то так.
worldmasters вне форума  
Непрочитано 11.09.2023, 09:49  
varostov
Прописка
 
Регистрация: 14.10.2006
Адрес: Ростов-на-Дону
Сообщений: 113
Сказал спасибо: 14
Сказали Спасибо 32 раз(а) в 21 сообщении(ях)
varostov на пути к лучшему
По умолчанию Re: Падает UART PIC24FV32KM302

Здравствуйте. Пару дней у меня не грузился Kazus, так что мысли вдогонку... Извините, если изреку прописные истины, но процедура прерывания должна быть короткая, "как выстрел" - приняли байт из UART, положили в буфер, и пусть обработкой пакета занимается асинхронно независимая процедура в главном цикле. Нужно регенерировать табло в строго определённые моменты - взведите по таймеру флаг софтового прерывания с более низким приоритетом для этой процедуры, чтобы не мешать дальнейшему приёму UART (желательно убедиться в факте приёма пакета или использовать двойное буферирование).
А определить причины подобных "временных" нахлёстов в прерывании в таком фрагменте проекта практически невозможно.
P.S. Если будете стараться уменьшить размер кода прерывания, уберите строку
Код:
if (IEC0bits.T1IE && IFS0bits.T1IF)
- это рудимент из прерываний PIC16, где был один вход для всех прерываний. В PIC24 векторный контроллер, у каждого прерывания отдельный адрес входа. Ну и на "сладкое" - код лучше читается, если использовать предопределённые в файле ‹процессор.h› имена битов SFR, например:
Код:
if (_T1IE && _T1IF)

Последний раз редактировалось varostov; 11.09.2023 в 09:58.
varostov вне форума  
Непрочитано 27.12.2023, 05:10  
sciff
Заблокирован
 
Регистрация: 05.05.2008
Сообщений: 121
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
sciff на пути к лучшему
По умолчанию Re: Падает UART PIC24FV32KM302

Здравствуйте. Старое былью стало. У вас новый девайс, а сам ваш алгоритм немного устарел. Попробую помочь хотя похоже бесполезно. Читайте на pic24.ru осрв tn_kernel. Исходник в студию.если осцил. В ошибке

Последний раз редактировалось sciff; 27.12.2023 в 14:05. Причина: недостача
sciff вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование программатором STERH 007 PIC микроконтроллеров ispitatel1 Песочница (вопросы новичков) 4 17.04.2017 17:18
Тормоза при передаче данных через UART в Bluetooth модуль rus_12345 Микроконтроллеры, АЦП, память и т.д 8 05.01.2015 19:39
Программный UART для Mega8. Проблемы Zemlyanov AVR 20 13.11.2013 10:44
AVR, UART и режим IDLE anpaza Микроконтроллеры, АЦП, память и т.д 14 25.07.2011 03:04
Помогите разобраться с UART masterpc Микроконтроллеры, АЦП, память и т.д 10 13.02.2007 17:49


Часовой пояс GMT +4, время: 14:03.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot