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

 
 
> Неверный эпилог __arm __irq __nested прерывания, создаваемый IAR ARM 4.30
GetSmart
сообщение Oct 26 2009, 11:11
Сообщение #1


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Объявлено такое прерывание
Код
__arm __irq __nested void Interrupt()
{
.....
}

при этом код, генеримый IAR 4.20:
Код
   \   00000000   04E04EE2           SUB         LR,LR,#+0x4
   \   00000004   00402DE9           STMDB       SP!,{LR}
   \   00000008   00E04FE1           MRS         LR,SPSR
   \   0000000C   00502DE9           STMDB       SP!,{R12,LR}
   \   00000010   00E00FE1           MRS         LR,CPSR
   \   00000014   1FE08EE3           ORR         LR,LR,#+0x1F
   \   00000018   0EF029E1           MSR         CPSR,LR
   \   0000001C   FF012DE9           STMDB       SP!,{R0-R8}     ;; Push
...............
   \   00000134   FF01BDE8           LDMIA       SP!,{R0-R8}     ;; Pop
   \   00000068   00C00FE1           MRS         R12,CPSR
   \   0000006C   92C08CE3           ORR         R12,R12,#+0x92
   \   00000070   0DC0CCE3           BIC         R12,R12,#+0xD
   \   00000074   0CF029E1           MSR         CPSR,R12
   \   00000078   0050BDE8           LDMIA       SP!,{R12,LR}
   \   0000007C   0EF069E1           MSR         SPSR,LR
   \   00000080   0080FDE8           LDMIA       SP!,{PC}^    ;; return

теперь код, генеримый IAR 4.30:
Код
   \   00000000   04E04EE2           SUB         LR,LR,#+0x4
   \   00000004   04E02DE5           STR         LR,[SP, #-4]!
   \   00000008   00E04FE1           MRS         LR,SPSR
   \   0000000C   00502DE9           STMDB       SP!,{R12,LR}
   \   00000010   00E00FE1           MRS         LR,CPSR
   \   00000014   1FE08EE3           ORR         LR,LR,#+0x1F
   \   00000018   0EF029E1           MSR         CPSR,LR
   \   0000001C   FF012DE9           STMDB       SP!,{R0-R8}     ;; Push
...............
   \   00000144   FF01BDE8           LDMIA       SP!,{R0-R8}     ;; Pop
   \   00000068   00C00FE1           MRS         R12,CPSR
   \   0000006C   92C08CE3           ORR         R12,R12,#+0x92
   \   00000070   0DC0CCE3           BIC         R12,R12,#+0xD
   \   00000074   0CF029E1           MSR         CPSR,R12
   \   00000078   0050BDE8           LDMIA       SP!,{R12,LR}
   \   0000007C   0EF069E1           MSR         SPSR,LR
   \   00000080   ........           LDR         PC,[SP], #+0x4;; return
--следующая строчка взята из прошивки, т.к. в листинге почему-то пропущен код последней операции
   \   00000080   E49DF004  LDR          PC, [SP], #+4

теперь код, генеримый IAR 4.42:
Код
   \   00000000   04E04EE2           SUB      LR,LR,#+4
   \   00000004   04E02DE5           STR      LR,[SP, #-4]!
   \   00000008   00E04FE1           MRS      LR,SPSR
   \   0000000C   00502DE9           STMDB    SP!,{R12,LR}
   \   00000010   00E00FE1           MRS      LR,CPSR
   \   00000014   1FE08EE3           ORR      LR,LR,#0x1F
   \   00000018   0EF029E1           MSR      CPSR,LR
   \   0000001C   FF012DE9           PUSH     {R0-R8}
...............
   \   00000144   FF01BDE8           POP      {R0-R8}
   \   00000148   00C00FE1           MRS      R12,CPSR
   \   0000014C   92C08CE3           ORR      R12,R12,#0x92
   \   00000150   0DC0CCE3           BIC      R12,R12,#0xD
   \   00000154   0CF029E1           MSR      SPSR,R12
   \   00000158   0050BDE8           LDM      SP!,{R12,LR}
   \   0000015C   0EF069E1           MSR      SPSR,LR
   \   00000160   0080FDE8           LDM      SP!,{PC}^     ;; return

Обратите внимание на последнюю команду от IAR 4.30. По сути нет выхода из прерывания (аппаратного копирования SPSR в CPSR) и проц продолжает работать в режиме прерывания.
Глюк ну очень похожий на описанный в этой теме
http://electronix.ru/forum/index.php?showt...mp;#entry650548
разные разработчики компилеров, но грабли у них стандартные. Каждый уважающий себя разработчик компилеров обязан встать на стандартные грабли biggrin.gif

Предлагаю создать тему о багах IARa в шапке "Кросплатформенный компилятор IAR" и постить там только ссылки на другие темы, с конкретным описанием бага и версии IARа. Если кто поддерживает - отпишитесь.

Сообщение отредактировал GetSmart - Oct 26 2009, 11:28


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Oct 26 2009, 12:23
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Я уже как минимум 4 раза встал на разные баги в IAR 4.20 и 4.30 и отписывался здесь. Во всех случаях исходник был 100% корректный. В двух из них было константное условие в IFе, и это проблема IARа, а не моя, что они некорректно оптимизируют (!) такие вещи, потому как на средней и менее оптимизациях обе этих ситуации работали. И будут работать во всех нормально писанных компиляторах.

Цитата(zltigo @ Oct 26 2009, 18:14) *
P.S.
Вложенные прерывания я за всю жизнь использовал считанные разы и то для выживания резидентных программ в DOS, как чужой системе. Допускаю их использование в качестве полухалтурного решения для чего-нибудь маленького периферийного на мелком восьмибитовике.

Вложенные прерывания - гениальная весчь в умелых руках. Не надо ля-ля smile.gif
А вложенные софтовые прерывания - вообще наше всё!
Конечно, это не относится к примитивным моргалкам светодиодов.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
VslavX
сообщение Oct 26 2009, 15:58
Сообщение #3


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(GetSmart @ Oct 26 2009, 14:23) *
Я уже как минимум 4 раза встал на разные баги в IAR 4.20 и 4.30

+1. Я начинал с версии 4.11 - там раз в неделю что-то генерилось не так, особенно он длинные (с телом на экран и более строчек) циклы недолюбливал. 4.20 - уже значительно реже - пару раз всего. Начиная с 4.30 проблем вроде особых не было.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 10:00
Рейтинг@Mail.ru


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