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

 
 
 
Reply to this topicStart new topic
> inline asm в keil, как юзать?
ZMax
сообщение Oct 1 2007, 09:59
Сообщение #1





Группа: Новичок
Сообщений: 12
Регистрация: 4-07-07
Пользователь №: 28 883



собственно вопрос в описании темы
пишу в тексте программы __asm { blablabla }
компилирую, заливаю
начинаю дебажить, и смотрю команды в дисасемблере
на месте всего блока АСМ ставится один nop...а хотелось бы увидеть там команды, которые поставил в блоке....
также попутно вопрос, какие есть функции для отсчета времени ? (чтобы узнать сколько времени отрабатывает какая либо функция, например)
плата mcbstr9
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 1 2007, 10:28
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Попробуйте отключить оптимизацию или дизассемблировать файл отдельно, без debugger'а. А еще лучше не полениться написать отдельный asm-файл - до него оптимизатор при всем желании не доберется.
Go to the top of the page
 
+Quote Post
ZMax
сообщение Oct 6 2007, 18:45
Сообщение #3





Группа: Новичок
Сообщений: 12
Регистрация: 4-07-07
Пользователь №: 28 883



вообщем в асме я не силен
посмотрел хелпу в самом кейле
ARM Code Example
попробовал сделать простую функцию(на асме), которую можно было бы вызвать из другого файла(написан он на си) в проекте...
но пока безуспешно...
если есть у кого нибудь примеры и не жалко их выложить--сделайте это пожалуйста

а пока пойду сам поразбираюсь

upd:
нашел примеры на сайте кейла
компилятор дает ошибки
например, на самой первой строке NAME func
EXTERN DATA (value) -- test.s(1): error: A1157E: Syntax error following directive

Сообщение отредактировал ZMax - Oct 6 2007, 19:32
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 6 2007, 19:42
Сообщение #4


Гуру
******

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



Цитата(ZMax @ Oct 6 2007, 21:45) *
нашел примеры на сайте кейла
Не работаю с кейлом, но посмотрите на сайте freertos.org - там должны быть точно рабочие порты под кейла и их можно взять как пример.


--------------------
На любой вопрос даю любой ответ
"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
aaarrr
сообщение Oct 6 2007, 22:16
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ZMax @ Oct 6 2007, 22:45) *
компилятор дает ошибки
например, на самой первой строке NAME func
EXTERN DATA (value) -- test.s(1): error: A1157E: Syntax error following directive

Ассемблер какой - RealView, судя по ошибке?

Попробуйте такой пример:
Код
    AREA codeA, CODE, READONLY

    EXPORT sum

sum
    add        r0, r0, r1
    mov        pc, lr

    END


вызов из C-модуля:

Код
extern int sum(int a, int b);

int main(void)
{
    int a, b, c;

    a = 1;
    b = 2;
    c = sum(a, b);
    printf("Result: %d\r\n", c);
    ...
}
Go to the top of the page
 
+Quote Post
ZMax
сообщение Oct 7 2007, 15:35
Сообщение #6





Группа: Новичок
Сообщений: 12
Регистрация: 4-07-07
Пользователь №: 28 883



Цитата(aaarrr @ Oct 7 2007, 02:16) *
Ассемблер какой - RealView, судя по ошибке?

Попробуйте такой пример:
Код
    AREA codeA, CODE, READONLY

    EXPORT sum

sum
    add        r0, r0, r1
    mov        pc, lr

    END


вызов из C-модуля:

Код
extern int sum(int a, int b);

int main(void)
{
    int a, b, c;

    a = 1;
    b = 2;
    c = sum(a, b);
    printf("Result: %d\r\n", c);
    ...
}

спасибо



надо ли до вызова функции сохранять все значения регистров, а потом восстанавливать их?
или все это делается по умолчанию без лишних телодвижений?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 7 2007, 16:25
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ZMax @ Oct 7 2007, 19:35) *
...надо ли до вызова функции сохранять все значения регистров, а потом восстанавливать их?

Это должна при необходимости делать вызываемая функция. Вы можете спокойно использовать регистры R0-R3 и R12, остальные нужно сохранять. Есть такой документ - ARM Thumb Procedure Call Standard (ATPCS) - рекомендую найти и ознакомиться.
Go to the top of the page
 
+Quote Post
ZMax
сообщение Oct 8 2007, 10:28
Сообщение #8





Группа: Новичок
Сообщений: 12
Регистрация: 4-07-07
Пользователь №: 28 883



всем огромное спасибо!!!

как можно узнавать время, которое работала функция?
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 8 2007, 11:26
Сообщение #9


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(ZMax @ Oct 8 2007, 13:28) *
как можно узнавать время, которое работала функция?

инкрементировать какой-нибудь счетчик внутри функции, потом помножить этот счетчик на заранее замеренное время выполения функции и получите время которое работала функция.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 21:53
Рейтинг@Mail.ru


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