Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

IAR как да #include <*.asm> във С++ сорс
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=2450
Страница 1 от 1

Автор:  adelin [ Чет Юни 01, 2006 10:10 am ]
Заглавие:  IAR как да #include <*.asm> във С++ сорс

Искам да добавя асемблерски фаил в IAR С++ проект но не знам как?
пробвах с #include <*.asm>, но компилатора реве и ....не става .
ако някой има повече опит моля да ми подскаже.

Автор:  Реконструктор [ Чет Юни 01, 2006 10:27 am ]
Заглавие: 

Не можеш. ASM файла се компилира до obj, и след това се линква.

Автор:  FiTTiLA [ Чет Юни 01, 2006 11:08 am ]
Заглавие:  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

Автор:  Dimitar [ Чет Юни 01, 2006 3:16 pm ]
Заглавие: 

Реконструктор написа:
Не можеш. ASM файла се компилира до obj, и след това се линква.

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

Автор:  miro_atc [ Чет Юни 01, 2006 3:45 pm ]
Заглавие: 

за С е точно така както го е описал fittila, за Ц++ функциите по прицип се указва и как трябва да се линкват, т.е. декларацията се слага в
extern "C" {... }
щото по подразбиране е С++, а ИАР-а не позволява С++ асемблерски функции (говоря за АРМ версията, но и за другите ще да е така).

Автор:  Nikola Kirov [ Чет Юни 01, 2006 4:01 pm ]
Заглавие: 

Ами на AVR ския не дава директно грешка но и не работеше нещо като се мъчих преди година с такова нещо.
Тогава стигнах до заключението че проблема е в различния начин на предаване на параметрите при C++,нали се предава и един параметър по подразбиране this.
Тогава ме домързя да изследвам анемблерския код за да видя как е правилно да го направя. Но Iar има режим да компилира в един и същ проект C i C++ код в зависимост от разширенията. за c са *.c и *.h а за C++ *.cpp и *.hpp

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

Автор:  t_i_t_o [ Чет Юни 01, 2006 5:42 pm ]
Заглавие: 

Dimitar написа:
Реконструктор написа:
Не можеш. ASM файла се компилира до obj, и след това се линква.

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

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

Автор:  Dimitar [ Чет Юни 01, 2006 5:50 pm ]
Заглавие: 

8)

Автор:  Реконструктор [ Пет Юни 02, 2006 9:21 am ]
Заглавие: 

t_i_t_o написа:
Dimitar написа:
Реконструктор написа:
Не можеш. ASM файла се компилира до obj, и след това се линква.

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

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


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

Автор:  adelin [ Пет Юни 02, 2006 10:21 am ]
Заглавие:  един пример

Dimitar написа:
Реконструктор написа:
Не можеш. ASM файла се компилира до obj, и след това се линква.

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





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

един пример

Автор:  FiTTiLA [ Пет Юни 02, 2006 10:45 am ]
Заглавие:  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

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/