реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Вставки ассемблера в код C, как это грамотно делать в IAR
Petka
сообщение Dec 6 2006, 10:34
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Иногда приходится Си сопрягать с ассемблером (например для получения ID кода камня, для манипуляций к кэшом и подобные). Как это грамотно осуществить в IAR? Если использовать inline ассемблер, то как туда передавать/возвращать значения? Если подключать внешние асмовские файлы, то как это грамотно сделать? Буду благодарен любым советам и примерам. Сходу поиск по форуму грамотного ответа дал.
Go to the top of the page
 
+Quote Post
vmp
сообщение Dec 6 2006, 11:02
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Цитата(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
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 6 2006, 11:41
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 6 2006, 12:24
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Многократно здесь (и не только здесь) объясняли, что асм-овые вставки делать не нужно. Либо используйте уже готовые инлайн-функции, либо пишите целиком функцию на ассемблере. Ну а где искать ответы на вопросы "как" и "где" вам уже выше объяснили. То бишь RTFM! smile.gif
Go to the top of the page
 
+Quote Post
IV_K
сообщение Dec 6 2006, 12:33
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 17-06-05
Пользователь №: 6 087



#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" );
}
Go to the top of the page
 
+Quote Post
Petka
сообщение Dec 6 2006, 13:01
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(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" );
}


по поводу функции это понятно, хотя не очень красиво, а по поводу прагмы, что это значит? как её использовать?
Go to the top of the page
 
+Quote Post
IV_K
сообщение Dec 6 2006, 14:25
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 17-06-05
Пользователь №: 6 087



по поводу прагмы в RTFM-e все написано, Compiler reference guide
или в другом, точно не помню..
pragma - директива препроцессора
Go to the top of the page
 
+Quote Post
vmp
сообщение Dec 6 2006, 14:58
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Цитата(Petka @ Dec 6 2006, 13:01) *
Добавьте от себя лучше как выполнить в IAR инструкции "mcr", "mrs".


Выполнить пункты 1-4. smile.gif
5. Открыть Part 2. Compiler reference, в нем главу Intrinsic functions. В ней найти описание функций __MCR, __MRC.
Go to the top of the page
 
+Quote Post
Petka
сообщение Dec 6 2006, 15:06
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Вопрос снят. Всем спасибо, особенно vmp!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 6 2006, 16:50
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
IV_K
сообщение Dec 7 2006, 10:21
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 17-06-05
Пользователь №: 6 087



хе.. =)) не знал, спасибо.
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Dec 7 2006, 10:37
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(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
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 20:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01469 секунд с 7
ELECTRONIX ©2004-2016