Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Возврат значения в регистре R0
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Dot
По соглашению, Keil С компилятор возвращает значение функции в R0.
Если я пишу функцию полностью на ассемблере, то такой код
Код
unsigned int my_function(int param1, char param2) __arm
{
__asm{
 ...........
 MOV  R0,...   //return value in R0
 }//asm
}

приводит к генерации компилятором предупреждения "no return value".

Есть ли способ сказать компилятору, что я действительно возвращаю значение в R0?

Это просто вопрос перфекциониста.
sergeeff
Три варианта решения:
1. Написать процедуру на ассемблере, ассемблером скомпилировать и прилинковать ко всему остальому на С.
2. Сделать так:
unsigned int my_function(int param1, char param2) __arm
{
unsigned int result;
__asm{
...........
MOV R0,... //return value in R0
MOV result, R0
}//asm
}
3. Если компилятор поддерживает объявление функции типа __declspec( naked ) (я IAR’ом никогда не пользовался), то объявляешь функцию с этим параметром, который подавляет генерацию пролога/эпилога компилятором и тогда все в твоих руках.

Успехов
Dot
Спасибо за отклик,
еще раз подчеркну, что все и так работает как надо, просто раздражают ненужные предупреждения, особенно когда их много.

По 2-- все так, только концовка пишется иначе:

MOV R0,... //return value in R0
LDR R1,=result
STR R0,[R1]
}//asm
return (result);
}

что приводит к генерации кучи ненужного кода ("из пустого в порожнее").

По 3 -- есть атрибут __task для объявления функции (использую uVision, компилятор от Keil), который подавляет генерацию пролога-эпилога, вот только функция эта должна быть строго void function(void).
Andy Mozzhevilov
Цитата(Dot @ Oct 15 2005, 18:56)
Спасибо за отклик,
еще раз подчеркну, что все и так работает как надо, просто раздражают ненужные предупреждения, особенно когда их много.


Так совет под #1 самый верный. Зачем писать функцию на Си, если фактически она написана на асме? Ее и надо написать на асме, в асмовском файле, объявить ее глобальной, в каком-нибудь сишном h-файле объявить ее прототип и спокойно вызывать из С без всякой ругани компилятора.
Dot
Я еще ни разу так не делал, поэтому ничего сказать не могу. Могу только предположить некоторую муторность такого метода. И ухудшение этой самой "сопровождаемости". Пока я просто смирился.
Andy Mozzhevilov
Цитата(Dot @ Oct 17 2005, 22:04)
Я еще ни разу так не делал, поэтому ничего сказать не могу. Могу только предположить некоторую муторность такого метода.

в чем муторность?

Цитата
И ухудшение этой самой "сопровождаемости". 

в чем ухудшение?

Цитата
Пока я  просто смирился.
*

ну и зря. В куже никчемных предупреждений легко незаметить критическое.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.