|
Interrupt i IAR |
|
|
|
Oct 19 2005, 22:04
|
Местный
  
Группа: Свой
Сообщений: 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 И как видно перервание становится медленое. А мои функции совсем простенкие,такое сохранение регистров не нужно. Явно что то не так делаю. Как правилно ето делат?
|
|
|
|
|
 |
Ответов
|
Dec 20 2005, 10:32
|

Знающий
   
Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095

|
Цитата(Nikola Kirov @ Oct 20 2005, 02:04)  Необходимо переключат функции которъе въизъиваются на перервание. Сделал 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 И как видно перервание становится медленое. А мои функции совсем простенкие,такое сохранение регистров не нужно. Явно что то не так делаю. Как правилно ето делат? 2 Nikola Kirov Если эта тема вам еще интересна, то сохранение регистров можно отключить используя квалификатор __raw при определении функции обработчика прерывания, или если он не поддерживается вашей версией компилятора можно еще попробовать __noreturn, правда сохранение регистров (если это требуется) тогда ложится на вас...
|
|
|
|
Сообщений в этой теме
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 Nikola Kirov Проблем с переключение задач которъие въиполняется... Oct 20 2005, 08:18 BVU Цитата(Nikola Kirov @ Oct 20 2005, 12:18)Проб... Oct 20 2005, 08:49  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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|