Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Доступ к глобальным переменным из асм-функции
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
Trizna
Подскажите, как в ассемблерной функции использовать переменную объявленную в "С" части программы ?

Например имеем код:
CODE
char table[100]

main
{
GET_TABLE_ELEMENT_ASM (char number)
}


Как в ассемблерной функции GET_TABLE_ELEMENT_ASM получить указатель на table ?
_Pasha
для какого проца?
Trizna
Цитата(_Pasha @ Dec 1 2010, 14:22) *
для какого проца?


ARM
alex_os
Цитата(Trizna @ Dec 1 2010, 13:23) *
Подскажите, как в ассемблерной функции использовать переменную объявленную в "С" части программы ?

Например имеем код:
CODE
char table[100]

main
{
GET_TABLE_ELEMENT_ASM (char number)
}


Как в ассемблерной функции GET_TABLE_ELEMENT_ASM получить указатель на table ?


В r0 будет лежать указатель.
Гуглить "gccarm calling convention".
ARV
а разве в ассемблерном файле нельзя указать extern char table[] и пускай линкер сам адреса подставляет?
_Pasha
Цитата(ARV @ Dec 1 2010, 16:36) *
а разве в ассемблерном файле нельзя указать extern char table[] и пускай линкер сам адреса подставляет?

Код
.extern table

Кстати, r0 будет содержать номер элемента массива а не ссылку на элемент
Trizna
Цитата(_Pasha @ Dec 1 2010, 16:39) *
Код
.extern table


Я собственно так и делал, но не смог потом символ table использовать
конструкции
mov r3, table;
mov r3, #table;
компилятор не компилирует


Цитата(_Pasha @ Dec 1 2010, 16:39) *
Кстати, r0 будет содержать номер элемента массива а не ссылку на элемент

С этим всё ясно...
Trizna
разобрался!

делать нужно

ldr r3, =table

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