ARM Applications


 
* Update history

- 2012.11.3 : Ãʱâ Release



 
1. Base of Software Engineering
   1.1 Memory Endian Formats
   1.2 º¸¼ö Ç¥Çö
   1.3 ³í¸®¿¬»ê
   1.4 Shift ¿¬»ê
   1.5 Rotate ¿¬»ê
   1.6 Áø¼öº¯È¯
   1.7 Data Types
   1.8 Aligned & Un-Aligned Data Access



 
1ÀåÀÇ ³»¿ëÀº ÄÄÇ»Å͸¦ Àü°øÇÑ »ç¶÷À̶ó¸é ´©±¸³ª ´Ù ¾Æ´Â ³»¿ëÀÌÁö¸¸ ¾î¼Àºí¸®¾î ½Ç½ÀÀ» ÇϱâÀ§Çؼ­´Â ¹Ýµå½Ã ¾Ë¾Æ¾ß ÇÏ´Â ³»¿ëÀÔ´Ï´Ù.
´Ù ¾Æ´Â ³»¿ëÀÌ°ÚÁö¸¸ ±â¾ïÀ» µÇ»ì¸®´Â Â÷¿ø¿¡¼­ °£´ÜÇÏ°Ô¸¸ ¼³¸í Çϵµ·Ï ÇÏ°Ú½À´Ï´Ù.

1. Base of Software Engineering

1.1 Memory Endian Formats
¿öµå µ¥ÀÌÅÍ ¾È¿¡¼­ÀÇ ¹ÙÀÌÆ® ¼ø¼­·Î Å©°Ô ºò ¿£µð¾ð°ú ¸®Æ² ¿£µð¾ðÀ¸·Î ³ª´­ ¼ö ÀÖ½À´Ï´Ù. ºò ¿£µð¾ðÀº »ç¶÷ÀÌ ¼ýÀÚ¸¦ ¾²´Â ¹æ¹ý°ú °°ÀÌ Å« ´ÜÀ§ÀÇ ¹ÙÀÌÆ®°¡ ¾Õ¿¡ ¿À´Â ¹æ¹ýÀÌ°í, ¸®Æ² ¿£µð¾ðÀº ¹Ý´ë·Î ÀÛÀº ´ÜÀ§ÀÇ ¹ÙÀÌÆ®°¡ ¾Õ¿¡ ¿À´Â ¹æ¹ýÀÔ´Ï´Ù. ´Ù½ÃÇѹø °­Á¶ ÇÏÁö¸¸ ÀÌ°ÍÀº ¿öµå ¹üÀ§ ³»¿¡¼­ÀÇ ¹ÙÀÌÆ® ´ÜÀ§ÀÇ ¼ø¼­ ÀÔ´Ï´Ù.
¶ÇÇÑ ARM ·¹Áö½ºÅÍ¿¡ ÀúÀåÀÌ µÉ °æ¿ì¿¡´Â ¿£µð¾ÈÀÇ ±¸ºÐÀÌ ¾ø°í ¸Þ¸ð¸® Á¢±Ù Ãø¸é¿¡¼­¸¸ ±¸ºÐÀÌ ÇÊ¿ä ÇÕ´Ï´Ù.

¿£µð¾È Á¾·ù 0x1234 0x12345678 ¾ÆÅ°ÅØÃÄ
Big-endian 12 34 12 34 56 78 ¸ðÅä·Î¶ó µî
Little-endian 34 12 78 56 34 12 x86


* ¸î¸î ¾ÆÅ°ÅØó´Â ºò ¿£µð¾ð°ú ¸®Æ² ¿£µð¾ð Áß Çϳª¸¦ ¼±ÅÃÇÒ ¼ö ÀÖµµ·Ï ¼³°èµÇ¾î ÀÖ°í, À̸¦ ¹ÙÀÌ ¿£µð¾ð(Bi-endian)À̶ó ºÎ¸¨´Ï´Ù. PowerPC, DEC ¾ËÆÄ, MIPS, PA-RISC, IA-64 µîÀº ¹ÙÀÌ ¿£µð¾ðÀ» »ç¿ëÇÏ´Â ´ëÇ¥ÀûÀÎ ¾ÆÅ°ÅØó ÀÔÀÌ´Ù. ¿ì¸®°¡ °øºÎÇÏ°í ÀÖ´Â ARMµµ ¿£µð¾ðÀ» ¼±ÅÃÇؼ­ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¼³°èµÇ¾î ÀÖ½À´Ï´Ù.
x86 ¾ÆÅ°ÅØó°¡ ¸®Æ² ¿£µð¾ðÀ» ¾²±â ¶§¹®¿¡, ¿À´Ã³¯ x86 ¾ÆÅ°ÅØó¸¦ »ç¿ëÇÏ´Â ´ëºÎºÐÀÇ µ¥½ºÅ©Åé ÄÄÇ»ÅÍ´Â ¸®Æ² ¿£µð¾ðÀ» ¾²¸ç À̸¦ "ÀÎÅÚ Æ÷¸Ë" À̶ó°í ÇÕ´Ï´Ù

Example)
32ºñÆ® ¼ýÀÚÀÎ 0x2A¸¦ Little-endianÀ¸·Î Ç¥½Ã Çϸé ?
0x00 00 00 2A = 2A 00 00 00


1.2 º¸¼ö Ç¥Çö
ÄÄÇ»ÅÍ¿¡¼­ º¸¼ö¸¦ »ç¿ëÇÏ´Â ÀÌÀ¯´Â ¹«¾úÀ»±î¿ä ? ¸ðµç °ÍÀÌ 0°ú 1·Î Ç¥ÇöµÇ´Â ÄÄÇ»ÅÍ¿¡¼­ À½¼ö¸¦ Ç¥ÇöÇϴµ¥ Æí¸® Çϱ⠶§¹®¿¡ »ç¿ëÇÕ´Ï´Ù. ¹°·Ð À̸¦ ÀÌ¿ëÇؼ­ »¬¼Àµµ ÇÕ´Ï´Ù. ¿¹¸¦ µé¸é 12-3 ÀÇ ¼ö½ÄÀ» ÄÄÇ»ÅÍ(ALU)¿¡¼­ °è»êÀ» ÇÏ¸é ½ÇÁ¦·Î´Â 12¿¡¼­ 3À» »©´Â °ÍÀÌ ¾Æ´Ï¶ó 12 ¿Í 3ÀÇ 2ÀÇ º¸¼ö(3ÀÇ À½¼öÇ¥Çö)¸¦ ´õÇؼ­ °è»êÀ» ÇÏ°Ô µË´Ï´Ù.

1.2.1 "1" ÀÇ º¸¼ö
ÁÖ¾îÁø ÀÌÁø¼öÀÇ ¸ðµç ÀÚ¸®ÀÇ ¼ýÀÚ¸¦ ¹ÝÀü(0À» 1·Î, 1À» 0À¸·Î)½ÃÅ°¸é 1ÀÇ º¸¼ö¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.

8ÀÚ¸®ÀÇ ÀÌÁø¼ö 01001011(½ÊÁø¼ö·Î 75)ÀÇ 1ÀÇ º¸¼ö¸¦ ±¸ÇÏ¸é ¾Æ·¡¿Í °°½À´Ï´Ù.

 01001011 ÀÇ ¸ðµç ÀÚ¸®ÀÇ ¼ö¸¦ ¹ÝÀü½ÃŲ´Ù.

 10110100 --> 1ÀÇ º¸¼ö

1.2.2 "2" ÀÇ º¸¼ö
1ÀÇ º¸¼ö¸¦ ±¸ÇÑ´ÙÀ½ 2Áø¼ö "1" À» ´õÇÏ¸é µË´Ï´Ù.

8ÀÚ¸®ÀÇ ÀÌÁø¼ö 01001011(½ÊÁø¼ö·Î 75)ÀÇ 2ÀÇ º¸¼ö¸¦ ±¸ÇÏ¸é ¾Æ·¡¿Í °°½À´Ï´Ù.

       01001011 ÀÇ ¸ðµç ÀÚ¸®ÀÇ ¼ö¸¦ ¹ÝÀü½ÃŲ´Ù.
       10110100 --> 1ÀÇ º¸¼ö
                
       10110100
  +)  00000001 --> 1ÀÇ º¸¼ö¿¡¼­ 1À» ´õÇÕ´Ï´Ù.
  ---------------

       10110101 --> 2ÀÇ º¸¼ö

º¸¼ö¸¦ ±¸ÇÏÇÒ´ë ÇÑ ÀÚ¸®°¡ ´õ ±æ¾îÁú °æ¿ì¿¡´Â °¡Àå ³ôÀº ÀÚ¸®ÀÇ ¼ýÀÚ´Â ¹ö¸³´Ï´Ù.


1.2.3 "2" ÀÇ º¸¼ö¸¦ ÀÌ¿ëÇÑ »¬¼À

¿¹Á¦) 100-75¸¦ 2ÀÇ º¸¼ö¸¦ ÀÌ¿ëÇؼ­ ¿¬»êÇϽÿä.

100-75´Â 100+(-75)¿Í °°À¸¹Ç·Î


       01100100 ( 10Áø¼ö 100 )
   +) 10110101 ( 10Áø¼ö 75ÀÇ 2ÀÇ º¸¼ö )
   ---------------
       100011001


»õ·Î »ý±ä °¡Àå ³ôÀº ÀÚ¸®ÀÇ ¼ýÀÚ¸¦ »©°í ³²Àº 00011001Àº ½ÊÁø¼ö·Î 25¿Í °°À¸¸ç ÀÌ´Â °è»êÇÏ·Á´ø ½ÄÀÇ °á°úÀÔ´Ï´Ù.

¿¹Á¦) 10-75¸¦ 2ÀÇ º¸¼ö¸¦ ÀÌ¿ëÇؼ­ ¿¬»êÇϽÿä.

10-75´Â 10+(-75)¿Í °°À¸¹Ç·Î


       00001010 ( 10Áø¼ö 10 )
   +) 10110101 ( 10Áø¼ö 75ÀÇ 2ÀÇ º¸¼ö )
   ---------------
       10111111 ( ÀÌ °á°ú´Â À½¼ö : MSB°¡ 1 À̹ǷΠ´Ù½Ã 2ÀÇ º¸¼ö¸¦ ÃëÇϸé 65 Áï -65 )

10111111 °á°ú´Â MSB°¡ 1(À½¼ö) À̹ǷΠ´Ù½Ã 2ÀÇ º¸¼ö¸¦ ÃëÇغ¸¸é 01000001Àº ½ÊÁø¼ö·Î 65¿Í °°À¸¸ç ÀÌ´Â °è»êÇÏ·Á´ø ½ÄÀÇ °á°ú -65°¡ µË´Ï´Ù.

 

1.3 ³í¸® ¿¬»ê

1.3.1 NOT

2Áø¼ö °¢ ÀÚ¸®ÀÇ °ªÀ» ¹Ý´ë·Î ¹Ù²Ù´Â ¿¬»ê ÀÔ´Ï´Ù. ÀÌ ¿¬»êÀº ¾î¶² °ªÀÇ º¸¼ö¸¦ ±¸ÇÒ ¶§ È¿°úÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.


NOT 0111
  = 1000

C³ª C++¿¡´Â "~" ¿¬»êÀ» ÅëÇØ ÀÌ °ªÀ» ±¸ÇÒ ¼ö ÀÖ½À´Ï´Ù.



x = ~y;

1.3.2 OR
µÎ °ªÀÇ °¢ ÀÚ¸´¼ö¸¦ ºñ±³ÇØ, µÑ Áß Çϳª¶óµµ 1ÀÌ ÀÖ´Ù¸é 1À», ¾Æ´Ï¸é 0À» °è»êÇÕ´Ï´Ù.


   0101
OR 0011
 = 0111

C/C++¿¡´Â "|" ¿¬»êÀÚ°¡ ÀÌ ±â´ÉÀ» Á¦°ø ÇÕ´Ï´Ù.



x = y | z;


1.3.3 XOR 
µÎ °ªÀÇ °¢ ÀÚ¸´¼ö¸¦ ºñ±³ÇØ, °ªÀÌ °°À¸¸é 0, ´Ù¸£¸é 1À» °è»êÇÕ´Ï´Ù.


    0101
XOR 0011
  = 0110

C/C++¿¡´Â "^" ¿¬»êÀÚ°¡ ÀÌ ±â´ÉÀ» Á¦°øÇÑ´Ù.



x = y ^ z;

1.3.4 AND

µÎ °ªÀÇ °¢ ÀÚ¸´¼ö¸¦ ºñ±³ÇØ, µÎ °ª ¸ðµÎ¿¡ 1ÀÌ ÀÖÀ» ¶§¿¡¸¸ 1À», ³ª¸ÓÁö °æ¿ì¿¡´Â 0À» °è»ê ÇÕ´Ï´Ù.


    0101
AND 0011
  = 0001

C/C++¿¡´Â & ¿¬»êÀÚ°¡ ÀÌ ±â´ÉÀ» Á¦°øÇÑ´Ù.


    
  x = y & z;


1.4. Shift ¿¬»ê
1.4.1 ¿ÞÂÊÀ¸·Î ½¬ÇÁÆ®(<<)

"<<" Å°¿öµå´Â µ¥ÀÌÅ͸¦ ¿ÞÂÊÀ¸·Î ºñÆ® ¼ö¸¸Å­ À̵¿½ÃÅ°±â ¶§¹®¿¡ 2ÀÇ "À̵¿ÇÒ ºñÆ®¼ö" ¸¦ Á¦°öÇÑ °ª°ú µ¥ÀÌÅÍ°¡ °öÇØÁø °ªÀÌ °á°ú °ªÀ¸·Î µµÃ⠵˴ϴÙ. 5(b00000101)¸¦ ¿ÞÂÊÀ¸·Î 3ºñÆ® À̵¿½ÃÅ°¸é 5 << 3 = 40(b00101000) Áï 5 * 8 ÇÑ °Í°ú °°Àº È¿°ú°¡ ³ªÅ¸ ³³´Ï´Ù.


°¡ÁßÄ¡ 128 64 32 16 8 4 2 1
¿¬»êÀü 0 0 0 0 0 1 0 1
¿¬»êÈÄ 0 0 1 0 1 0 0 0

 

1.4.2 ¿À¸¥ÂÊÀ¸·Î ½¬ÇÁÆ®(>>)

">>" Å°¿öµå´Â µ¥ÀÌÅ͸¦ ¿À¸¥ÂÊÀ¸·Î ºñÆ® ¼ö¸¸Å­ À̵¿½ÃÅ°±â ¶§¹®¿¡ 2ÀÇ "À̵¿ÇÑ ºñÆ®¼ö" ¸¦ Á¦°öÇÑ °ªÀ¸·Î µ¥ÀÌÅ͸¦ ³ª´°¼À ÇÑ °ªÀÌ µµÃ⠵˴ϴÙ.
40(b00101000)¸¦ ¿À¸¥ÂÊÀ¸·Î 1ºñÆ® À̵¿½ÃÅ°¸é 40 >> 1 = 20(b00101000) Áï 40/2 ÇÑ °Í°ú °°Àº È¿°ú°¡ ÀÖ½À´Ï´Ù.


°¡ÁßÄ¡ 128 64 32 16 8 4 2 1
¿¬»êÀü 0 0 1 0 1 0 0 0
¿¬»êÈÄ 0 0 0 1 0 1 0 0


1.4.3 ºÎÈ£°¡ ÀÖ´Â ¿ÞÂÊ ½¬ÇÁÆ® ¿¬»ê(<<)

79(b01001111) << 1 = -98(b10011110)



°¡ÁßÄ¡ ºÎÈ£ 64 32 16 8 4 2 1
¿¬»êÀü 0 1 0 0 1 1 1 1
¿¬»êÈÄ 1 0 0 1 1 1 1 0

 

ºÎÈ£ ºñÆ®("1")¿Í ±× ´ÙÀ½ ºñÆ®("0")°¡ ¼­·Î ´Ù¸¥ °ªÀÎ °æ¿ì ºÎÈ£°¡ ¹Ù²î°í Overflow°¡ ¹ß»ýÇÏ°Ô µË´Ï´Ù. À§ÀÇ ¿¹Á¦¿¡¼­´Â ¾ç¼ö¿¡¼­ À½¼ö·Î ¹Ù²î¸é¼­ Overflow°¡ ¹ß»ý ÇÏ¿´½À´Ï´Ù.

1.4.4 ºÎÈ£°¡ ÀÖ´Â ¿À¸¥ÂÊ ½¬ÇÁÆ® ¿¬»ê(>>)

¿©±â¼­ 65ÀÇ 2ÀÇ º¸¼ö¸¦ ÀÌ¿ëÇؼ­ -65¸¦ Ç¥Çö Çß½À´Ï´Ù. -65(b10111111) >> 1 = -33(b11011111)


 

¿¹¸¦ µé¾î À§ÀÇ ±×¸²°ú °°ÀÌ "1011 1111" °ªÀ» ¿À¸¥ÂÊÀ¸·Î Çѹø À̵¿ÇÏ¸é ¿ÞÂÊ¿¡ »ý±ä ºó °ø°£Àº ÃÖ»óÀ§ ºñÆ®ÀÎ 1 °ªÀ¸·Î ä¿öÁö´Â °ÍÀÔ´Ï´Ù. ¸¸¾à "-160 >> 4" ¸¦ ¿¬»êÇϸé -160 ÀÇ ÀÌÁø¼ö °ªÀÎ
"1010 0000" °¡ ¿À¸¥ÂÊÀ¸·Î 4ºñÆ®¸¸Å­ À̵¿ÇÏ°í, ¿ÞÂÊ¿¡ »ý±ä ³×°³ÀÇ ºó °ø°£Àº ÃÖ»óÀ§ ºñÆ®ÀÎ 1 ·Î ä¿öÁö¹Ç·Î ¿¬»ê °á°ú´Â "1111 1010" °¡ µË´Ï´Ù.

1.5 Rotate ¿¬»ê
µ¥ÀÌÅÍÀÇ ¸ðµç ºñÆ®µéÀ» °¢°¢ ¼­·Î ÀÌ¿ôÇÑ ºñÆ®ÀÇ ÀÚ¸®·Î ¿Å±â°í ÇÑ ÂÊ ³¡¿¡¼­ ¹Ð·Á ³ª°¡´Â ºñÆ®°¡ ´Ù½Ã ¹Ý´ëÆí ³¡À¸·Î µé¾î¿À°Ô µÇ´Â ¿¬»ê ÀÔ´Ï´Ù.

1.5.1 ºÎÈ£ ¾ø´Â(Rotate no carry) ¿ÞÂÊ Rotate

23(b00010111) ROL 1 = 46(b00101110)


Left circular shift or rotate

1.5.2 ºÎÈ£ ¾ø´Â(Rotate no carry) ¿À¸¥ÂÊ Rotate

23(b00010111) ROR 1 = 139(b10001011)

Right circular shift or rotate

1.5.3 ºÎÈ£ ÀÖ´Â(Rotate through carry) ¿ÞÂÊ Rotate

ROL°ú µ¿ÀÏÇÏÁö¸¸ Carry Flag°¡ ÃÖÇÏÀ§ ºñÆ®·Î À̵¿ÇÏ°í, ÃÖ»óÀÇ ºñÆ®ÀÇ °ªÀÌ Carry Flag ·Î À̵¿ µË´Ï´Ù.

23(b00010111) RCL 1 = 47(b00101111)

 
Left rotate through carry

1.5.4 ºÎÈ£ ÀÖ´Â(Rotate through carry) ¿À¸¥ÂÊ Rotate

23(b00010111) RCR 1 = 267(b100001011)


Right rotate through carry


¾ÆÁÖ ±âº»ÀûÀÎ ³»¿ëµé ÀÌÁö¸¸ ±âº»ÀûÀÎ°Í ºÎÅÍ Á¤È®ÇÏ°Ô ¾Ë°í ÀÖ¾î¾ß ÇÕ´Ï´Ù. ÁÖ·Î µ¥ÀÌÅÍ ¾Ïȣȭ³ª, °í¼ÓÀÇ ±×·¡ÇÈ Ã³¸® ÀÛ¾÷ µî¿¡¼­ Shift, Rotate¿¬»êÀ» ¸¹ÀÌ »ç¿ëÇÕ´Ï´Ù.

1.6 Áø¼öº¯È¯

2Áø¼ö¸¦ 16Áø¼ö·Ñ º¯È¯ ÇÒ ¶§ 4ÀÚ¸®¾¿ ²÷¾î¼­ °è»êÇϸé Æí¸®ÇÕ´Ï´Ù. ÀÚÁÖ ¾²ÀÌ´Â ¼öµéÀÇ 2Áø¼ö¿Í 16Áø¼öµéÀÇ ¿¹Á¦µé ÀÔ´Ï´Ù.

2^4 = 16B = b0001 0000 = 0x10
2^5 = 32B = b0010 0000 = 0x20
2^6 = 64B = b0100 0000 = 0x40
2^7 = 128B = 0x80
2^8 = 256B = b0001 0000 0000 = 0x100
2^10 = 1KB = b0100 0000 0000 = 0x400
2^20 = 1MB = b0001 0000 0000 0000 0000 0000 = 0x100000
2^30 = 1GB = 0x40000000
2^40 = 1TB = 0X10000000000
4KB = 0x1000, 64KB = 0x10000, 1MB = 0x100000

Ex)
4GB = 4*1GB = 4 * 2^30 = 2^2 * 2^30 = 2^32 = 0x100000000
256KB = 256*1KB = 2^8 * 2^10 = 2^18 = 0x40000
96KB = 64KB + 32KB = 2^6*2^10 + 2^5*2^10 = 0x10000 + 0x3000 = 0x13000
135KB = 128KB + 4KB + 2KB + 1KB = 2^17 + 2^12 + 2^11 + 2^10 = 0x20000 + 0x1000 + 0x800 + 0x400 = 0x21c00

1.7 Data Types

Byte( 8 bits )
Halfword( 16 bits )
Word ( 32 bits )
Long Word ( 64 bits )

- Value ranges

unsigned char val;
0 <= val <= 2^8(255)

signed char val;
-128(0x80) <= val <= 127(0x7F)

int(signed 32bit integer) val;
0x8000 0000 <= val <= 7FFFF FFFF

1.8 Aligned & Un-Aligned Data Access

1.8.1 Aligned Access
(1) Halfword Data Access : µ¥ÀÌÅÍÀÇ ÁÖ¼Ò °ªÀÌ Â¦¼ö À̾î¾ß ÇÕ´Ï´Ù.
(2) Word Data Access : µ¥ÀÌÅÍÀÇ ÁÖ¼Ò °ªÀÌ 4ÀÇ ¹è¼ö À̾î¾ß ÇÕ´Ï´Ù.

Aligned Data Access
char buf[100];

int *p;
int gVar;

p = (int *)&buf[0];
gVar = *p --> Data Abort °¡´É¼º 1


p = (int *)&buf[1];
gVar = *p --> Data Abort °¡´É¼º 2


- Data Abort °¡´É¼º 2 : bufÀÇ µ¥ÀÌÅÍÇüÀÌ char(8 bit) À̱⠶§¹®¿¡ 0¹ø° ÀÌÈÄ ºÎÅÍ´Â 4ÀÇ ¹è¼ö°¡ ¾Æ´Ï±â ¶§¹®¿¡ Data Abort °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.
- Data Abort °¡´É¼º 1 : 0¹ø° À妽ºÀε¥ ¾î¶»°Ô º¸¸é Data Abort °¡´É¼ºÀÌ ¾ø´Â°Í ó·³ º¸ÀÔ´Ï´Ù. º¸ÅëÀº Linker°¡ ¾Ë¾Æ¼­ buf º¯¼öÀÇ ÇÒ´ç ÁÖ¼Ò¸¦ 4ÀÇ ¹è¼ö¿¡ ¸ÂÃß¾î ÁÖÁö¸¸ ±×·¸Áö ¾ÊÀ» °¡´É¼ºµµ Àֱ⠶§¹®¿¡ ¸µÄ¿¿¡ µû¶ó¼­´Â Data Abort °¡´É¼ºÀÌ ÀÖ´Â °ÍÀÔ´Ï´Ù. ±×·¸´Ù¸é Data Abort°¡ ¹ß»ýÇÏÁö ¾Êµµ·Ï char ¹è¿­ buf¸¦ ¼±¾ð ÇÏ·Á¸é ¾î¶»°Ô ÇØ¾ß ÇÒ±î¿ä ? ÄÄÆÄÀÏ·¯ Áö½ÃÀÚ¸¦ »ç¿ëÇؼ­ char ¹è¿­ buf ¸¦ °­Á¦·Î 4ÀÇ ¹è¼ö·Î ¸ÂÃß¾î ÁÖ´Â °ÍÀÔ´Ï´Ù.

Aligned Data Access
#pragma data_alignment = 2 --> °­Á¦·Î 4ÀÇ ¹è¼ö°¡ µÇµµ·Ï Áö½Ã
char buf[100];

int *p;
int gVar;

p = (int *)&buf[0];
gVar = *p --> Á¤»óµ¿ÀÛ


p = (int *)&buf[1];
gVar = *p --> 1¹ø° ¹è¿­ ¿¡¼­´Â ¿©ÀüÈ÷ Data Abort °¡´É¼º 2


¿©±â¼­ ¶Ç ÇÑ°¡Áö ARM C¾ð¾î¿¡¼­ ±¸Á¶Ã¼ ¼±¾ðÀ» ÇÒ¶§ ¾î¶»°Ô ¼±¾ðÇÏ´Â °ÍÀÌ È¿À²ÀûÀÎÁö¸¦ ¾Ë¾Æ º¾½Ã´Ù.

ºñ È¿À²ÀûÀÎ ±¸Á¶Ã¼ µ¥ÀÌÅÍ ¼±¾ð
- ¸Þ¸ð¸® ¹èÄ¡


À§ÀÇ ±×¸²À» º¸¸é ÃÑ 5byteÀÇ ¸Þ¸ð¸® °ø°£À» ³¶ºñ ÇÏ¿´½À´Ï´Ù. ±×·¸´Ù¸é ¼±¾ð ¼ø¼­¸¦ short c, int b ÀÇ ¼ø¼­¸¦ ¹Ù²Ù¸é ¾î¶»°Ô µÉ±î¿ä ?

ºñ È¿À²ÀûÀÎ ±¸Á¶Ã¼ µ¥ÀÌÅÍ ¼±¾ð
- ¸Þ¸ð¸® ¹èÄ¡


´ÜÁö ¼±¾ð ¼ø¼­¸¸ ¹Ù²Ù¾îµµ ¸Þ¸ð¸® ³¶ºñ°¡ 5-bytes ¿¡¼­ 1-byte·Î ÁÙ¾ú½À´Ï´Ù.

1.8.2 Un-Aligned Data Access
(1) ARM Architecture v6 ºÎÅÍ Áö¿øµÊ
(2) ARM Architecture v4T, v5T(E) µî¿¡¼­ Un-aligned data¸¦ Á¢±Ù ÇÏ·Á°í Çϸé Data Abort°¡ ¹ß»ý ÇÕ´Ï´Ù.