Я пытаюсь смешать некоторые языки C и ассемблера, и у меня есть медведь времени. Я имею опыт работы с C, несколько с сборкой, но раньше я не использовал их в одном проекте.MPLAB XC16: Смешивание C и сборка
На данный момент я пытаюсь скомпилировать простейший возможный проект, который является умножением с фиксированной запятой Q1.15. Я действительно не забочусь о выходе кода, мне просто нужно было что-то собрать, чтобы я мог отказаться от него.
myq15.h:
#ifndef _Q15_MATH
#define _Q15_MATH
#include <stdint.h>
typedef int16_t q15_t;
extern q15_t q15_mul(q15_t multiplicand, q15_t multiplier);
q15_t q15_add(q15_t addend, q15_t adder);
#endif
myq15.c
#include "myq15.h"
q15_t q15_add(q15_t addend, q15_t adder){
int32_t result = (uint32_t)addend + (uint32_t)adder;
if(result > 32767) result = 32767;
else if(result < -32768) result = -32768;
return (q15_t)result;
}
myq15.s:
.include "xc.inc"
.text
.global _q15_mul
_q15_mul:
; w3:w2 = w1 * w0
mul.ss w0, w1, w2
; w0 = (w3:w2) >> 15
rlc w2, w2
rlc w3, w3
; w0 = w3
mov w3, w0
return
.end
Мой 'главный' файл просто называет q15_add() и q15_mul () пример.
На компиляции, компоновщик состояний:
build/default/production/_ext/608098890/myq15.o(.text+0x0): In function `_q15_mul':
: multiple definition of `_q15_mul'
Опять же, я пытаюсь понять, как смешать сборку и C-файл для других целей, но если я не могу получить эту простую программу для работы , Я безнадежен!
Спасибо,
Когда я отправил сообщение, я пропустил, включая источник сборки. Там объявлено. – slightlynybbled
Плохая идея назвать ваши файлы одинаковыми, их можно смутить. Вы также забыли показать, как вы компилируете и связываете. – Jester
В этом была проблема, я назвал файлы одинаковыми. Опубликуйте его как ответ, и я буду поддерживать, спасибо! – slightlynybbled