Which assembler should i use to write assembly language program in arduino chip?
Use inline assembly.
http://www.nongnu.org/avr-libc/user-manual/inline_asm.html
Plenty to read.
thanks.
If you need more than a few lines of asm, you could contemplate moving from Arduino IDE to native avr-libc.
http://www.nongnu.org/avr-libc/user-manual/assembler.html
That inline assembler is an abomination that should have been put down at birth.
asm volatile("nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
::);
What's with the \n\t and the quotes?
Admittedly I don't think the \t is needed (but that's from the linked page) but why need anything. Why can't you just "shell" out to ASM then come back.
// C stuff
asm volatile(nop
nop
nop
nop
);
// more C stuff
There may be a good reason for this but personally unless it's a very short piece of code I find it easier to use a separate file.
Rob
It's a gcc things. The "asm" statement is defined to take a string, which is more or less copied from the argument into the assembler code that (theoretically) C compilers generate in between the C source and the object files.
Strings need quotes, and (starting with gcc 4, IIRC) aren't allowed to contain actual embedded newlines.
Not my favorite gcc features
I believe (saw it while reading the IDE source code) that if you have a file with the ".S" extension, the arduino IDE will include it when building the sketch (and it will get treated as a gnu assembler file.)
Note that the gnu assembler syntax is NOT the same as the Atmel-defined assembler syntax for AVRs, so you can't instantly compile any Atmel-published assembler examples. (Gnu uses a somewhat common assembler syntax for all the different CPUs that it supports. This has advantages and disadvantages...)
It's a gcc thing
Yeah it's the same with LPCs when using GCC.
In the LPCxpreso IDE it's really easy to have ASM code, you just add a file to the project and start typing assembler. Have a
.global asm_test_func
in this file and
extern void asm_test_func(void);
in the C file.
I'm still new to the LPC but I gather the args are in fixed regs, I haven't tried that yet and of course there must come a time when there are too many for the regs.
Rob