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

проблема с прерываниями

Использую GCC из дистрибутива Yagarto. Если просто моргать светодиодом в главном цикле, то периодические прерывания функционируют нормально. Если, к примеру, добавить вызов в цикле sprintf, прерывания перестают работать (через какое-то время ~ несколько сотен вызовов), но главный цикл продолжает выполняться. Предполагаю проблема в стандартной библиотеке, внутри которой используется thumb режим (мой код весь в arm режиме). Хотя, если вызывать мою thumb функцию, зависаний не происходит.

В какую сторону копать?

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


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

Использую GCC из дистрибутива Yagarto. Если просто моргать светодиодом в главном цикле, то периодические прерывания функционируют нормально. Если, к примеру, добавить вызов в цикле sprintf, прерывания перестают работать (через какое-то время ~ несколько сотен вызовов), но главный цикл продолжает выполняться. Предполагаю проблема в стандартной библиотеке, внутри которой используется thumb режим (мой код весь в arm режиме). Хотя, если вызывать мою thumb функцию, зависаний не происходит.

В какую сторону копать?

 

1. Размеры стеков.

2. Прерывание случайно не в С коде с __attribute__((interrupt("IRQ")))?

3. ...

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


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

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

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


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

Проблема с прерываниями в GCC известна давно.

Посмотри обсуждение этого вопроса в присоединённом файле.

t21799.html

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


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

Проблема с прерываниями в GCC известна давно.

Посмотри обсуждение этого вопроса в присоединённом файле.

помогло?

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


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

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

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


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

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

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


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

....а klen завтра откроет для себя какой-нибудь более вкусный BlackFin и его ветка будет заброшена

 

а еще кирпич может на голову упасть, или метеорт. ;)

Не волнуйтесь. GCC очень похож на В.И.Ленина - живее всех живых.

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

 

а теперь по делу.

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

 

О! коллеги, а скажите пажалуста, в КросссВорке 1.6b3 gcc тоже ошибку дает в эпилоге или они исправленный в дистрибутив кладут? я просто его ниразу не пробывал, сразу свой заливал.

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


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

всем спасибо, завтра буду пробовать. похоже действительно в прологе-эпилоге (просто поторопился и код брал из готового примера). как обычно проект надо сдать "вчера"

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


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

а теперь по делу.

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

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

 

О! коллеги, а скажите пажалуста, в КросссВорке 1.6b3 gcc тоже ошибку дает в эпилоге...

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

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


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

а еще кирпич может на голову упасть, или метеорт. ;)
Типун тебе на клавиатуру :) .

 

Не волнуйтесь. GCC очень похож на В.И.Ленина - живее всех живых.
Но ведь это относится к проекту в целом, а не к отдельным веткам?

 

Кстате после открытия вкусных ARM7 я авэрки не забросил, собираю под обе платформы
Так и времени полка прошло всего ничего - я не глуболкий старик, а уже помню как ты открыл ARM7 ;)

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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