Как передать параметр в функцию из сборки в C - PullRequest
1 голос
/ 22 октября 2010

Я использую HCS08 и Code Warrior.Я вызываю функцию C из сборки.Как я могу передать параметр этой функции C?

Ответы [ 3 ]

6 голосов
/ 22 октября 2010

Что вам нужно, так это ABI или двоичный интерфейс приложения для вашей платформы. Это объясняет такие вещи, как передача аргументов в функции (регистры, стек, микширование), какие регистры сохраняются вызывающими, а какие сохраняются вызываемыми, специальные цели для определенных регистров и т. Д. Следуя общему ABI, вы можете связывать библиотеки, созданные различными компиляторами, смешивать языки высокого уровня и т. Д.

Для «больших» платформ обычно легко найти документ с указанием ABI. Для других вам может потребоваться разобрать функцию C и посмотреть, что она делает. Обращайте внимание на то, какие регистры он сохраняет в своем прологе, а какие могут его разбить. Также обратите внимание, как пролог сохраняет указатель стека (или указатель фрейма) на входе, потому что вам придется имитировать это, если вы хотите, чтобы отладчики работали.

Похоже, что соглашение о вызовах для HCS08 задокументировано Freescale в приложении .

0 голосов
/ 23 октября 2010

Напишите c версию (может быть просто заглушкой, передавая аргументы) для вашей функции и проанализируйте код.Делай свою функцию так же.Вызов метода для конкретной функции (в большинстве случаев) определяется уникальным набором аргументов.

Обычным способом является то, что сначала некоторые аргументы, если они являются целыми числами или указателями, передаются в регистрах, а другие помещаются в стек.Но также обратите внимание, что varargs часто передаются не так, как не varargs.

Специально для 6808, у которого мало регистров, все параметры, вероятно, передаются через стек.

0 голосов
/ 22 октября 2010

Ну, я нашел решение.

В файле сборки объявите переменную как:

XREF   varaible1

и используйте ее как ячейку памяти

В файле C укажитепеременная как глобальная.

extern char variable1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...