Отговори на тема  [ 11 мнения ] 
IAR как да #include <*.asm> във С++ сорс 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Юни 01, 2006 9:43 am
Мнения: 2
Местоположение: Бургас
Мнение IAR как да #include <*.asm> във С++ сорс
Искам да добавя асемблерски фаил в IAR С++ проект но не знам как?
пробвах с #include <*.asm>, но компилатора реве и ....не става .
ако някой има повече опит моля да ми подскаже.


Чет Юни 01, 2006 10:10 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Не можеш. ASM файла се компилира до obj, и след това се линква.


Чет Юни 01, 2006 10:27 am
Профил
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Сря Май 11, 2005 3:47 pm
Мнения: 534
Мнение Re: IAR как да #include <*.asm> във С++ сорс
adelin написа:
Искам да добавя асемблерски фаил в IAR С++ проект но не знам как?
пробвах с #include <*.asm>, но компилатора реве и ....не става .
ако някой има повече опит моля да ми подскаже.


Като срещнах този проблем преди време, го реших по следния начин.
1. Трябва да добавиш asm файла към проекта
2. обяваваш функцията, която ползваш в .c от asm файла, като extern
Пример:
extern unsigned int Hex2BCD(unsigned int convert); //Hex to BCD conversion
3. В asm файла
Пример:
/********************************************************************************************/
#include "msp430x14x.h" ; Processor specific definitions

NAME EXTERNAL ; Тука трябва да опоменеш, че някой от вън ще я вика (най просто казано)

;============================================================================
; Hex2BCD
;============================================================================

------PUBLIC Hex2BCD ; Declare symbol to be exported
------RSEG CODE ; Code is relocatable
Hex2BCD;
----------clr R4
----------clrc
----------mov #0010h,R14
LOOP
----------rlc R12
----------dadd R4,R4
----------dec R14
----------cmp #0000h,R14
----------jnz LOOP
----------mov R4,R12
----------ret

END

/********************************************************************************************/
4. Можеш и директо да изпозваш InLine assemblera
Пример:
asm("MOV.B &P1IN,&flag");
това можеш да го видиш в IAR C/C++ Compiler -EW430_CompilerReference.pdf


Чет Юни 01, 2006 11:08 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
Реконструктор написа:
Не можеш. ASM файла се компилира до obj, и след това се линква.

Недей да си толкова сигурен 8) . Става много лесно и е както fittila го описва.


Чет Юни 01, 2006 3:16 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
за С е точно така както го е описал fittila, за Ц++ функциите по прицип се указва и как трябва да се линкват, т.е. декларацията се слага в
extern "C" {... }
щото по подразбиране е С++, а ИАР-а не позволява С++ асемблерски функции (говоря за АРМ версията, но и за другите ще да е така).


Чет Юни 01, 2006 3:45 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Ами на AVR ския не дава директно грешка но и не работеше нещо като се мъчих преди година с такова нещо.
Тогава стигнах до заключението че проблема е в различния начин на предаване на параметрите при C++,нали се предава и един параметър по подразбиране this.
Тогава ме домързя да изследвам анемблерския код за да видя как е правилно да го направя. Но Iar има режим да компилира в един и същ проект C i C++ код в зависимост от разширенията. за c са *.c и *.h а за C++ *.cpp и *.hpp

и си направих работата с асемблерския код през част от кода дето е на C


Чет Юни 01, 2006 4:01 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Вто Окт 25, 2005 10:54 am
Мнения: 896
Мнение 
Dimitar написа:
Реконструктор написа:
Не можеш. ASM файла се компилира до obj, и след това се линква.

Недей да си толкова сигурен 8) . Става много лесно и е както fittila го описва.

Що си мислиш че в случая на фитила файла няма да се компилира до "obj" 8)


Чет Юни 01, 2006 5:42 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
8)


Чет Юни 01, 2006 5:50 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
t_i_t_o написа:
Dimitar написа:
Реконструктор написа:
Не можеш. ASM файла се компилира до obj, и след това се линква.

Недей да си толкова сигурен 8) . Става много лесно и е както fittila го описва.

Що си мислиш че в случая на фитила файла няма да се компилира до "obj" 8)


Именно. Много по-лсено ми се вижда да си го компайлна до obj и да си го линквам после където ми трябва. :) Проблема е, че трябва да се напише h файл за c-то, но това, мисля, се подразбира.


Пет Юни 02, 2006 9:21 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Юни 01, 2006 9:43 am
Мнения: 2
Местоположение: Бургас
Мнение един пример
Dimitar написа:
Реконструктор написа:
Не можеш. ASM файла се компилира до obj, и след това се линква.

Недей да си толкова сигурен 8) . Става много лесно и е както fittila го описва.





направи един прост пример за да видя в *.С и във *.ASM файловете какво и как се декларира и като го компилирам да работи .
Ясно че е проста работа обаче аз съм на вие с тази материя (програмирането на високо ниво) и вече много време изгубих и не става и не става.

един пример


Пет Юни 02, 2006 10:21 am
Профил ICQ
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Сря Май 11, 2005 3:47 pm
Мнения: 534
Мнение Re: един пример
adelin написа:
...


От c++:
1.main.cpp
extern "C" {
--------void ASM_CALL( void);
};

int main( void )
{
--------char p=0;
--------p++;
--------ASM_CALL();
--------return 0;
}

2.asm.s43
--------NAME EXTERNAL
--------PUBLIC ASM_CALL
--------RSEG CODE

ASM_CALL
--------nop
--------nop
--------nop
--------ret
END


Пет Юни 02, 2006 10:45 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 11 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 9 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни