Jump to content

    
Sign in to follow this  
Petka

Вставки ассемблера в код C

Recommended Posts

Иногда приходится Си сопрягать с ассемблером (например для получения ID кода камня, для манипуляций к кэшом и подобные). Как это грамотно осуществить в IAR? Если использовать inline ассемблер, то как туда передавать/возвращать значения? Если подключать внешние асмовские файлы, то как это грамотно сделать? Буду благодарен любым советам и примерам. Сходу поиск по форуму грамотного ответа дал.

Share this post


Link to post
Share on other sites
Иногда приходится Си сопрягать с ассемблером (например для получения 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. :)

Share this post


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

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

Share this post


Link to post
Share on other sites

Многократно здесь (и не только здесь) объясняли, что асм-овые вставки делать не нужно. Либо используйте уже готовые инлайн-функции, либо пишите целиком функцию на ассемблере. Ну а где искать ответы на вопросы "как" и "где" вам уже выше объяснили. То бишь RTFM! :)

Share this post


Link to post
Share on other sites

#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" );

}

Share this post


Link to post
Share on other sites
4. В выпавшем меню выбрать пункт "ARM C/C++ Compiler reference guide".

P.S. :)

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

 

Иногда приходится Си сопрягать с ассемблером (например для получения 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" );

}

 

по поводу функции это понятно, хотя не очень красиво, а по поводу прагмы, что это значит? как её использовать?

Share this post


Link to post
Share on other sites
Добавьте от себя лучше как выполнить в IAR инструкции "mcr", "mrs".

 

Выполнить пункты 1-4. :)

5. Открыть Part 2. Compiler reference, в нем главу Intrinsic functions. В ней найти описание функций __MCR, __MRC.

Share this post


Link to post
Share on other sites
#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

Share this post


Link to post
Share on other sites
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. :)

 

Вот за это - большое человеческое спасибо ;) ;) А я-то всю дорогу пытался в Content тыкать ;) ;) ;) Вот ведь - шоры ;)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this