vprokofiev 0 23 октября, 2013 Опубликовано 23 октября, 2013 (изменено) · Жалоба STM32F215, FreeRtos На одной из плат перестает вызываться прерывание SysTick. При этом на большинстве плат все ок. Если смотреть регистры, то SysTickSR: Enable = 1 TickInt = 1 CLKSOURCE = 1 COUNTFLAG = 1 программа идет по самой приоритетной задаче постоянно, прерывание не вызывается, хотя регистр счетчика постоянно меняется и перескакивает через ноль. Перестают прерывания сыпаться каждый раз на разном значении обработанных прерывания ( тиков операц. системы ) сейчас например отладчик показывает xTickCount = 4050, перед этим было 413. Изменено 23 октября, 2013 пользователем Vladimir Prokofiev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smk 0 23 октября, 2013 Опубликовано 23 октября, 2013 · Жалоба А какой таймер использует ОС чтобы переключать задачи? Часом SysTick не зарезервирован как системный ресурс? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vlad_new 1 23 октября, 2013 Опубликовано 23 октября, 2013 · Жалоба Может где то глобальное прерывание запрещается. Есть реакция на другие прерывания ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dac 0 24 октября, 2013 Опубликовано 24 октября, 2013 · Жалоба STM32F215, FreeRtos а ОС часом не отключает где-нибудь глобальные прерывания? сталкивался на TNKernel Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
etoja 0 30 октября, 2013 Опубликовано 30 октября, 2013 · Жалоба Пропаяйте выводи земли и питания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vprokofiev 0 10 февраля, 2014 Опубликовано 10 февраля, 2014 · Жалоба Так и не решилась проблема:) Да, Systick переключает задачи. Не вызывется => Задачи не переключаются, что и видно.. Сейчас попробую поймать и посмотреть на другие прерывания.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Thorn 0 10 февраля, 2014 Опубликовано 10 февраля, 2014 · Жалоба Проверьте значения в регистрах PRIMASK, FAULTMASK, BASEPRI. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vprokofiev 0 26 марта, 2014 Опубликовано 26 марта, 2014 (изменено) · Жалоба Проверьте значения в регистрах PRIMASK, FAULTMASK, BASEPRI. PRIMASK=0 FAULTMASK=0 BASEPRI=0xB0 Прерывания другие вызываются, с одного ком-порта на другой данные как шли так и идут. Ну да вот и ответ :) Спасибо всем. Вобщем, при сбое по i2c, я забыл разрешить прерывания. А весь блок от выставления старта до стопа убран был в критическую секцию. Если происходил сбой то я выходил из функции забыв покнуть критическую секцию Изменено 26 марта, 2014 пользователем Vladimir Prokofiev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 26 марта, 2014 Опубликовано 26 марта, 2014 · Жалоба Есть понятие "инверсия приоритетов". Возможно, у вас оно случилось. А до SysTick есть еще с 8 разных прерываний, которые могут перекрыть SysTick. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 26 марта, 2014 Опубликовано 26 марта, 2014 · Жалоба Есть понятие "инверсия приоритетов". Понятие из другой оперы вроде... А до SysTick есть еще с 8 разных прерываний, которые могут перекрыть SysTick. Почему только 8? Периферийные прерывания тоже могут перекрыть SysTick_Handler. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 26 марта, 2014 Опубликовано 26 марта, 2014 · Жалоба Понятие из другой оперы вроде... Из области RTOS. Думаю, проблема в ней. Почему только 8? Периферийные прерывания тоже могут перекрыть SysTick_Handler. Если приоритеты прерываний изменить, то можно. А если не трогать, то как я написал. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться