| Микроконтролери и електроника 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> във С++ сорс | |||||||||
Като срещнах този проблем преди време, го реших по следния начин. 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 ] | |||||||||
| Заглавие: | ||||||||||
Недей да си толкова сигурен |
||||||||||
| Автор: | 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 ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Що си мислиш че в случая на фитила файла няма да се компилира до "obj" |
|||||||||||||||||||
| Автор: | Dimitar [ Чет Юни 01, 2006 5:50 pm ] |
| Заглавие: | |
| Автор: | Реконструктор [ Пет Юни 02, 2006 9:21 am ] | |||||||||||||||||||||||||||
| Заглавие: | ||||||||||||||||||||||||||||
Именно. Много по-лсено ми се вижда да си го компайлна до obj и да си го линквам после където ми трябва. |
||||||||||||||||||||||||||||
| Автор: | adelin [ Пет Юни 02, 2006 10:21 am ] | ||||||||||||||||||
| Заглавие: | един пример | ||||||||||||||||||
направи един прост пример за да видя в *.С и във *.ASM файловете какво и как се декларира и като го компилирам да работи . Ясно че е проста работа обаче аз съм на вие с тази материя (програмирането на високо ниво) и вече много време изгубих и не става и не става. един пример |
|||||||||||||||||||
| Автор: | FiTTiLA [ Пет Юни 02, 2006 10:45 am ] | |||||||||
| Заглавие: | Re: един пример | |||||||||
От 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/ |
|