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

GCC и ARM SWI функции
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=4161
Страница 1 от 1

Автор:  miro_atc [ Пон Май 07, 2007 11:25 am ]
Заглавие:  GCC и ARM SWI функции

Портвам от IAR на GCC... Системните ми функции са направени като SWI функции, т.е. викат се чрез SWI а не с CALL (BL/BX) и се чудя как да го реализирам това на GCC.
Мога да си направя wrapper функции в които на асемблер да ползвам SWI инструкции, но това ми изглежда като груба селска проява. Ще пробвам с макроси или inline функции, мисълта ми ако някой е борел нещо в тая насока да не откривам топлата вода...

Автор:  шопов [ Пон Май 07, 2007 5:23 pm ]
Заглавие: 

Може да пробваш нещо такова:

#define CALL_FOO() asm("swi #0")

Автор:  miro_atc [ Пон Май 07, 2007 6:14 pm ]
Заглавие: 

shopov написа:

#define CALL_FOO() asm("swi #0")



това предполагам ще вмъкне swi инструкцията, но предполагам ще остане много изненадано че след SWI интрукцията {R0-R3, R12} са омазани....
Освен това трябва да подавам параметри и да връщам резултат....
Всъщност, намерих някакъв пример:

Код:
#define MY_SWI_CALL_PARAM(MY_SWI_ID, MY_PARAM, MY_RESULT) \
   asm volatile( \
   "mov r0,%1  \t\n" \
   "swi %a2     \n\t" \
   "mov %0,r0  \n\t" \
   : "=r" (MY_RESULT) : "r" (MY_PARAM), "I" (MY_SWI_ID) : "r0", "lr" )



не че ми харесва, но едва ли ще намеря по-добро решение, дано поне работи че автора на тоя код има разни притеснителни коментари ;-)

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