Отговори на тема  [ 12 мнения ] 
Смесване на С и Асемблер при dsPIC 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Юли 22, 2006 9:50 pm
Мнения: 1638
Мнение Смесване на С и Асемблер при dsPIC
Опитван се да направя някой модули от мои програми изцяло на асемблер.При Хай-тековския компилатор нямам проблеми за 18 серия но като се опре до dsPIC-ожете става мазано.Та искам да компилирам следнта програмка (тестова) за да разбера как точно се осъществява смесването.
Главната програма е :

#define __dsPIC30F4013__
#include<p30fxxxx.h>

#include <math.h>

extern void asmFunction(void);

int arr1[20] __attribute__ ((address(0x0900))); // array of 20 signed-integer elements in X space
int arr2[20] __attribute__ ((address(0x0D00))); // array of 20 signed-integer elements in Y space

int main(void) //beginning of the main routine
{
asmFunction();


for( ; ; )
{
asmFunction();
}
}

Направил съм си един .s файл със тялото на функцията на асемблер:


.text
.global _asmFunction

_asmFunction:
mov #@_arr1, W8 // W8 = @arr1, point to a first element of array
mov #@_arr2, W10 // W10 = @arr2, point to a first element of array
mov #0, W4 // clear W4
mov #0, W6 // clear W6
clr A
repeat #20
mac W4*W6, A, [W8]+=2, W4, [W10]+=2, W6 // AccA = sum(arr1*arr2)
sftac A, #-16 // shift the result in high word of AccA
sac A, #0, W1 // W1 = sum(arr1*arr2)
return
.end

И компилатора дава :
C:\Program Files\Microchip\work\dsPIC30F4013\dsPIC30F4013.c:667: undefined reference to `asmFunction'
Не мога да разбера какъв reference to `asmFunction' иска


Пет Сеп 05, 2008 3:18 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение 
Махни подчертавката и пробвай пак.


Пет Сеп 05, 2008 3:23 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Юли 22, 2006 9:50 pm
Мнения: 1638
Мнение 
.text
.global asmFunction

asmFunction:
mov #@_arr1, W8 // W8 = @arr1, point to a first element of array
...............

няма ефект - пак същото съобщение :(


Пет Сеп 05, 2008 3:36 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение 
Със сигурност трябва да е без подчертавката.

Провери две неща:
1) дали си преасемблирал файла, най-добре дай пълен Rebuild
2) има вероятност да не го линк-ваш, загледай MAP файл и т.н.


Пет Сеп 05, 2008 4:07 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Юли 22, 2006 9:50 pm
Мнения: 1638
Мнение 
Подчертавам го защото така го иска :
• Variables or functions declared within a separate assembly file that will be
referenced by any C source file should be declared as global using the assembler
directive.global. External symbols should be preceded by at least one
underscore. The C function main is named _main in assembly and conversely an
assembly symbol _do_something will be referenced in C as do_something.
Undeclared symbols used in assembly files will be treated as externally defined.

Имам чувството че съм се наврял в задънена улица :cry:


Пет Сеп 05, 2008 4:33 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение 
Хм, хм. Не винаги документацията е вярна. ;) Някои го предпочитат със, други без чертичката.
Обаче така медиумските ми способности съвсем намаляха. Постни zip на цялото дърво с проекта след опит за Rebuild (даже ако можеш преди това да изтриеш всичко), може да видя нещо.

Не съм помирисвал нито dsPIC нито компилатора му.


Пет Сеп 05, 2008 5:32 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение 
Забравих - пусни всички опции за LST, MAP и т.н.
Пълно досие. :lol:


Пет Сеп 05, 2008 5:33 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Юли 22, 2006 9:50 pm
Мнения: 1638
Мнение 
Ами над това се мъча


Прикачени файлове:
TEST_dsPIC.rar [31.47 KiB]
157 пъти
Пет Сеп 05, 2008 6:47 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение 
Не мога да разбера в проекта влиза или не влиза този асемблерски файл.

Пробвай:
1) Прекръсти файла да завършва на ".S" (по принцип GCC ги обича с голяма буква).
2) Направи синтактични грешки в асемблерския файл и дай Build/Rebuild. Поне да се разбере въобще меле ли го. :)


Пет Сеп 05, 2008 7:09 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
woody написа:
1) Прекръсти файла да завършва на ".S" (по принцип GCC ги обича с голяма буква).


90% това му е проблема, дано да го оправи преди да е пуснал "make clean" че тогава може да стане тъжно ;-)

Иначе Кичо, това за undefined reference го дава линкера (при GCC е добре да се ориентираш кой тул ти прави проблем). Сега не знам дали става въпрос за managed project или си пишеш сам makefile, но и при двата варианта би трябвало да може да пуснеш линкера ръчно с малко повечко диагностика. Но то щом ти казва че го няма, значи го няма (не е подаден съответния обеджект файл на линкера). Няма да те лъже я ;-)

пс. добре е да ползваш
.func xxxx
.endfunc

Това няма отношение към проблема ти, просто ако ползваш GDB това го ориентира за функциите и се дебъгва по-приятно...


Пет Сеп 05, 2008 7:47 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Юли 22, 2006 9:50 pm
Мнения: 1638
Мнение 
Ами аз ползвам средата на Микрочип. Прекръстих файла с голямо S.На линкера има една категория - Diagnostics след като изплю всички грешки почнах една по една да ги търся и да се опитвам да ги изправям.И най-накрая успях :)


Пет Сеп 05, 2008 8:30 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение 
Честито, вече си подкован за следващия път. 8)


Пет Сеп 05, 2008 8:35 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 12 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни