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

 
 
> Неверный эпилог __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



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

 


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


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