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

 
 
> антипод модификатора __raw
ArtemKAD
сообщение Jun 22 2007, 11:12
Сообщение #1


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

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Появилась тут мысля. У IAR-а для не сохранения контекста в прерывании служит __raw. А есть ли его "антипод" - модификатор заставляющий IAR сохранить контекст некоторой функции (не прерывания) в стеке? help.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ArtemKAD
сообщение Jun 22 2007, 13:18
Сообщение #2


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

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата
вообщем смотри тут, пост номер 30

Ну собственно после той темы я и задался этим вопросом. Да и хотелось бы, чтобы сохранялись только используемые в функции регистры, а не все кроме возможных глобальных.

Сообщение отредактировал ArtemKAD - Jun 22 2007, 13:21
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jun 22 2007, 13:42
Сообщение #3


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(ArtemKAD @ Jun 22 2007, 16:18) *
Ну собственно после той темы я и задался этим вопросом. Да и хотелось бы, чтобы сохранялись только используемые в функции регистры, а не все кроме возможных глобальных.


так в том примере вызывается функция strcmp, а если все сделать руками, то сохранит только нужные регистры
Код
      6          //Также линкеру запретить w22
      7          #pragma diag_suppress=Ta006

   \                                 In segment CODE, align 2, keep-with-next
      8          __interrupt void IntLong(void)
   \                     IntLong:
      9          {
   \   00000000   93BA               ST      -Y, R27
   \   00000002   93AA               ST      -Y, R26
   \   00000004   93FA               ST      -Y, R31
   \   00000006   93EA               ST      -Y, R30
   \   00000008   931A               ST      -Y, R17
   \   0000000A   930A               ST      -Y, R16
   \   0000000C   B71F               IN      R17, 0x3F
     10            char *a=(char *)0x1234;
   \   0000000E   E3E4               LDI     R30, 52
   \   00000010   E1F2               LDI     R31, 18
     11            char *b=(char *)0x3456;
   \   00000012   E5A6               LDI     R26, 86
   \   00000014   E3B4               LDI     R27, 52
     12            while((*a++=*b++));
   \                     ??IntLong_0:
   \   00000016   910D               LD      R16, X+
   \   00000018   9301               ST      Z+, R16
   \   0000001A   2300               TST     R16
   \   0000001C   F7E1               BRNE    ??IntLong_0
     13          }
   \   0000001E   BF1F               OUT     0x3F, R17
   \   00000020   9109               LD      R16, Y+
   \   00000022   9119               LD      R17, Y+
   \   00000024   91E9               LD      R30, Y+
   \   00000026   91F9               LD      R31, Y+
   \   00000028   91A9               LD      R26, Y+
   \   0000002A   91B9               LD      R27, Y+
   \   0000002C   9518               RETI
     14          #pragma diag_default=Ta006


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st August 2025 - 19:05
Рейтинг@Mail.ru


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