ÄúÏÖÔÚµÄλÖ㺠Ö÷Ò³ > MCU > µ¥Æ¬»ú¼¼ÊõÓ¦Óà > ϵͳѧϰARMÖ®Îå --CÓïÑԺͻã±à»ìºÏ±àд -
±¾ÎÄËùÊô±êÇ©:
Ϊ±¾ÎÄ´´Á¢¸ö±êÇ©°É:

ϵͳѧϰARMÖ®Îå --CÓïÑԺͻã±à»ìºÏ±àд -

À´Ô´£º ÍøÂçÓû§·¢²¼£¬ÈçÓаæÈ¨ÁªÏµÍø¹Üɾ³ý¡¡2018-09-07¡¡

[µ¼¶Á]
×ªÔØ×Ôhttp://blog.csdn.net/qqliyunpeng/article/details/48791647Ò»¡¢GNU»ã±àÊéд¸ñʽ£º´úÂëÐÐÖеÄ×¢ÊÍ·ûºÅ: ¡®@¡¯ ÕûÐÐ×¢ÊÍ·ûºÅ: ¡®#¡¯Óï¾ä·ÖÀë·ûºÅ: ¡®;¡¯Ö±½Ó²Ù×÷Êýǰ׺: ¡®#¡¯ »ò ¡®$¡¯È«¾Ö±êºÅ£º

×ªÔØ×Ôhttp://blog.csdn.net/qqliyunpeng/article/details/48791647


±¾ÎÄÒýÓõØÖ·: http://www.21ic.com/app/mcu/201806/764475.htm

Ò»¡¢GNU»ã±àÊéд¸ñʽ£º
  • ´úÂëÐÐÖеÄ×¢ÊÍ·ûºÅ: ¡®@¡¯ ÕûÐÐ×¢ÊÍ·ûºÅ: ¡®#¡¯Óï¾ä·ÖÀë·ûºÅ: ¡®;¡¯Ö±½Ó²Ù×÷Êýǰ׺: ¡®#¡¯ »ò ¡®$¡¯

  • È«¾Ö±êºÅ£º±êºÅÖ»ÄÜÓÉa¡«z£¬A¡«Z£¬0¡«9£¬¡°.¡±£¬_µÈ£¨Óɵ㡢×Öĸ¡¢Êý×Ö¡¢Ï»®ÏßµÈ×é³É£¬³ý¾Ö²¿±êºÅÍ⣬²»ÄÜÒÔÊý×Ö¿ªÍ·£©×Ö·û×é³É£¬±êºÅµÄºóÃæ¼Ó¡°£º¡±¡£

¶ÎÄÚ±êºÅµÄµØÖ·ÖµÔÚ»ã±àʱȷ¶¨£»
¶ÎÍâ±êºÅµÄµØÖ·ÖµÔÚÁ¬½Óʱȷ¶¨¡£

  • ¾Ö²¿±êºÅ:¾Ö²¿±êºÅ Ö÷ÒªÔÚ¾Ö²¿·¶Î§ÄÚʹÓöøÇÒ¾Ö²¿±êºÅ¿ÉÒÔÖØ¸´³öÏÖ¡£ËüÓÉÁ½²¿×é³É¿ªÍ·ÊÇÒ»¸ö0-99Ö±½ÓµÄÊý×Ö¾Ö²¿±êºÅ ºóÃæ¼Ó¡°:¡±???

F£ºÖ¸Ê¾±àÒëÆ÷Ö»ÏòǰËÑË÷£¬´úÂëÐÐÊýÔö¼ÓµÄ·½Ïò/ ´úÂëµÄÏÂÒ»¾ä

B£ºÖ¸Ê¾±àÒëÆ÷Ö»ÏòºóËÑË÷£¬´úÂëÐÐÊý¼õСµÄ·½Ïò

×¢Òâ¾Ö²¿±êºÅµÄÌø×ª£¬¾Í½üÔ­Ôò

Àý×Ó£º

1£ºa

2£ºb

1£ºc

b 1b Ìø×ªµ½ c Ëù´¦µÄλÖÃ

==================================================================

¶þ¡¢»ìºÏ±à³ÌºÍÄÚÁª»ã±à£º¡¾1¡¿1.c ºÍ2.c ±àÒë³ÉÒ»¸öelfÎļþ

gcc -c 1.c -o 1.o

gcc -c 2.c -o 2.o

ld -Ttext 40008000 1.o 2.o -o a.elf

¡¾2¡¿1.s ºÍ2.c ±àÒë³ÉÒ»¸öelfÎļþ

gcc -c 1.s -o 1.o

gcc -c 2.c -o 2.o

ld -Ttext 40008000 1.o 2.o -o a.elf

¡¾3¡¿cÓïÑÔÖе÷Óûã±àÖеĺ¯Êý

ÔÚ»ã±àÖÐ.global/.globl (ÔÚ¶¨ÒåµÄÎļþÖÐ)

ÔÚ c ÖÐextern (ÔÚµ÷ÓõÄÎļþÖÐ)

================ÄÚÁª»ã±à============

¡¾4¡¿ÄÚÁª»ã±à£ºÔÚcÓïÑÔ´úÂëÖÐǶÈë»ã±àÖ¸Áî

£¨1£©Gcc ͨ¹ý¹Ø¼ü×Ö¡°asm¡±À´ÉùÃ÷ÄÚÁª»ã±à

£¨2£©¸ñʽ£º asm»ò__asm__¿ªÍ·£¬Ð¡À¨ºÅ+·ÖºÅ£¬À¨ºÅÄÚÈÝд»ã±àÖ¸Áî¡£

Ö¸Áî+ntÓÃË«ÒýºÅÒýÉÏ

asm(code : output operand list : input operand list : clobber list);

£¨3£©ÀýÒ»£ºÎÞ²ÎÊý£¬ÎÞ·µ»ØÖµ

asm

(

//»ã±àÖ¸Áî

"mrs r0,cpsr nt"

"bic r0,r0,#0x80 nt"

"msr cpsr,r0 nt"

);

£¨4£©

Àý¶þ£ºÓвÎÊý 1£¬Óзµ»ØÖµ

ÈÃÄÚÁª»ã±à×ö¼Ó·¨ÔËË㣬Çóa+b£¬½á¹û´æÔÚcÖÐ

int a =100£»

int b =200£»

int c =0£»

asm

(

"add%0,%1,%2nt"

: "=r"(c) //Êä³öÁбí %0 --c

: "r"(a),"r"(b) //ÊäÈëÁбí %1 --a %2--b

: "memory" //֪ͨÁбí

);

ÀýÈý£ºÓвÎÊý 2 £¬Óзµ»ØÖµ

ÈÃÄÚÁª»ã±à×ö¼Ó·¨ÔËË㣬Çóa+b£¬½á¹û´æÔÚcÖУ¬°Ña-bµÄ´æÔÚdÖÐ

int a=100£»

int b=200£»

int c=0£»

int d=0£»

asm volatile

(

"add %[op1],%[op2],%[op3]nt"

:[op1]"=r¡±(sum)

:[op2]"r"(a),[op3]¡±r¡±(b)

:"memory"

" sub%[op4],%[op2],%[op3]nt "

:[%op4]"=r"(d)

:

:"memory"

);

¡¾5¡¿ gccµÄ´úÂëÓÅ»¯¼¶±ð£¬ÔÚ makefile ÎļþÖеıàÒëÃüÁî

4¼¶ O0 -- O3 Êý×ÖÔ½´ó£¬ÓÅ»¯³Ì¶ÈÔ½¸ß¡£O3×î´óÓÅ»¯

¡¾6¡¿volatile×÷ÓÃ

volatileÐÞÊεıäÁ¿£¬±àÒëÆ÷²»ÔÙ½øÐÐÓÅ»¯£¬Ã¿´Î¶¼ÕæÕý·ÃÎÊÄÚ´æµØÖ·¿Õ¼ä¡£

Èý¡¢ATPCS¹æÔò£º£¨ARM¡¢thumber³ÌÐòµ÷Óù淶£©£¨1£©Ê¹ÓÃr0-r3£¬ÒÀ´Î½ÓÊܲÎÊý

void func(a,b,c,d,e)

a -- r0

b -- r1

c -- r2

d -- r3

e -- Õ»

£¨2£©Ê¹ÓÃr0 ½ÓÊÕ·µ»ØÖµ

int func1(int m, int n)

m -- r0

n -- r1

·µ»ØÖµ¸ø r0

£¨3£©¾Ö²¿±äÁ¿£¬±£´æµ½r4--r11£¬µ±¾Ö²¿±äÁ¿¶àÓà8¸ö£¬ÓÃÕ»£¨4£©r12 -- ip£¨±£´æsp£©

r13 -- sp

r14 -- lr

r15 -- pc




¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ²é¿´ÆÀÂÛ »Ø¸´



ǶÈëʽ½»Á÷ÍøÖ÷Ò³ > MCU > µ¥Æ¬»ú¼¼ÊõÓ¦Óà > ϵͳѧϰARMÖ®Îå --CÓïÑԺͻã±à»ìºÏ±àд -
 

"ϵͳѧϰARMÖ®Îå --CÓïÑԺͻã±à»ìºÏ±àд -"µÄÏà¹ØÎÄÕÂ

ÍøÕ¾µØÍ¼

Χ¹Û()