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

 
 
 
Reply to this topicStart new topic
> FreeRTOS+LPC2378+USB, траблы с USB
M0HAX
сообщение Oct 23 2010, 09:31
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 22-09-08
Пользователь №: 40 378



Вставил в свое ПО на FreeRTOSе файлы из примера VirtualCom(наверное, все знаете его, идет с IAR в комплекте). Отдельно оба ПО работают. Но когда соединил, запустил, то через некоторое время происходит вылет на prefetch_handler. Вот как отследить, откуда и по какой причине происходит этот вылет? может есть какие-то способы, о которых не знаю.. USB работает с приоритетом 1, соот-вно системный тик с приоритетом 0, оба IRQ-прерывания.

И еще. Практически все функции USB в этом примере реализованы внутри прерывания, т.е. по сути времени проц много сидит в этом прерывании, что нежелательно. Подскажите, как лучше организовать работу usb в FreeRTOSе. Что можно вынести в задачу, а что обязательно делать в прерывании? Можно ли сделать так: в прерывании обработать только первую транзакцию(запрос), а ответ на него(данные,статус) отсылать в задаче, но тогда ведь в принципе пройдет много времени и произойдет какой-нибудь таймаут у хоста?
Go to the top of the page
 
+Quote Post
Student Pupkin
сообщение Oct 23 2010, 13:32
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760



Цитата(M0HAX @ Oct 23 2010, 13:31) *
...происходит вылет на prefetch_handler. Вот как отследить, откуда и по какой причине происходит этот вылет? может есть какие-то способы, о которых не знаю..

Не знаете, что при входе в исключение PrefetchAbort в регистре LR (R14_abt) сохраняется адрес команды, вызвавшей исключение + 4 ??? Или Вы каких-то других способов ищете?
Go to the top of the page
 
+Quote Post
M0HAX
сообщение Oct 25 2010, 05:12
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 22-09-08
Пользователь №: 40 378



Цитата(Student Pupkin @ Oct 23 2010, 17:32) *
Не знаете, что при входе в исключение PrefetchAbort в регистре LR (R14_abt) сохраняется адрес команды, вызвавшей исключение + 4 ??? Или Вы каких-то других способов ищете?

Не так давно фриртосом стал пользоваться,тем более до этого обходилось без таких фатальностей,поэтому пока не столкнешься,не узнаешь. Спасибо и за эту простенькую подсказку.
Подсказка не помогла, в R14_abt сохраняется нереальный адрес,н-р, 0x00E424A0.

Сообщение отредактировал M0HAX - Oct 25 2010, 07:27
Go to the top of the page
 
+Quote Post
M0HAX
сообщение Oct 27 2010, 14:42
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 22-09-08
Пользователь №: 40 378



Дело оказалось не в USB. Закомментил в проге все задачи и все прерывания, оставил только задачу IDLE, прерывание системное и создал прерывание от таймера 1 с частотой 10000Гц и приоритетом 1 (системное прерывание как обычно с приоритетом 0) в качестве теста. В этом прерывании просто делаю инкремент счетчика.
Прога в какой-то момент времени вылетает на prefetch с вообще левым адресом в LR_abrt-регистре.
У кого-нибудь такое было? Не могу выловить, где ломается... Не помню, чтобы в документации к Фриртосу было написано, что нельзя создавать прерывания с частотой выше частоты системного прерывания. Завтра проверю, вылетает ли на prefetch при преключении контекста при вызове прерываний, но дальше хз что делать и где копать....
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 15 2010, 11:06
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Как раз использую переключатель от Фриртос.
И как раз тот самый пример с USB.
Прерывание от ОС никак не связано с другими прерываниями. И по сему оне друг на друга не влияют.

Разве что вы тут намекнули, что у вас контекст переключается при вызове прерываний (множ. число). А вообще-то контекст должен переключаться по таймеру ОС, либо по SWI. А обработчик прерывания - сам по себе.
Другое дело, если у вас обработчик прерывания вызывает какую-нибудь процедуру изнутри себя. Вот тут могут быть проблемы, если обработчик остается в IRQ mode, к примеру.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
M0HAX
сообщение Nov 20 2010, 06:37
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 22-09-08
Пользователь №: 40 378



Исправил уже давно, но пишу только сейчас для приведения темы к логическому завершению. Дело оказалось в следующем. Когда включил в ПО процедуры для USB, то, чтоб не мешались мои другие функции, я кое-что закомментарил,а именно - в одной закомментаренной процедуре создавалась очередь, которая потом применялась в vApplicationTickHook, кот. не закомментарил. И вот из-за этого с течением времени во Фриртосе происходили описанные проблемы при переключении контекста задач и вылетало на неиспльз.адреса. Сейчас все ок.

Сообщение отредактировал M0HAX - Nov 20 2010, 06:38
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th June 2025 - 14:33
Рейтинг@Mail.ru


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