|
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 И как видно перервание становится медленое. А мои функции совсем простенкие,такое сохранение регистров не нужно. Явно что то не так делаю. Как правилно ето делат?
|
|
|
|
|
 |
Ответов
|
Oct 20 2005, 08:18
|
Местный
  
Группа: Свой
Сообщений: 256
Регистрация: 4-11-04
Из: Болгария
Пользователь №: 1 050

|
Проблем с переключение задач которъие въиполняется на перервание слишком сериознъи. Я просто удивлен что такая фирма как IAR так подходит к етому вопросу. У меня ест одна идея Код #pragma vector = 0x1000 __interrupt void Usart_Trnasmit() { ------------- ------------- } так обявляем функции которъие нада переключат проблем как организироват само переключение если захочу поставит __task void TrInterrupt(void) @ USART_TXC_vect и там в асме переходит к нужнои функции компилер ругается что на етот адрес могу толко __interrupt ставит.
|
|
|
|
|
Oct 20 2005, 08:49
|

Профессионал
    
Группа: Свой
Сообщений: 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' - надо подумать.
--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
|
|
|
|
|
Oct 20 2005, 13:11
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата(BVU @ Oct 20 2005, 11:49) в классических системах это делается немного по другому. В теле Вашего прерывания должен находиться переход (call) на адрес расположенный в оперативной памяти (строго фиксировано), где размещается еще один вызов функции (переключение на функцию) адресс которой подставляется (настраивается в данный момент времени) в зависимости от логики работы программы. Так Вы получаете расширение ресурсов своего преравания. Что касается скорости выполнения, то здесь теряется время на дополнительный вызов. На asm это реализуется просто, как это сделать корректно на 'C' - надо подумать. С AVR это не пройдет, так как адресное пространство кода и данных раздельное и сегменты кода во flash лежать обычно.
|
|
|
|
|
Oct 20 2005, 13:27
|

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

|
Цитата(VladislavS @ Oct 20 2005, 17:11) Цитата(BVU @ Oct 20 2005, 11:49) в классических системах это делается немного по другому. В теле Вашего прерывания должен находиться переход (call) на адрес расположенный в оперативной памяти (строго фиксировано), где размещается еще один вызов функции (переключение на функцию) адресс которой подставляется (настраивается в данный момент времени) в зависимости от логики работы программы. Так Вы получаете расширение ресурсов своего преравания. Что касается скорости выполнения, то здесь теряется время на дополнительный вызов. На asm это реализуется просто, как это сделать корректно на 'C' - надо подумать. С AVR это не пройдет, так как адресное пространство кода и данных раздельное и сегменты кода во flash лежать обычно. Да, конечно же... AVR имеет архитектуру гарвардского типа.  Если бы не высокая производительность выполнения команд, AVR бы проигравал со своей системой прерывания во всех отношениях... Надо подумать как это обойти?!
--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
|
|
|
|
Сообщений в этой теме
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    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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|