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

 
 
> Mix C++ и Asm в IAR EW AVR 4.21A
Turion
сообщение Jun 22 2007, 08:59
Сообщение #1





Группа: Новичок
Сообщений: 9
Регистрация: 28-11-05
Пользователь №: 11 498



Надеюсь здесь кто-нибудь поможет. В IAR C/C++ Compiler Reference Guide в разделе Assembler language interface приведен пример:

bool flag;
void foo()
{
while (!flag)
{
asm("IN R0,PIND \n
STS flag,R0");
}
}

Я пишу свою функцию:

unsigned short ModBus::CRC16Test(void *Ptr,unsigned char Lenght)
{
unsigned char *Data = (unsigned char *)Ptr;
unsigned char CRCH = 0xFF;
unsigned char CRCL = 0xFF;

unsigned char Byte;
unsigned char Temp;

for(unsigned char i = 0;i < Lenght;i++)
{
Byte = Data[i];

asm(" EOR CRCL,Byte ");
asm(" MOV Temp,CRCL ");
..........................
..........................

И стабильно получаю собщение, что CRCL,Byte,Temp не распознаны типа:

Error[Og005]: Unknown symbol in inline assembly: "CRCL"

Error[Og006]: Syntax error in inline assembly: "Error[43]: Illegal effective address"

Подскажите пожалуйста, как это побороть, мне нужен именно кусок Asm в теле С++ функции.

Сообщение отредактировал Turion - Jun 22 2007, 09:01
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
andrvisht
сообщение Jun 22 2007, 09:44
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(Turion @ Jun 22 2007, 11:59) *
asm(" EOR CRCL,Byte ");
asm(" MOV Temp,CRCL ");


__no_init __regvar unsigned char CRCL @ 15;
__no_init __regvar unsigned char Byte @ 14;
__no_init __regvar unsigned char Temp @ 13;

и в Option/C/C++/Code зарезервировать 3 регистра
Код
  asm(" EOR    r15,r14
  asm("    MOV    r13,r15 ");


НО, никогда так не делайте

компилятор не учитывает ваши асмовские попытки, и при оптимизации вы получите сюрприз.
Дочитайте раздел до конца, и оформляйте асмовские функции отдельно, тут слегка на русском
http://electronix.ru/forum/index.php?act=A...ost&id=7393
Go to the top of the page
 
+Quote Post



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

 


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


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