Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вставки ассемблера в код C
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Petka
Иногда приходится Си сопрягать с ассемблером (например для получения ID кода камня, для манипуляций к кэшом и подобные). Как это грамотно осуществить в IAR? Если использовать inline ассемблер, то как туда передавать/возвращать значения? Если подключать внешние асмовские файлы, то как это грамотно сделать? Буду благодарен любым советам и примерам. Сходу поиск по форуму грамотного ответа дал.
vmp
Цитата(Petka @ Dec 6 2006, 10:34) *
Иногда приходится Си сопрягать с ассемблером (например для получения ID кода камня, для манипуляций к кэшом и подобные). Как это грамотно осуществить в IAR?


1. Поставить IAR.
2. Запустить его.
3. Во второй строчке окна будет пункт Help. Нажать на него мышкой.
4. В выпавшем меню выбрать пункт "ARM C/C++ Compiler reference guide".
5. В открывшемся в Adobe Acrobat документе перейти в "Part 1. Using the compiler", далее выбрать главу "Assembler language interface".
6. Читать до полного просветления.

P.S. smile.gif
zltigo
Цитата(Petka @ Dec 6 2006, 09:34) *
Иногда приходится Си сопрягать с ассемблером (например для получения ID кода камня, для манипуляций к кэшом и подобные).

Как узнать - написано выше. От себя добавлю, что для вышеперечисленного заниматься вставками cовершенно незачем.
rezident
Многократно здесь (и не только здесь) объясняли, что асм-овые вставки делать не нужно. Либо используйте уже готовые инлайн-функции, либо пишите целиком функцию на ассемблере. Ну а где искать ответы на вопросы "как" и "где" вам уже выше объяснили. То бишь RTFM! smile.gif
IV_K
#pragma diag_suppress=Pe940
вот например чтение регистра CPSR, в сях его не прочитать..

#pragma optimize=no_inline
static unsigned long get_APSR( void )
{
/* On function exit,
function return value should be present in R0 */
asm( "MRS R0, CPSR" );
}
Petka
Цитата(vmp @ Dec 6 2006, 11:02) *
4. В выпавшем меню выбрать пункт "ARM C/C++ Compiler reference guide".
P.S. smile.gif

Благодарю. Почему-то искал в "ARM Assembler ref. guide".

Цитата(zltigo @ Dec 6 2006, 11:41) *
Цитата(Petka @ Dec 6 2006, 09:34) *

Иногда приходится Си сопрягать с ассемблером (например для получения ID кода камня, для манипуляций к кэшом и подобные).

Как узнать - написано выше. От себя добавлю, что для вышеперечисленного заниматься вставками cовершенно незачем.

Добавьте от себя лучше как выполнить в IAR инструкции "mcr", "mrs".

Цитата
Код
#pragma diag_suppress=Pe940
вот например чтение регистра CPSR, в сях его не прочитать..

#pragma optimize=no_inline
static unsigned long get_APSR( void )
{
/* On function exit,
function return value should be present in R0 */
asm( "MRS R0, CPSR" );
}


по поводу функции это понятно, хотя не очень красиво, а по поводу прагмы, что это значит? как её использовать?
IV_K
по поводу прагмы в RTFM-e все написано, Compiler reference guide
или в другом, точно не помню..
pragma - директива препроцессора
vmp
Цитата(Petka @ Dec 6 2006, 13:01) *
Добавьте от себя лучше как выполнить в IAR инструкции "mcr", "mrs".


Выполнить пункты 1-4. smile.gif
5. Открыть Part 2. Compiler reference, в нем главу Intrinsic functions. В ней найти описание функций __MCR, __MRC.
Petka
Вопрос снят. Всем спасибо, особенно vmp!
Сергей Борщ
Цитата(IV_K @ Dec 6 2006, 11:33) *
#pragma diag_suppress=Pe940
вот например чтение регистра CPSR, в сях его не прочитать..
как сказал vmp, читать иструкцию:
Код
#include <inarm.h>

TStatusReg StatusReg;

StatusReg = __get_CPSR();
do { __set_CPSR(StatusReg | (1<<7)); } while (!(__get_CPSR() & (1<<7)));        // disable IRQ
IV_K
хе.. =)) не знал, спасибо.
Kitsok
Цитата(vmp @ Dec 6 2006, 11:02) *
1. Поставить IAR.
2. Запустить его.
3. Во второй строчке окна будет пункт Help. Нажать на него мышкой.
4. В выпавшем меню выбрать пункт "ARM C/C++ Compiler reference guide".
5. В открывшемся в Adobe Acrobat документе перейти в "Part 1. Using the compiler", далее выбрать главу "Assembler language interface".
6. Читать до полного просветления.

P.S. smile.gif


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