|
Keil: как из C-программы вызвать процедуру на ассемблере, чтение нудной кейловской документации е помогает :( |
|
|
|
Mar 25 2007, 23:01
|

unexpected token
   
Группа: Свой
Сообщений: 899
Регистрация: 31-08-06
Из: Мехелен, Брюссель
Пользователь №: 19 987

|
Люди, помогите тупому! Есть проект в Keil, написанный на C51. Есть модуль для управления индукатором, написанный на ASM51. Хочется из основной С-программы, вызывать ассемблерные рутины. Каким макаром это можно сделать? Как надо правильно объявить процедуру? Из кейловской документации, честно признаюсь, ничего не понял
--------------------
А у тебя SQUID, и значит, мы умрем.
|
|
|
|
|
 |
Ответов
(1 - 5)
|
Mar 25 2007, 23:26
|

Гуру
     
Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987

|
51-м Кейлом не пользовался, но в ARM-овском проблемм не возникало. В хэлпе есть главы "Inline Assembly" и "Interfacing C to Assembler". Там более-менее ясно всё прописано. Главное - знать ран-тайм модель компилятора: в каких регистрах передаются параметры в функцию, в каких возвращается значение, как производятся операции с памятью. Ну, и в операциях со стэком, понятное дело, нужно разобраться. Не думаю, что для 51-го различия столь уж кардинальны. Объявляется же функция и вызывается совершенно обычным для С образом. Если зададите вопрос конкретнее, может, и ответ получите более конкретный.
--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
|
|
|
|
|
Mar 25 2007, 23:59
|

Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 7-02-06
Из: Moscow
Пользователь №: 14 086

|
Цитата(alexunder @ Mar 26 2007, 00:01)  Люди, помогите тупому! Есть проект в Keil, написанный на C51. Есть модуль для управления индукатором, написанный на ASM51. Хочется из основной С-программы, вызывать ассемблерные рутины. Каким макаром это можно сделать? Как надо правильно объявить процедуру? Из кейловской документации, честно признаюсь, ничего не понял  Я это делал. Ничего сложного.В документации это где-то точно было. Кроме того смотри Help в программе и посмотри примеры, там точно есть. Причем есть как вызовы ASM из C, так и наоборот. Я, если не ошибаюсь подсмотрел в примерах по ISD_51. Там в ASM функции отладчика, а из C-шного файла они вызываются. Там главное не забыть их объявить public и назвать как-то определенным образом. И еще header-file не забыть.
|
|
|
|
|
Apr 2 2007, 20:45
|
Местный
  
Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621

|
Вообще то там еще все проще. Главное, чтобы в .asm'е было объявление PUBLIC точек входа в функции, причем тут есть тонкость - если функция имеет входные (насчет возврата не помню) параметры, то метка входа в функцию должна быть с подстрочником, а если нет - то без. Если что не так - линкер ругнется. Соответственно можно вызывать из ассемблера СИшные функции, только в asm'е необходимо указать EXTRN (code ) yfpdfybz aeyrwbq/
Вообще то там еще все проще. Главное, чтобы в .asm'е было объявление PUBLIC точек входа в функции, причем тут есть тонкость - если функция имеет входные (насчет возврата не помню) параметры, то метка входа в функцию должна быть с подстрочником, а если нет - то без. Если что не так - линкер ругнется. Соответственно можно вызывать из ассемблера СИшные функции, только в asm'е необходимо указать EXTRN (code ) имя функции соответсвенно с подстрочником или без.
|
|
|
|
|
Apr 11 2007, 05:12
|

Mute Beholder
  
Группа: Свой
Сообщений: 260
Регистрация: 4-04-07
Из: Третья планета от Солнца
Пользователь №: 26 754

|
Вот тут подробно описано http://keil.com/support/docs/50.htm . Однако учтите, что файл, содержащий главную функцию программы main(), не может содержать ассемблерных вставок. Выделяйте функции с ассемблерными вставками в отдельные файлы. (см. тут http://onembedding.com/tools/keil/faq/#id11 )
--------------------
Common sense is not so common.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|