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

 
 
> C+ASM - помогите, Не понимаю, чего ему не нравится
Kitsok
сообщение Mar 5 2008, 05:45
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Всем приветы!

Ткскзть двое суток без сна, не могу победить простую вещь.

Имеется IAR 4.41, пытаюсь сделать ассемблерную вставку, не выходит:

Код
static inline portDISABLE_INTERRUPTS(void)
{      
  asm (" STMDB    SP!, {R0}");
  asm (" MRS    R0, CPSR");
  asm (" ORR R0,R0,#0x80");
  asm (" MSR CPSR,R0");
  asm (" LDMIA    SP!, {R0}");
}


В ответ получаю
Код
Error[Og006]: Syntax error in inline assembly: "Error[401]: Operand syntax error" c:\PTJoy\new\firmware\ptjoy\FreeRTOS\Source\portable\IAR\SAM7S256\portmacro.h 93
Error[Og006]: Syntax error in inline assembly: "Error[401]: Operand syntax error" c:\PTJoy\new\firmware\ptjoy\FreeRTOS\Source\portable\IAR\SAM7S256\portmacro.h 94
Error[Og006]: Syntax error in inline assembly: "Error[401]: Operand syntax error" c:\PTJoy\new\firmware\ptjoy\FreeRTOS\Source\portable\IAR\SAM7S256\portmacro.h 95


По-хорошему, нужно делать #define'ом, но там то-же самое, только без номеров строк wink.gif

Ткните пожалуйста, что я делаю не так. Процессор - ARM7.

Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Mar 5 2008, 14:04
Сообщение #2


.
******

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



Цитата(Сергей Борщ)
Цитата(repairDV @ Mar 5 2008 @ 14:35)
А этот ассемблер, который внутри процедуры Си, полнофункциональный? Условные - безусловные переходы на метки поддерживает?
Нет. Это даже не ассемблер, а так, некий костыль чтобы вставить NOP.
Странно. У меня поддерживал всегда. Постоянно оптимизированные циклы строчил на асме. IAR 4.20.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 5 2008, 15:44
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(GetSmart @ Mar 5 2008, 16:04) *
Нет. Это даже не ассемблер, а так, некий костыль чтобы вставить NOP.Странно. У меня поддерживал всегда. Постоянно оптимизированные циклы строчил на асме. IAR 4.20.
Ну, я собственно пересказал вот это:
Цитата
Inline assembler sequences have no well-defined interface with the surrounding code generated from your C or C++ code. This makes the inline assembler code fragile, and will possibly also become a maintenance problem if you upgrade the compiler in the future. In addition, there are several limitations to using inline assembler:
● The compiler’s various optimizations will disregard any effects of the inline sequences, which will not be optimized at all
● The directives CODE16 and CODE32 will cause errors; several other directives cannot be used at all
● Alignment cannot be controlled; this means, for example, that DC32 directives may be misaligned
● Auto variables cannot be accessed
● Alternative register names, mnemonics, and operators are not supported; read more about the -j assembler option in the ARM® IAR Assembler Reference Guide.
Inline assembler is therefore often best avoided. If there is no suitable intrinsic function available, we recommend the use of modules written in assembler language instead of inline assembler, because the function call to an assembler routine normally causes less performance reduction.
Интересно, чем "will cause errors" отличается от "cannot be used at all" smile.gif Про метки и переходы я, похоже, погорячился.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Kitsok   C+ASM - помогите   Mar 5 2008, 05:45
- - tag   Код asm (" MRS R0, CPSR"); asm ...   Mar 5 2008, 06:31
|- - Kitsok   Цитата(tag @ Mar 5 2008, 09:31) В этих ко...   Mar 5 2008, 06:46
- - IgorKossak   Ассемблерную строку надо заканчивать символом ...   Mar 5 2008, 07:05
|- - Kitsok   Цитата(IgorKossak @ Mar 5 2008, 10:05) Ас...   Mar 5 2008, 07:08
|- - Andy Mozzhevilov   Цитата(Kitsok @ Mar 5 2008, 12:08) Ошибки...   Mar 5 2008, 07:15
- - IgorKossak   Взял Вашу функцию один к одному, скомпилировал, ни...   Mar 5 2008, 07:21
|- - Kitsok   Цитата(IgorKossak @ Mar 5 2008, 10:21) Вз...   Mar 5 2008, 07:31
- - Andy Mozzhevilov   более правильный код для запрещения прерываний на ...   Mar 5 2008, 07:35
|- - Kitsok   Цитата(Andy Mozzhevilov @ Mar 5 2008, 10...   Mar 5 2008, 07:54
|- - Сергей Борщ   Цитата(Andy Mozzhevilov @ Mar 5 2008, 09...   Mar 5 2008, 10:08
|- - Kitsok   Вот на этом while'е оно и встанет Точка с зап...   Mar 5 2008, 11:33
|- - Сергей Борщ   Цитата(Kitsok @ Mar 5 2008, 13:33) Вот на...   Mar 5 2008, 12:41
- - Andy Mozzhevilov   Не могу сейчас быстро найти соответсвующий раздел ...   Mar 5 2008, 08:15
- - repairDV   А этот ассемблер, который внутри процедуры Си, пол...   Mar 5 2008, 12:35
- - repairDV   Цитата(GetSmart @ Mar 6 2008, 00:04) Стра...   Mar 5 2008, 14:15


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

 


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


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