Здравствуйте.
Есть МК 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
Спасибо.