Перейти к содержанию
    

Выход из прерывания в uCOS

IAR 5.20, XMEGA128. В программе крутятся 8 потоков, задействованы 8 УАРТов (средний уровень прерываний), 8 таймеров (высокий уровень) и 2 И2Ц (средний). Очень часто при большом потоке информаци зависает прерывание одного из УАРТов. В регистре PMIC стоит флаг обработки прерывания среднего уровня. Можно ли как-нибудь программно сбросить этот флаг (по даташиту вроде нельзя). Да, идлтаск при этом крутится, и работают прерывания высокого уровня. И еще, программа уже занимает 105КБ памяти, а всего в камне 128. Может из-за этого что-нибудь валиться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Флаг прерываний получилось сбросить перезапуском прерываний УАРТа и очисткой буферов. После этого все прерывания срабатывают, но не обрабатываются сообщения OSQPost - процедура вываливается тут

 

    if (pevent->OSEventType != OS_EVENT_TYPE_Q) {      /* Validate event block type                    */
        return (OS_ERR_EVENT_TYPE);
    }

 

Похоже проблема изначально возникает из-за операционки. Мне кажется в один прекрасный момент не срабатывает выход из прерывания или переключение контекста, или что там еще может быть (я в дебрях uCOSа не силен).

 

Может есть у кого какие-нибудь мысли? Помогите!!! Пожалуйста!! :help:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно предположить, что в моменты пиковой нагрузки процессор и программа

не успевают обслужить события, и теряется прерывание или переполняется

очередь сообщений. Если отмасштабировать систему в два раза: 1xI2C, 4xTMR,

4xUART, а размеры буферов оставить теми же, исчезнут ли зависания?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не исчезли...

Тогда масштабируем дальше. Таймеры, поправьте, если ошибаюсь, имеются ввиду

программные? Отключайте все. Оставьте попеременно только 1xI2C, 1xUART, и

проверьте что такая конфигурация работает. Не уменьшайте размеры системных

буферов, очередей, стеков, &.

 

Я почти ничего не знаю про XMEGA128, кроме того, что это что-то маленькое

и медленное. Чему равна частота ЦПУ, частоты клоков I2C, UART и таймеров?

 

Уменьшайте частоту клоков I2C и UART до минимума. В какой-то момент

редуцированная система начнёт работать устойчиво. Теперь можно начать увеличивать

нагрузку, вводя новые задачи и устройства. До тех пор, пока система не

начнёт виснуть.

 

Причина, вероятно в том, что вы превысили предел [Liu & Layland 1973]. Загрузка

ЦПУ не может превышать 0.69.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

проблема решилась :biggrin: Я сделал чтоб все прерывания были одного уровня приоритета (низкого) и включил круговую систему Робина - и все исчезло. Теперь работают все уарты, таймеры (железные) и все на больших скоростях и при целой толпе данных :08:

а вот этот предел, его вообще в принципе нельзя превышать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

проблема решилась [snip] - и все исчезло
Ура.

а вот этот предел, его вообще в принципе нельзя превышать?

Для множества задач с фиксированными приоритетами (случай uCOS-II). Если приоритеты динамические (переменные), то эффективность использования процессора можно увеличить - но непонятно, какова сложность такого (или таких) алгоритмов динамического планирования. А если он съест > оставшихся 0.3?

 

Что же мешало работе в схеме прерываний с приоритетами? Два предположения:

а) неправильно обрабатывается последовательность входа/выхода во вложенное прерывание, и

в) вложенное прерывание вклинивается в последовательность обслуживания внешнего устройства, разрывает её по времени, а эту последовательность разрывать нельзя.

 

Проверите?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...