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

 
 
> Interrupt i IAR
Nikola Kirov
сообщение Oct 19 2005, 22:04
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 4-11-04
Из: Болгария
Пользователь №: 1 050



Необходимо переключат функции которъе въизъиваются на перервание.
Сделал
extern __near void (* pTX_InterruptFunction)(void);

а сам interrupt
Код
#pragma vector = USART_TXC_vect
__interrupt void TXCinterrupt(void)
{
 pTX_InterruptFunction();
}


все работает но вот такое генерируется
Код
  \   00000000   93BA               ST      -Y, R27
  \   00000002   93AA               ST      -Y, R26
  \   00000004   938A               ST      -Y, R24
  \   00000006   93FA               ST      -Y, R31
  \   00000008   93EA               ST      -Y, R30
  \   0000000A   923A               ST      -Y, R3
  \   0000000C   922A               ST      -Y, R2
  \   0000000E   921A               ST      -Y, R1
  \   00000010   920A               ST      -Y, R0
  \   00000012   937A               ST      -Y, R23
  \   00000014   936A               ST      -Y, R22
  \   00000016   935A               ST      -Y, R21
  \   00000018   934A               ST      -Y, R20
  \   0000001A   933A               ST      -Y, R19
  \   0000001C   932A               ST      -Y, R18
  \   0000001E   931A               ST      -Y, R17
  \   00000020   930A               ST      -Y, R16
  \   00000022   B78F               IN      R24, 0x3F
    54            pTX_InterruptFunction();
  \   00000024   ....               LDI     R26, LOW(pTX_InterruptFunction)
  \   00000026   ....               LDI     R27, (pTX_InterruptFunction) >> 8
  \   00000028   91ED               LD      R30, X+
  \   0000002A   91FC               LD      R31, X
  \   0000002C   9509               ICALL
    55          }
  \   0000002E   BF8F               OUT     0x3F, R24
  \   00000030   9109               LD      R16, Y+
  \   00000032   9119               LD      R17, Y+
  \   00000034   9129               LD      R18, Y+
  \   00000036   9139               LD      R19, Y+
  \   00000038   9149               LD      R20, Y+
  \   0000003A   9159               LD      R21, Y+
  \   0000003C   9169               LD      R22, Y+
  \   0000003E   9179               LD      R23, Y+
  \   00000040   9009               LD      R0, Y+
  \   00000042   9019               LD      R1, Y+
  \   00000044   9029               LD      R2, Y+
  \   00000046   9039               LD      R3, Y+
  \   00000048   91E9               LD      R30, Y+
  \   0000004A   91F9               LD      R31, Y+
  \   0000004C   9189               LD      R24, Y+
  \   0000004E   91A9               LD      R26, Y+
  \   00000050   91B9               LD      R27, Y+
  \   00000052   9518               RETI

И как видно перервание становится медленое.
А мои функции совсем простенкие,такое сохранение регистров не нужно.
Явно что то не так делаю. Как правилно ето делат?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Nikola Kirov
сообщение Oct 20 2005, 08:18
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 4-11-04
Из: Болгария
Пользователь №: 1 050



Проблем с переключение задач которъие въиполняется на перервание слишком сериознъи. Я просто удивлен что такая фирма как IAR так подходит к етому вопросу.

У меня ест одна идея
Код
#pragma vector = 0x1000
__interrupt void Usart_Trnasmit()
{
-------------
-------------
}

так обявляем функции которъие нада переключат

проблем как организироват само переключение
если захочу поставит
__task void TrInterrupt(void) @ USART_TXC_vect
и там в асме переходит к нужнои функции
компилер ругается что на етот адрес могу толко __interrupt ставит.
Go to the top of the page
 
+Quote Post
BVU
сообщение Oct 20 2005, 08:49
Сообщение #3


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(Nikola Kirov @ Oct 20 2005, 12:18)
Проблем с переключение задач которъие въиполняется на перервание слишком сериознъи. Я просто удивлен что такая фирма как IAR так подходит к етому вопросу.

У меня ест одна идея
Код
#pragma vector = 0x1000
__interrupt void Usart_Trnasmit()
{
-------------
-------------
}

так обявляем функции которъие нада переключат

проблем как организироват само переключение
если захочу поставит
__task void TrInterrupt(void) @ USART_TXC_vect
и там в асме переходит к нужнои функции
компилер ругается что на етот адрес могу толко __interrupt ставит.
*

Nikola,
в классических системах это делается немного по другому. В теле Вашего прерывания должен находиться переход (call) на адрес расположенный в оперативной памяти (строго фиксировано), где размещается еще один вызов функции (переключение на функцию) адресс которой подставляется (настраивается в данный момент времени) в зависимости от логики работы программы. Так Вы получаете расширение ресурсов своего преравания. Что касается скорости выполнения, то здесь теряется время на дополнительный вызов. На asm это реализуется просто, как это сделать корректно на 'C' - надо подумать.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Nikola Kirov   Interrupt i IAR   Oct 19 2005, 22:04
- - ig_z   Цитата(Nikola Kirov @ Oct 20 2005, 01:04)И ка...   Oct 20 2005, 00:07
- - Alex11   Все не совсем так - при выключенном оптимизаторе, ...   Oct 20 2005, 05:43
- - Pat   Цитата(Nikola Kirov @ Oct 20 2005, 01:04)Необ...   Oct 20 2005, 06:22
|- - IgorKossak   Цитата(Pat @ Oct 20 2005, 09:22)2) Обязательн...   Oct 20 2005, 07:59
||- - Runner   Цитата(IgorKossak @ Oct 20 2005, 09:59)Цитата...   Oct 20 2005, 08:17
|- - Runner   Цитата(Pat @ Oct 20 2005, 08:22)Что бы компил...   Oct 20 2005, 08:14
|- - Pat   Цитата(Runner @ Oct 20 2005, 11:14)2) Из опыт...   Oct 20 2005, 08:29
|- - VladislavS   Цитата(BVU @ Oct 20 2005, 11:49)в классически...   Oct 20 2005, 13:11
|- - BVU   Цитата(VladislavS @ Oct 20 2005, 17:11)Цитата...   Oct 20 2005, 13:27
||- - dxp   Цитата(BVU @ Oct 20 2005, 19:27)Цитата(Vladis...   Oct 21 2005, 05:05
||- - Vic1   Цитата(dxp @ Oct 21 2005, 10:05)Прошу прощени...   Oct 24 2005, 04:35
|- - Vic1   To Nikola - все понятно, тогда думаю дальше . Не...   Oct 23 2005, 12:49
|- - VladislavS   Цитата(Vic1 @ Oct 23 2005, 15:49)Уточните, по...   Oct 23 2005, 16:59
- - Nikola Kirov   Кажется нашел решение Код__near void (* pTX_I...   Oct 20 2005, 09:15
- - Nikola Kirov   Етот метод которъи я описл деиствително работает и...   Oct 20 2005, 13:37
- - Nikola Kirov   Спосибо DXP. Тепер все стало более понятно. Но есл...   Oct 21 2005, 10:46
|- - dxp   Цитата(Nikola Kirov @ Oct 21 2005, 16:46)Спос...   Oct 21 2005, 12:25
- - Nikola Kirov   да ето с #pragma inline=forced помогло. но я долже...   Oct 21 2005, 14:28
|- - Vic1   Цитата(Nikola Kirov @ Oct 21 2005, 19:28)да е...   Oct 21 2005, 15:03
- - Nikola Kirov   На проверки условия уходит много циклов. А нада бъ...   Oct 21 2005, 15:32
|- - Vic1   Цитата(Nikola Kirov @ Oct 21 2005, 20:32)На п...   Oct 21 2005, 15:51
- - Vic1   To Nikola. Вот эти условия Вашей задачи не совсем...   Oct 22 2005, 07:08
- - VladislavS   To Vic1 Уже псали, что на AVR этот номер не про...   Oct 22 2005, 10:04
- - Nikola Kirov   Спосибо Vic1 но тут вопрос относится к специфике I...   Oct 22 2005, 10:18
|- - Vic1   Цитата(Nikola Kirov @ Oct 22 2005, 15:18)Вот ...   Oct 23 2005, 13:05
- - VladislavS   Извини, но твоя проблема не стоит выеденного яица....   Oct 22 2005, 10:35
- - Nikola Kirov   VladislavS как думаеш сколко циклов уходят на пере...   Oct 22 2005, 11:10
|- - prottoss   Вызовы функций внутри обработчика всегда приводят ...   Oct 22 2005, 13:06
- - Nikola Kirov   ЦитатаВместо 16-разрядных опций сравнения указател...   Oct 22 2005, 14:13
|- - prottoss   Цитата(Nikola Kirov @ Oct 22 2005, 22:13)Цита...   Oct 22 2005, 17:28
- - Nikola Kirov   ЦитатаМожет быть все написанное выше, полный бред....   Oct 22 2005, 17:58
|- - prottoss   Цитата(Nikola Kirov @ Oct 23 2005, 01:58)Да т...   Oct 22 2005, 23:46
- - Nikola Kirov   ЦитатаА зачем переключаемые 8 функций подвешивать ...   Oct 23 2005, 14:11
- - Nikola Kirov   Решил проблем. В фаила \src\template...   Oct 24 2005, 11:04
- - Nikola Kirov   Никто ли не знает как ето написат как то нормалнее...   Oct 26 2005, 17:09
- - Old1   Цитата(Nikola Kirov @ Oct 20 2005, 02:04)...   Dec 20 2005, 10:32


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

 


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


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