|
Прерывания в компиляторе RealView, IRQ или FIQ? |
|
|
|
Jun 27 2007, 07:17
|
Участник

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

|
Разбирались мы тут с прерываниями и накопали вот что. Компилятор armcc не делает разницы между IRQ и FIQ перываниями, и использует как в IRQ так и в FIQ режимах общие регистры R0-R7, сохраняя их в стеке при входе прерывания. А вот в описании архитектуры ARM7TDMI сказано что в режиме FIQ регистры R8-R14 в нутри прерывания это banked registers, то есть они не пересекаются с регистрами R8-R14 вне прерывания и их не надо класть в стек. Так вот, может кто знает, можно ли как-нибуть указать компилятору, чтобы он пользовался этими banked register, а не общими? Хотя и экономится всего 2 команды, но ради научного интереса хочется выжать из Fast Interrupta все на что он способен!
|
|
|
|
|
Jun 27 2007, 08:15
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(SanyaKID @ Jun 27 2007, 10:17)  Так вот, может кто знает, можно ли как-нибуть указать компилятору Скорее всего, если это он сам не делает, то указать нельзя  . У IAR тоже не совсем хорошо - пользует R8-R10, но если их не хватает, то начинает пользовать младшие, а не R11 и R12  Хотя, я, пожалуй, не прав на счет младших, когда копался в коде, забыл, что используется вызов подпрограмм и соответственно компилятор вынужден ими пользоваться и соответственно пользуется ими и для дугих целей.
Сообщение отредактировал zltigo - Jun 27 2007, 08:41
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 27 2007, 09:29
|
Участник

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

|
Цитата(SpiritDance @ Jun 27 2007, 12:41)  В realView при описании обработчика IRQ на С используется ключевое слово __irq. Для прерываний fiq никаких ключевых слов и средств работы с fiq на С нет. Да, но можно сделать так, чтобы оно вызывалось в режиме FIQ. В стартапе есть FIQ_Handler, содержащий адрес обработчика перываний FIQ. Если ему скормить адрес функции с ключевым словом __irq, и сделать одно из прерываний FIQ, то будет вызываться она. А вообще, похоже всеже нельзя явно указать компилятору какие регистры использовать...
Сообщение отредактировал SanyaKID - Jun 27 2007, 09:31
|
|
|
|
|
Jun 27 2007, 09:50
|
Участник

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

|
Цитата(SpiritDance @ Jun 27 2007, 13:39)  Смысл ключевых слов именно в этом. А контроллеру прерываний вы можете скормить что угодно. Понятно, я не до конца вник во фразу
Сообщение отредактировал SanyaKID - Jun 27 2007, 09:51
|
|
|
|
|
Jul 11 2007, 09:00
|
Группа: Новичок
Сообщений: 9
Регистрация: 29-03-07
Пользователь №: 26 595

|
В STR91x лучше дело обстоит - для FIC выделен "свой собственный банк регистров для минимизации времени контекстного переключения". Вот только что это за регистры не сказано - фик знает.
|
|
|
|
|
Jul 11 2007, 09:30
|
Частый гость
 
Группа: Новичок
Сообщений: 84
Регистрация: 24-05-07
Пользователь №: 27 947

|
Цитата(Andy_ry @ Jul 11 2007, 13:00)  В STR91x лучше дело обстоит - для FIC выделен "свой собственный банк регистров для минимизации времени контекстного переключения". Вот только что это за регистры не сказано - фик знает.  Только не лучше, а так же, как и у остальных процессоров с ARM ядром. Регистры R8-R12.
|
|
|
|
|
Jul 11 2007, 15:09
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Andy_ry @ Jul 11 2007, 12:00)  В STR91x лучше дело обстоит... Если-бы Вы были внимательнее, то поняли, что обсуждается не отсутствие (который на самом деле присутствеет, как уже писалось, во всех ARM и документрован) отдельного банка регистров, а то, что RealView НЕ УМЕЕТ ИМ ПОЛЬЗОВАТЬСЯ.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 16 2007, 10:32
|
Участник

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

|
Цитата(zltigo @ Jul 11 2007, 19:09)  Если-бы Вы были внимательнее, то поняли, что обсуждается не отсутствие (который на самом деле присутствеет, как уже писалось, во всех ARM и документрован) отдельного банка регистров, а то, что RealView НЕ УМЕЕТ ИМ ПОЛЬЗОВАТЬСЯ. Да, пользоваться он ими действительно не умеет. В итоге, у меня получился вариант, когда в Си функция прерывания описана как IRQ, но настроена как FIQ и в стартапе FIQ Handler скормлен адрес этого самого обработчика, помеченного как FIQ. Вызываться обработчик должен немного быстрее, но ,вообще говоря, то, что компилятор не использует специальные регистры этого режима, сводит почти на нет все преимущество FIQ
|
|
|
|
|
Jul 17 2007, 06:40
|
Участник

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

|
Цитата(SergeyDDD @ Jul 16 2007, 15:51)  Далай обработчик FIQ на ассемблере Я долго ждал, когда ж мне это скажут
|
|
|
|
|
Jul 17 2007, 14:33
|
Местный
  
Группа: Свой
Сообщений: 231
Регистрация: 7-12-06
Из: Киев
Пользователь №: 23 248

|
Цитата(SanyaKID @ Jul 17 2007, 10:40)  Я долго ждал, когда ж мне это скажут  Ну так...... Слушай меня....... "Хотя и экономится всего 2 команды, но ради научного интереса хочется выжать из Fast Interrupta все на что он способен!" А ваче то что может быть при такой постановке вопроса? И после всего написанного здесь.
Сообщение отредактировал SergeyDDD - Jul 17 2007, 15:06
|
|
|
|
|
Jul 19 2007, 12:41
|
Местный
  
Группа: Новичок
Сообщений: 239
Регистрация: 5-10-06
Пользователь №: 21 004

|
Цитата(SanyaKID @ Jul 16 2007, 14:32)  у меня получился вариант, когда в Си функция прерывания описана как IRQ, но настроена как FIQ и в стартапе FIQ Handler скормлен адрес этого самого обработчика, помеченного как FIQ. Если нетрудно и возможно прицепите пример ваш.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|