Macro w C

Jan 07, 2006 4 Replies

Witam!



Jak mogê dodaæ makra do plików *.s do³±czanych do projektu w gcc.


Zrobi³em to tak:



doda³em do projektu plik "asembler.s" Oto jego zwarto¶æ:



//------------------------------------------------------ .MACRO SUBI16 ; Start macro definition subi @1,low(@0) ; Subtract low byte sbci @2,high(@0) ; Subtract high byte .ENDMACRO ; End macro definition



.CSEG ; SEGMENT PROGRAMU .ORG 0 ; wektor zerowania



Reset:



Koniec: rjmp Koniec //---------------------------------------------------------



Chodzi mi o to, ¿eby móc wykorzystaæ jako¶ to makro. W tym momencie jednak kompilator zwraca mi b³±d: " Error: unexpected end of file in macro definition"



D±¿ê do tego, ¿eby uzyskaæ dok³adne opó¼nienia w GCC i jedyne co mi przychodzi do g³owy to asemblerowe makra ale jak je wykorzystaæ?


Dnia Sat, 7 Jan 2006 16:54:07 +0100, Krzysztof napisał(a): <ciach>

Są inne sposoby - można zamieścić całą funkcję w asemblerze za pomocą dyerktywy asm.

Pozdrawiam

Marcin Stanisz

Krzysztof snipped-for-privacy@poczta.onet.pl> napisał(a):

A skąd wytrzasnąłes taką składnie , dla assemblera GCC ? Nie napisałeś , o jaką platformę chodzi.Czy o AVR ? Wydaj mi się , że jak się używa jakiegoś narzędzia , to zaczyna się pracę od przeczytania instrukcji obsługi , a nie stosujesz się do zasad , które obowiązują dla czegoś innego.Tyle wymądrzania się ;-)

plik.s

globl label macro subi16 a,b,c ; Start macro definition subi \a,lo8(\c) ; Subtract low byte sbci \b,hi8(\c) ; Subtract high byte endm ; End macro definition

section .text func label label: subi16 r16,r17,0x11aa ret

------------------------------------------------------ plik.c

#include <avr/io.h>

extern void label(void);

int main(void) { label(); return(0); }

Do funkcji "asemblerowej" można również przekazać parametry , jak do funkcji w "C" , ale więcej o tym w dokumentacji , no i w skarbnicy wszechwiedzy - google ;)

Piotrek

plik.s

subi16 r16,r17,0x11aa ret

Znów mi kropki wcięło :(

Wykorzystaj te z pliku delay.h. Ewentualnie podpatrz jak tam to zrobiono.

Pozdrawiam Krzysztof Szmurło

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required