Подключение библиотеки на asm в Keil
Прошу помощи. Есть оптимизированная библиотека для работы с фиксированной точкой для Cortex-M3/M4, написанная на ассемблере: https://github.com/warpco/fix32. Не получается подключить ее в проект на Keil. В библиотеке есть make-файл. Наверное его надо куда то подоткнуть, но непонятно куда.
- Реклама
__asm
{
m1:
MOV cntr, Ratio //
NOP //
NOP
NOP //++++++++++++++++
//NOP //++++++++++++++++
m2:
SUBS cntr,cntr,1
BNE m2
LDRB rez,[#0x50000040] //Read ADC1 ,ADC1_2[#0x50000340]
STRB rez,[addressbuffer], #1
CMP addressbuffer, endb
BCC m1
}
Как то так.
{
m1:
MOV cntr, Ratio //
NOP //
NOP
NOP //++++++++++++++++
//NOP //++++++++++++++++
m2:
SUBS cntr,cntr,1
BNE m2
LDRB rez,[#0x50000040] //Read ADC1 ,ADC1_2[#0x50000340]
STRB rez,[addressbuffer], #1
CMP addressbuffer, endb
BCC m1
}
Как то так.
IVL ex UA6PJ
Это вы показали, как делать ассемблерную вставку? Но я в ассемблере не очень. Да и хотелось бы использовать готовую библиотеку штатным образом посредством вызова из кода на Си уже написанных функций. Она вроде так и позиционируется. Библиотека есть, заголовочный файл есть, сами функции на ассемблере есть. Нужна помощь, как это интегрировать в проект. Нужно что-то сделать с make-файлом, но в кейле своего make-файла я не нашел, чтобы добавить туда данные из библиотечного.
Хорошо. Если подключить библиотеку целиком пока не получается, то как прошу подсказать, как правильно оформить ассемблерную вставку исходя из прототипа и реализации одной функции, например, умножения.
Прототип:
fix32_t fix32_mul(fix32_t a, fix32_t b, sint_t exp);
Реализация:
.section .fix32_mul, "x"
.align
fix32_mul:
smull r0, r1, r0, r1
lsrs r0, r0, r2
rsb r2, r2, #32
lsl r1, r1, r2
adc r0, r0, r1
bx lr
.end
Что в какой регистр должно попасть на входе и где результат на выходе?
Прототип:
fix32_t fix32_mul(fix32_t a, fix32_t b, sint_t exp);
Реализация:
.section .fix32_mul, "x"
.align
fix32_mul:
smull r0, r1, r0, r1
lsrs r0, r0, r2
rsb r2, r2, #32
lsl r1, r1, r2
adc r0, r0, r1
bx lr
.end
Что в какой регистр должно попасть на входе и где результат на выходе?
- Сообщения: 3784
- Зарегистрирован: Ср дек 24, 2008 09:58:58
Поместите след. код в файл, скажем, mul.s
В хедере mul.h поместите строку
extern fix32_t fix32_mul(fix32_t a, fix32_t b, sint_t exp);
Код: Выделить всё
AREA |.text|, CODE, READONLY ; section in the CODE area
;-------------------------------------------------------------------------------
;fix32_t fix32_mul(fix32_t a, fix32_t b, sint_t exp); r0=a, r1=b, r2=exp
fix32_mul PROC
EXPORT fix32_mul
smull r0, r1, r0, r1 ; r1:r0 = r0 * r1
lsrs r0, r0, r2
rsb r2, r2, #32
lsl r1, r1, r2
adc r0, r0, r1 ; return value in R0
bx lr
ENDP
END extern fix32_t fix32_mul(fix32_t a, fix32_t b, sint_t exp);
- Реклама
Спасибо!!! Все заработало!!!Ser60 писал(а):Поместите след. код в файл, скажем, mul.s


