Вызов подпрограммы на С из подпрограммы на ассемблере

Вызов подпрограммы на С не отличается от вызова подпрограммы на ассемблере. Однако при вызове С/С++-функции следует учитывать, что она работает в соответствии с рассмотренными положениями функционирования среды выполнения. Поэтому, если вложенная asm-процедура в некоторых случаях (в частности, при запрещенных прерываниях) может вызываться таким же способом, как в программах на одном "чистом" ассемблере (без модулей на С и, следовательно, не поддерживающих среды выполнения), то для С-функции необходим код вызова/возврата, отвечающий всем без исключениям требованиям среды выполнения.

- вызов С-функции выполняется с использованием инструкции cjump (и связанных с ней);

- передача параметров осуществляется через регистры и через программный стек в соответствии с правилами передачи параметров в функции;

- значения Scratch-регистров могут быть свободно изменены C-функцией. Поэтому если они содержат важные значения, то перед вызовом "вложенной" функции следует их сохранить в стеке, а после возврата из подпрограммы – восстановить;

- С-функции не изменяют значения CallPreserved–регистров. Тем не менее, если CallPreserved-регистры модифицировались ассемблерной процедурой, целесообразно восстановить их исходные значения перед вызовом вложенной С-функции.

2.9. Использование библиотечных функций. Библиотеки C/C++ и DSP

В комплект поставки среды VisualDSP++ входят следующие основные run-time библиотеки:

- библиотеки C и C++ run time library, содержащие набор функций, ориентированных на базовые, низкоуровневые, системные операции и простейшие вычисления: работа с динамической памятью, работа со строками, базовые математические функции, диспетчер прерываний;

- библиотека DSP run time library, содержащая реализации базовых типовых алгоритмов цифровой обработки сигналов (преобразование Фурье, компандирование по А- и m-законам, свертка, работа с векторами и матрицами) и настройки некоторых системных параметров (управление таймером, настройка линий флагов);

- библиотека I/O library, поддерживающая стандартные возможности С по выводу/выводу данных (на консоль).

Описания функций каждой из этих библиотек содержится в нескольких заголовочных файлах. Для их использования достаточно подключить (#include) к программе соответствующий заголовочный файл: стандартный ldf-файл уже содержит пути и параметры поиска самих объектных библиотечных модулей. Каждая библиотека имеет собственную реализацию для ADSP21020, ADSP21060, ADSP21160 и выше.

Подробный перечень библиотечных функций приведен в руководстве по компилятору.

2.10. Написание собственных обработчиков прерываний на С/С++


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: