реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> отладка scmrtos
сарматъ
сообщение Oct 20 2013, 11:09
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



сравнивая с работающей системой получил что 4d это прерывание ETH

его код
Код
extern "C" void ETH_IRQHandler(void)
{
    // снимаем флаг прерывания
    ETH_DMAClearITPendingBit(ETH_DMA_IT_R | ETH_DMA_IT_T | ETH_DMA_IT_NIS | ETH_DMA_IT_AIS);
    // прерывание Ethernet
    OS::TISRW isrw;
    JobQueue.push_isr_empty(&c_Eth);
}
оно вызывается порядка 5000 раз в секунду

JobQueue - очередь заданий как описано в руководстве по ос

OS::channel<TEth*, 20> JobQueue;

метод push_isr_empty
Код
template<typename T, uint16_t Size, typename S>
INLINE void OS::channel<T, Size, S>::push_isr_empty(const T& item)
{
    TCritSect cs;
    if(!pool.get_count_inline())
    {;
    pool.push_back_inline(item);
        resume_all_isr(ConsumersProcessMap);    }
}
осуществляет вставку объекта в очередь если очередь пустая, я криво этот метод написал?

класс channel буфер модифицированный как обсуждалось тут (добавлены инлайн функции)

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

Сообщение отредактировал сарматъ - Oct 20 2013, 11:32
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 20 2013, 16:39
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Возможно вы списывали значение из регистра в тот момент, когда программа находилась в этом прерывании? Попробуйте поставить точку останова в Idle Task.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Oct 20 2013, 17:15
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



что то я совсем запутался, короче все сбросил жду опять когда повиснет
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Oct 23 2013, 12:13
Сообщение #19


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



похоже, дело в кривой обработке мною прерываний сети, значение ETH_DMASR 0х80 - недоступен буфер приема и прога вечно висит в прерывании, как только запрещаю прерывания сети начинает работать ось - переключать задачки, как только прерывания разрешаю платка снова уходит в вечное прерывание
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 23 2013, 13:52
Сообщение #20


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Поздравляю с нахождением причины. Значит чудес не бывает sm.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Oct 23 2013, 14:44
Сообщение #21


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



спасибо wink.gif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 23 2013, 15:28
Сообщение #22


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Ура! Я тоже за вас болелsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Oct 23 2013, 15:32
Сообщение #23


Частый гость
**

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



))
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 2nd September 2025 - 18:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01427 секунд с 7
ELECTRONIX ©2004-2016