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

 
 
> Как сделать асемблернуую вставку?
Professor
сообщение May 12 2006, 17:59
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 35
Регистрация: 12-05-06
Из: Украина Харьков
Пользователь №: 17 045



Как сделать асемблерную вставку в IAR Systems Ew23 Evaluation version? Был бы очень признателен за помощ....
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 13)
haker_fox
сообщение May 13 2006, 05:16
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(Professor @ May 13 2006, 02:59) *
Как сделать асемблерную вставку в IAR Systems Ew23 Evaluation version? Был бы очень признателен за помощ....

Для одной строки я делал так
asm("NOP");


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 13 2006, 07:40
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата([banned] @ May 12 2006, 22:08) *
у крутых IAR и Keil асм вставки ПО МОЕМУ в виде отдельных файлов нужно делать.

Не нужно, но вне зависимости от "крутости" крайне желательно, по причине того, что С компилятор
не разбирается во вставленном ASM коде и вынужден относиться к нему как к "черному ящику".
Поскольку что ждать от ящика непонятно, то компилятору приходится, как минимум, ломать оптимизацию кода в предположении, что вставленный кусок мог попортить любые регистры.

А "профессору" - документы идущие с компилятором НАДО чититать. Просто возьмите за правило постепенно перед сном методично читать, пока не прочитаете от корки до корки.
Если "срочно" - ищите '__asm' в разделе extended keywords.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Professor
сообщение May 13 2006, 09:56
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 35
Регистрация: 12-05-06
Из: Украина Харьков
Пользователь №: 17 045



Цитата(haker_fox @ May 13 2006, 08:16) *
Цитата(Professor @ May 13 2006, 02:59) *

Как сделать асемблерную вставку в IAR Systems Ew23 Evaluation version? Был бы очень признателен за помощ....

Для одной строки я делал так
asm("NOP");


Про эту фишку я знал... Дело как раз в том... Что на асемблере надо реализовать целую функцию.... А не одну команду...

Сообщение отредактировал Professor - May 13 2006, 09:58
Go to the top of the page
 
+Quote Post
Professor
сообщение May 13 2006, 10:06
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 35
Регистрация: 12-05-06
Из: Украина Харьков
Пользователь №: 17 045



Цитата(zltigo @ May 13 2006, 10:40) *
Цитата([banned] @ May 12 2006, 22:08) *

у крутых IAR и Keil асм вставки ПО МОЕМУ в виде отдельных файлов нужно делать.

А "профессору" - документы идущие с компилятором НАДО чититать. Просто возьмите за правило постепенно перед сном методично читать, пока не прочитаете от корки до корки.
Если "срочно" - ищите '__asm' в разделе extended keywords.


Я читал...
Что я нашел:
1. If any assembler-specific additions are needed in the header file, these can be added
easily in the assembler-specific part of the file:
#ifdef __IAR_SYSTEMS_ASM__
(assembler-specific defines)
#endif

2. The asm keyword assembles and inserts the supplied assembler statement in-line, for
example:
asm("MOV R4,R7");

Первое не работает .... Как я только не пытался.... И в С файле создавать вставку и в h.....
Второе только для одной строки а значит не подходит..... Т. к. надо реализовать целую функцию на асемблере... Может есть какие-нибудь еще способы?

Сообщение отредактировал Professor - May 13 2006, 10:07
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 13 2006, 10:29
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Professor @ May 13 2006, 13:06) *
Я читал...


Читаем ЕЩЕ раз особенно слова "You can write several consecutive inline assembler instructions":

Код
asm, __asm
The asm and __asm extended keywords both insert an assembler instruction. However, when compiling C source code, the asm keyword is not available when the option --strict_ansi is used. The __asm keyword is always available.
Note: Not all assembler directives and operators can be inserted using this keyword.
Syntax
asm ("string");
The string can be a valid assembler instruction or an assembler directive, but not a comment. You can write several consecutive inline assembler instructions, for example:

asm ("Label:  nop\n"
     "        b Label");
where \n (new line) separates each new assembler instruction. Note that you can define and use local labels in inline assembler instructions.

For more information about inline assembler, see the ARM® IAR C/C++ Compiler Reference Guide.


Только зачем эти извращения я не знаю :-( Берете и пишете по человечески......


Цитата
1. If any assembler-specific additions are needed in the header file, these can be added

А это не может не работать. Просто это из "другой оперы".


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Professor
сообщение May 13 2006, 10:43
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 35
Регистрация: 12-05-06
Из: Украина Харьков
Пользователь №: 17 045



Цитата(zltigo @ May 13 2006, 13:29) *
Цитата(Professor @ May 13 2006, 13:06) *

Я читал...


asm ("Label: nop\n"
"b Label");


Такой вид записи я тоже делал.... При нем не работают МЕТКИ.....
Которые при написании функции очень нужны..... Неполучается сослаться н аметку... Не получается создать метку....
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 13 2006, 11:16
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Professor @ May 13 2006, 13:43) *
asm ("Label: nop\n"
"b Label");

Такой вид записи я тоже делал.... При нем не работают МЕТКИ.....

Ага, при этом пример именно с меткой. Не поленился. Специально впихнул этот кусок - работает, как и обещано.
А вообще какие релиозные соображения мешают писать на нормальном ASM?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Professor
сообщение May 13 2006, 11:46
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 35
Регистрация: 12-05-06
Из: Украина Харьков
Пользователь №: 17 045



Цитата(zltigo @ May 13 2006, 14:16) *
Цитата(Professor @ May 13 2006, 13:43) *


asm ("Label: nop\n"
"b Label");

Такой вид записи я тоже делал.... При нем не работают МЕТКИ.....

Ага, при этом пример именно с меткой. Не поленился. Специально впихнул этот кусок - работает, как и обещано.
А вообще какие релиозные соображения мешают писать на нормальном ASM?


Работает в компиляторе IAR Systems Ew23 Evaluation version???? Я сделая таким образом..... Вставил иммено этто код... Вот все ошибки которые при этом выдол компилятор....

Error[Og005]: Unknown symbol in inline assembly: "Label"
Error[Og006]: Syntax error in inline assembly: "Error[40]: Bad instruction"
Error[Og005]: Unknown symbol in inline assembly: "Label"
Error[Og006]: Syntax error in inline assembly: "Error[40]: Bad instruction"
Error[Og005]: Unknown symbol in inline assembly: "Label"
Error[Og006]: Syntax error in inline assembly: "Error[40]: Bad instruction"
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 13 2006, 13:34
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Professor @ May 13 2006, 14:46) *
Работает в компиляторе IAR Systems Ew23 Evaluation version????

Нет в другом - ARMовском. Это я насчет 'b' :-)

Повторяю ТРЕТИЙ раз - зачем Вам inline????
Вы какой-то уже готовый проект собираете??? Там скорее всего уже есть какой-либо ассемблерный файл типа startup - ну и впишите на крайний случай прямо в него свою супер функцию.
Если вдруг нет создайте собственный и запихните его в проект. Проблема выеденного яйца не стоит.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Professor
сообщение May 13 2006, 13:54
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 35
Регистрация: 12-05-06
Из: Украина Харьков
Пользователь №: 17 045



Цитата(zltigo @ May 13 2006, 16:34) *
Цитата(Professor @ May 13 2006, 14:46) *

Работает в компиляторе IAR Systems Ew23 Evaluation version????

Нет в другом - ARMовском. Это я насчет 'b' :-)

Повторяю ТРЕТИЙ раз - зачем Вам inline????
Вы какой-то уже готовый проект собираете??? Там скорее всего уже есть какой-либо ассемблерный файл типа startup - ну и впишите на крайний случай прямо в него свою супер функцию.
Если вдруг нет создайте собственный и запихните его в проект. Проблема выеденного яйца не стоит.


Мне посоветовали сделать вставку таким образом.....
//*******************************************************
Можете написать отдельный ассемблерный файл.
Например:
#include "iotiny2313.h"

PUBLIC set_int
RSEG CODE

set_int:
bset 7 ;разрешение прерываний
out TIMSK,R16 ;TOIE0=1
ret
END set_int



В файле Си объявляете эту функцию:


extern __version_1 void set_int(char);
extern char extern_data;

void main (void)
{
set_int(0x34);
}
//*****************************************

Как сделать этот асемблерный файл?
Как его пристигнуть к проекту?
Подскажите пожалуйста.... Если вы в курсе.....
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 13 2006, 14:01
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Professor @ May 13 2006, 16:54) *
Как сделать этот асемблерный файл?
Как его пристигнуть к проекту?
Подскажите пожалуйста.... Если вы в курсе.....

"Сделать" - тестовым редактором.
"Пристегнуть" - а как Вы C "пристегивали" - ТОЧНО ТАК-ЖЕ.
По всем нюансам "процесса" - документацию читать надо на КОНКРЕТНЫЙ пакет.
В комплекте с IAR еще и примеров немало.....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_artem_
сообщение May 13 2006, 14:34
Сообщение #13


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



u menja vse OK compiliruetsya :

Код
__eeprom unsigned char ee_char_buf[CHAR_BSIZE];
unsigned char __eeprom *ee_ch_ptr;  // rigth

int main( void )
{
    volatile char temp;
    
    ee_ch_ptr = ee_char_buf;

    while (1)
    {

        asm("nop\n"
        "label: \n"
            "nop\n"
            "rjmp label");
        
        
        if(temp != 0)
            *FIRST_PARAM=0x10;

        if (temp == 0)
            temp = *FIRST_PARAM;

    }
}


" IAR C/C++ Compiler for AVR 4.12A/W32 [Evaluation] (4.12.1.3)"


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
Professor
сообщение May 13 2006, 18:40
Сообщение #14


Участник
*

Группа: Новичок
Сообщений: 35
Регистрация: 12-05-06
Из: Украина Харьков
Пользователь №: 17 045



Всем за все ОГРОМНОЕ спасибо... У меня все ПОЛУЧИЛОСЬ, ЗАРАБОТАЛО...
Go to the top of the page
 
+Quote Post

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

 


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


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