Страница 1 из 1

Подключение библиотеки на asm в Keil

Добавлено: Пт май 12, 2023 09:13:36
igor48
Прошу помощи. Есть оптимизированная библиотека для работы с фиксированной точкой для Cortex-M3/M4, написанная на ассемблере: https://github.com/warpco/fix32. Не получается подключить ее в проект на Keil. В библиотеке есть make-файл. Наверное его надо куда то подоткнуть, но непонятно куда.

Re: Подключение библиотеки на asm в Keil

Добавлено: Пт май 12, 2023 10:11:19
240265
__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
}


Как то так.

Re: Подключение библиотеки на asm в Keil

Добавлено: Пт май 12, 2023 10:57:41
igor48
Это вы показали, как делать ассемблерную вставку? Но я в ассемблере не очень. Да и хотелось бы использовать готовую библиотеку штатным образом посредством вызова из кода на Си уже написанных функций. Она вроде так и позиционируется. Библиотека есть, заголовочный файл есть, сами функции на ассемблере есть. Нужна помощь, как это интегрировать в проект. Нужно что-то сделать с make-файлом, но в кейле своего make-файла я не нашел, чтобы добавить туда данные из библиотечного.

Re: Подключение библиотеки на asm в Keil

Добавлено: Сб май 13, 2023 16:03:41
igor48
Хорошо. Если подключить библиотеку целиком пока не получается, то как прошу подсказать, как правильно оформить ассемблерную вставку исходя из прототипа и реализации одной функции, например, умножения.

Прототип:
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

Что в какой регистр должно попасть на входе и где результат на выходе?

Re: Подключение библиотеки на asm в Keil

Добавлено: Сб май 13, 2023 18:37:08
Ser60
Поместите след. код в файл, скажем, mul.s

Код: Выделить всё

	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	
В хедере mul.h поместите строку
extern fix32_t fix32_mul(fix32_t a, fix32_t b, sint_t exp);

Re: Подключение библиотеки на asm в Keil

Добавлено: Сб май 13, 2023 19:59:01
igor48
Ser60 писал(а):Поместите след. код в файл, скажем, mul.s
Спасибо!!! Все заработало!!!