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

 
 
 
Reply to this topicStart new topic
> проблема с прерываниями, GCC thumb
Latch
сообщение Mar 7 2007, 12:36
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 15-10-06
Пользователь №: 21 331



Использую GCC из дистрибутива Yagarto. Если просто моргать светодиодом в главном цикле, то периодические прерывания функционируют нормально. Если, к примеру, добавить вызов в цикле sprintf, прерывания перестают работать (через какое-то время ~ несколько сотен вызовов), но главный цикл продолжает выполняться. Предполагаю проблема в стандартной библиотеке, внутри которой используется thumb режим (мой код весь в arm режиме). Хотя, если вызывать мою thumb функцию, зависаний не происходит.
В какую сторону копать?
Go to the top of the page
 
+Quote Post
Alex03
сообщение Mar 7 2007, 14:32
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(Latch @ Mar 7 2007, 14:36) *
Использую GCC из дистрибутива Yagarto. Если просто моргать светодиодом в главном цикле, то периодические прерывания функционируют нормально. Если, к примеру, добавить вызов в цикле sprintf, прерывания перестают работать (через какое-то время ~ несколько сотен вызовов), но главный цикл продолжает выполняться. Предполагаю проблема в стандартной библиотеке, внутри которой используется thumb режим (мой код весь в arm режиме). Хотя, если вызывать мою thumb функцию, зависаний не происходит.
В какую сторону копать?


1. Размеры стеков.
2. Прерывание случайно не в С коде с __attribute__((interrupt("IRQ")))?
3. ...
Go to the top of the page
 
+Quote Post
Ivan_Kov
сообщение Mar 7 2007, 15:13
Сообщение #3


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

Группа: Свой
Сообщений: 174
Регистрация: 30-10-06
Из: г. Курск
Пользователь №: 21 787



Если в обработчике прерывания какой-либо регистр забыть сохранить, то все что угодно может происходить. имхо ваши симптомы очень похожи.
Go to the top of the page
 
+Quote Post
etoja
сообщение Mar 7 2007, 15:42
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 121
Регистрация: 14-01-05
Из: Москва
Пользователь №: 1 952



Проблема с прерываниями в GCC известна давно.
Посмотри обсуждение этого вопроса в присоединённом файле.
Прикрепленные файлы
Прикрепленный файл  t21799.html ( 33.21 килобайт ) Кол-во скачиваний: 108
 
Go to the top of the page
 
+Quote Post
klen
сообщение Mar 7 2007, 15:49
Сообщение #5


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(etoja @ Mar 7 2007, 15:42) *
Проблема с прерываниями в GCC известна давно.
Посмотри обсуждение этого вопроса в присоединённом файле.

помогло?
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Mar 7 2007, 15:52
Сообщение #6


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Кстати с компилером, который собрад klen проблем вроде нет, и thumb режиме тоже, правда глубоко не тестил.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 7 2007, 16:08
Сообщение #7


Гуру
******

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



Цитата(SpiritDance @ Mar 7 2007, 14:52) *
Кстати с компилером, который собрал klen проблем вроде нет, и thumb режиме тоже, правда глубоко не тестил.
Очень интересует такой вопрос - кто и какие телодвижения должен сделать, чтобы эта проблема исчезла и в официальной сборке WinARM? Ведь, насколько я понимаю, данное исправление никак не влияет на совместимость со старыми исходными кодами (с ручной вставкой пролога/эпилога)? Просто WinARM жив и будет жить, а klen завтра откроет для себя какой-нибудь более вкусный BlackFin и его ветка будет заброшена, поэтому "подсаживаться" на нее несколько опасно.


--------------------
На любой вопрос даю любой ответ
"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
klen
сообщение Mar 7 2007, 20:30
Сообщение #8


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(Сергей Борщ @ Mar 7 2007, 16:08) *
....а klen завтра откроет для себя какой-нибудь более вкусный BlackFin и его ветка будет заброшена


а еще кирпич может на голову упасть, или метеорт. wink.gif
Не волнуйтесь. GCC очень похож на В.И.Ленина - живее всех живых.
Кстате после открытия вкусных ARM7 я авэрки не забросил, собираю под обе платформы, скоро циррусы подвизут santa2.gif . Сеоро свежак соберу w00t.gif 4.1.2 - мои коллеги пообесчали выдать avr-libc 1.5.0 вот ждусь обесчанного чтоб разом пересобрать все

а теперь по делу.
кто моим исправленным пользовался? были ли побочные эффекты и тд. Просба потраить время и сообщить. Чтоб протащить изменения в основную ветку GCC нужны серьезные основания. Одного моего тестирования недостаточно.

О! коллеги, а скажите пажалуста, в КросссВорке 1.6b3 gcc тоже ошибку дает в эпилоге или они исправленный в дистрибутив кладут? я просто его ниразу не пробывал, сразу свой заливал.
Go to the top of the page
 
+Quote Post
Latch
сообщение Mar 7 2007, 22:30
Сообщение #9





Группа: Участник
Сообщений: 13
Регистрация: 15-10-06
Пользователь №: 21 331



всем спасибо, завтра буду пробовать. похоже действительно в прологе-эпилоге (просто поторопился и код брал из готового примера). как обычно проект надо сдать "вчера"
Go to the top of the page
 
+Quote Post
klen
сообщение Mar 8 2007, 20:00
Сообщение #10


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



попробывал?
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Mar 9 2007, 10:19
Сообщение #11


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(klen @ Mar 7 2007, 20:30) *
а теперь по делу.
кто моим исправленным пользовался? были ли побочные эффекты и тд. Просба потраить время и сообщить. Чтоб протащить изменения в основную ветку GCC нужны серьезные основания. Одного моего тестирования недостаточно.

А каких оснований достаточно? И вообще описать поподробней что и как исправлено можно?

Цитата(klen @ Mar 7 2007, 20:30) *
О! коллеги, а скажите пажалуста, в КросссВорке 1.6b3 gcc тоже ошибку дает в эпилоге...

Похоже что да. Таки дает.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 9 2007, 10:42
Сообщение #12


Гуру
******

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



Цитата(klen @ Mar 7 2007, 19:30) *
а еще кирпич может на голову упасть, или метеорт. wink.gif
Типун тебе на клавиатуру smile.gif .

Цитата(klen @ Mar 7 2007, 19:30) *
Не волнуйтесь. GCC очень похож на В.И.Ленина - живее всех живых.
Но ведь это относится к проекту в целом, а не к отдельным веткам?

Цитата(klen @ Mar 7 2007, 19:30) *
Кстате после открытия вкусных ARM7 я авэрки не забросил, собираю под обе платформы
Так и времени полка прошло всего ничего - я не глуболкий старик, а уже помню как ты открыл ARM7 wink.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

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 13:51
Рейтинг@Mail.ru


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