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

 
 
> 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
Ответов
IgorKossak
сообщение Mar 5 2008, 07:05
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Ассемблерную строку надо заканчивать символом \n
См. в описании компилятора главу INLINE ASSEMBLER.
Пример из описания:
Код
bool flag;
void foo()
{
  while (!flag)
  {
    asm(" ldr r2,[pc,#0] \n"     /* r2 = address of flag */
    " b .+8 \n"                        /* jump over constant */
    " DCD flag \n"                   /* address of flag */
    " ldr r3,[pc,#0] \n"            /* r3 = address of PIND */
    " b .+8 \n"                        /* jump over constant */
    " DCD PIND \n"                /* address of PIND */
    " ldr r0,[r3] \n"                 /* r0 = PIND */
    " str r0,[r2]");                  /* flag = r0 */
  }
}

Хотя может и не в этом дело.
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Mar 5 2008, 07:08
Сообщение #3


Местный
***

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



Цитата(IgorKossak @ Mar 5 2008, 10:05) *
Ассемблерную строку надо заканчивать символом \n
См. в описании компилятора главу INLINE ASSEMBLER.


Да пробовал и с \n:

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


Ошибки те-же в тех-же местах.
ЗЫ большие-маленькие мнемоники я тоже пробовал, и названия регистров тоже wink.gif
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
|- - 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
- - GetSmart   Цитата(Сергей Борщ)Цитата(repairDV @ Mar 5 2008 ...   Mar 5 2008, 14:04
- - repairDV   Цитата(GetSmart @ Mar 6 2008, 00:04) Стра...   Mar 5 2008, 14:15
- - Сергей Борщ   Цитата(GetSmart @ Mar 5 2008, 16:04) Нет....   Mar 5 2008, 15:44


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

 


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


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