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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Прорезались зубы
Сообщения: 246
Зарегистрирован: Пт ноя 22, 2013 22:06:15
Откуда: Липецк

Сообщение igor48 »

Прошу помощи. Есть оптимизированная библиотека для работы с фиксированной точкой для Cortex-M3/M4, написанная на ассемблере: https://github.com/warpco/fix32. Не получается подключить ее в проект на Keil. В библиотеке есть make-файл. Наверное его надо куда то подоткнуть, но непонятно куда.
Реклама
Электрический кот
Аватара пользователя
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Сообщение 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
}


Как то так.
IVL ex UA6PJ
Реклама
Прорезались зубы
Сообщения: 246
Зарегистрирован: Пт ноя 22, 2013 22:06:15
Откуда: Липецк

Сообщение igor48 »

Это вы показали, как делать ассемблерную вставку? Но я в ассемблере не очень. Да и хотелось бы использовать готовую библиотеку штатным образом посредством вызова из кода на Си уже написанных функций. Она вроде так и позиционируется. Библиотека есть, заголовочный файл есть, сами функции на ассемблере есть. Нужна помощь, как это интегрировать в проект. Нужно что-то сделать с make-файлом, но в кейле своего make-файла я не нашел, чтобы добавить туда данные из библиотечного.
Прорезались зубы
Сообщения: 246
Зарегистрирован: Пт ноя 22, 2013 22:06:15
Откуда: Липецк

Сообщение 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

Что в какой регистр должно попасть на входе и где результат на выходе?
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение 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);
Реклама
Прорезались зубы
Сообщения: 246
Зарегистрирован: Пт ноя 22, 2013 22:06:15
Откуда: Липецк

Сообщение igor48 »

Ser60 писал(а):Поместите след. код в файл, скажем, mul.s
Спасибо!!! Все заработало!!!
Реклама
Ответить

Вернуться в «ARM»