ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

C/C++»ù´¡ÖªÊ¶ÎÊÌâ(¶þ)
2014-11-24 01:20:07 ¡¾´ó ÖРС¡¿ ä¯ÀÀ:423´Î
Tags£ºC/C »ù´¡ÖªÊ¶ ÎÊÌâ
µÄÖ¸Õë
Ò»¸öÖ¸ÏòÕûÐÍÊýµÄ³£Ö¸Õë
Ò»¸öÖ¸Ïò³£ÕûÐÍÊýµÄ³£Ö¸Õë
4
a) 0x12345678
little endian big endian ¸ÕºÃ·´¹ýÀ´
¸ßµØÖ·--¡µ 0x12 µÍµØÖ·--¡µ 0x12
0x34 0x34
0x56 0x56
µÍµØÖ·--¡µ 0x78 ¸ßµØÖ·--¡µ 0x78
b)²ÎÊý<=4ʱºò£¬Í¨¹ýR0~R3´«µÝ£¬>4µÄͨ¹ýѹջ·½Ê½´«µÝ
c) Òì³££ºÔÚ²úÉúʱ±ØÐ뿼ÂÇÓë´¦ÀíÆ÷µÄʱÖÓͬ²½£¬Êµ¼ùÉÏ£¬Òì³£Ò²³ÆΪͬ²½Öжϡ£ÔÚ´¦ÀíÆ÷Ö´Ðе½ÓÉÓÚ±à³ÌʧÎó¶øµ¼ÖµĴíÎóÖ¸Áîʱ£¬»òÕßÔÚÖ´ÐÐÆÚ¼ä³öÏÖÌØÊâÇé¿ö(Èçȱҳ)£¬±ØÐë¿¿Äں˴¦ÀíµÄʱºò£¬´¦ÀíÆ÷¾Í»á²úÉúÒ»¸öÒì³£¡£
ËùνÖжÏÓ¦¸ÃÊÇÖ¸ÍⲿӲ¼þ²úÉúµÄÒ»¸öµçÐźţ¬´ÓcpuµÄÖжÏÒý½Å½øÈ룬´ò¶Ïcpuµ±Ç°µÄÔËÐУ»
ËùνÒì³££¬ÊÇÖ¸Èí¼þÔËÐÐÖз¢ÉúÁËһЩ±ØÐë×÷³ö´¦ÀíµÄʼþ£¬cpu×Ô¶¯²úÉúÒ»¸öÏÝÈëÀ´´ò¶Ïµ±Ç°ÔËÐУ¬×ªÈëÒì³£´¦ÀíÁ÷³Ì¡£
Òì²½Óëͬ²½µÄÇø±ð`
5
6 ¸ßÓÅÏȼ¶ÈÎÎñÐèÒªµÈ´ýµÍÓÅÏȼ¶ÈÎÎñÊÍ·Å×ÊÔ´£¬¶øµÍÓÅÏȼ¶ÈÎÎñÓÖÕýÔڵȴýÖеÈÓÅÏȼ¶ÈÎÎñµÄÏÖÏó½Ð×öÓÅÏȼ¶·´×ª
ÓÅÏȼ¶¼Ì³Ð²ßÂÔ(Priority inheritance):¼Ì³ÐÏÖÓб»×èÈûÈÎÎñµÄ×î¸ßÓÅÏȼ¶×÷ΪÆäÓÅÏȼ¶£¬ÈÎÎñÍ˳öÁÙ½çÇø£¬»Ö
¸´³õʼÓÅÏȼ¶¡£
ÓÅÏȼ¶Ì컨°å²ßÂÔ(Priority ceilings):¿ØÖÆ·ÃÎÊÁÙ½ç×ÊÔ´µÄÐźÅÁ¿µÄÓÅÏȼ¶Ì컨°å¡£
ÓÅÏȼ¶¼Ì³Ð²ßÂÔ¶ÔÈÎÎñÖ´ÐÐÁ÷³ÌµÄÓ°ÏìÏà¶Ô½ÌС£¬ÒòΪֻÓе±¸ßÓÅÏȼ¶ÈÎÎñÉêÇëÒѱ»µÍÓÅÏȼ¶ÈÎÎñÕ¼ÓеÄÁÙ½ç×ÊÔ´
ÕâÒ»ÊÂʵ·¢Éúʱ£¬²Å̧ÉýµÍÓÅÏȼ¶ÈÎÎñµÄÓÅÏȼ¶¡£
1 ¶Á³ÌÐò¶Î£¬»Ø´ðÎÊÌâ
int main(int argc,char *argv[])
{
int c=9,d=0;
c=c++%5;
d=c;
printf(¡°d=%d\n¡±,d);
return 0;
}
a) д³ö³ÌÐòÊä³ö
5
b) ÔÚÒ»¸ö¿ÉÒÆÖ²µÄϵͳÖÐÕâÖÖ±í´ïʽÊÇ·ñ´æÔÚ·çÏÕ£¿why


#include ¡°stdio.h¡±
int a=0;
int b;
static char c;
int main(int argc,char *argv[])
{
char d=4;
static short e;


a++;
b=100;
c=(char)++a;
e=(++d)++;
printf(¡°a=%d, b=%d, c=%d, d= %d, e=%d¡±,a,b,c,d,e);
return 0;
}
a) д³ö³ÌÐòÊä³ö
ÒÔǰѧ¹ýc++,Õâ¸öÊÇ¿ÉÒ﵀ e=(++d)++;
ÏÖÔڲŷ¢ÏÖÔÚcÖУ¬ÕâÊDz»ÐеÄ
a=2, b=100, c=2, d= 6, e=5
b) ±àÒëÆ÷Èç¹û°²ÅŸ÷¸ö±äÁ¿(a,b,c,d)ÔÚÄÚ´æÖеIJ¼¾Ö(eg. stack,heap,data section,bss section),×îºÃÓÃͼÐη½Ê½ÃèÊö¡£
data section: a
bss section: b,c,e
stack d
ÔÚ²ÉÓöÎʽÄÚ´æ¹ÜÀíµÄ¼Ü¹¹ÖУ¬Êý¾Ý¶Î£¨data segment£©Í¨³£ÊÇÖ¸ÓÃÀ´´æ·Å³ÌÐòÖÐÒѳõʼ»¯µÄÈ«¾Ö±äÁ¿µÄÒ»¿éÄÚ´æÇøÓò¡£Êý¾Ý¶ÎÊôÓÚ¾²Ì¬ÄÚ´æ·ÖÅä¡£


ÔÚ²ÉÓöÎʽÄÚ´æ¹ÜÀíµÄ¼Ü¹¹ÖУ¬BSS¶Î£¨bss segment£©Í¨³£ÊÇÖ¸ÓÃÀ´´æ·Å³ÌÐòÖÐδ³õʼ»¯µÄÈ«¾Ö±äÁ¿µÄÒ»¿éÄÚ´æÇøÓò¡£BSSÊÇÓ¢ÎÄBlock Started by SymbolµÄ¼ò³Æ¡£BSS¶ÎÊôÓÚ¾²Ì¬ÄÚ´æ·ÖÅä¡£


4 ǶÈëʽϵͳÏà¹ØÎÊÌâ
a) ¶ÔÓÚÕûÐαäÁ¿A=0¡Á12345678,Çë»­³öÔÚlittle endian¼°big endianµÄ·½Ê½ÏÂÔÚÄÚ´æÖÐÊÇÈçºÎ´æ´¢µÄ¡£


low ¨C > high
little endian 0¡Á78 0¡Á56 0¡Á34 0¡Á12
big endian 0¡Á12 0¡Á34 0¡Á56 0¡Á78


b) ÔÚARMϵͳÖУ¬º¯Êýµ÷ÓõÄʱºò£¬²ÎÊýÊÇͨ¹ýÄÄÖÖ·½Ê½´«µÝµÄ
ÔÚarm»ã±àÖÐ,Èç¹û²»³¬¹ý4¸ö²ÎÊýʱ,ÊÇͨ¹ýr0 -r3¼Ä´æÆ÷À´´«µÝ²ÎÊý£¬>4µÄͨ¹ýѹջ·½Ê½´«µÝ¡£


c) ÖжÏ(interrupt,Èç¼üÅÌÖжÏ)ÓëÒì³£(exception,Èç³ýÁãÒì³£)ÓкÎÇø±ð
ÔÚ¡¶LinuxÄÚºËÉè¼ÆÓëʵÏÖ¡·Ò»ÊéÖУ¬ËµµÀ£º
Òì³£ £ºÔÚ²úÉúʱ±ØÐ뿼ÂÇÓë´¦ÀíÆ÷µÄʱÖÓͬ²½£¬Êµ¼ùÉÏ£¬Òì³£Ò²³ÆΪͬ²½Öжϡ£ÔÚ´¦ÀíÆ÷Ö´Ðе½ÓÉÓÚ±à³ÌʧÎó¶øµ¼ÖµĴíÎóÖ¸Áîʱ£¬»òÕßÔÚÖ´ÐÐÆÚ¼ä³öÏÖÌØÊâÇé¿ö(Èçȱҳ)£¬±ØÐë¿¿Äں˴¦ÀíµÄʱºò£¬´¦ÀíÆ÷¾Í»á²úÉúÒ»¸öÒì³£¡£


ÖжϿɷÖΪͬ²½£¨synchronous£©ÖжϺÍÒì²½£¨asynchronous£©Öжϣº
1. ͬ²½ÖжÏÊǵ±Ö¸ÁîÖ´ÐÐʱÓÉ CPU ¿ØÖƵ¥Ôª²úÉú£¬Ö®ËùÒÔ³ÆΪͬ²½£¬ÊÇÒòΪֻÓÐÔÚÒ»ÌõÖ¸ÁîÖ´ÐÐÍê±Ïºó CPU ²Å»á·¢³öÖжϣ¬¶ø²»ÊÇ·¢ÉúÔÚ´úÂëÖ¸ÁîÖ´ÐÐÆڼ䣬±ÈÈçϵͳµ÷Óá£
2. Òì²½ÖжÏÊÇÖ¸ÓÉÆäËûÓ²¼þÉ豸ÒÀÕÕ CPU ʱÖÓÐźÅËæ»ú²úÉú£¬¼´Òâζ×ÅÖжÏÄܹ»ÔÚÖ¸ÁîÖ®¼ä·¢Éú£¬ÀýÈç¼üÅÌÖжϡ£
ËùνÖжÏÓ¦¸ÃÊÇÖ¸ÍⲿӲ¼þ²úÉúµÄÒ»¸öµçÐźţ¬´ÓcpuµÄÖжÏÒý½Å½øÈ룬´ò¶Ïcpuµ±Ç°µÄÔËÐУ»
ËùνÒì³££¬ÊÇÖ¸Èí¼þÔËÐÐÖз¢ÉúÁËһЩ±ØÐë×÷³ö´¦ÀíµÄʼþ£¬cpu×Ô¶¯²úÉúÒ»¸öÏÝÈëÀ´´ò¶Ïµ±Ç°ÔËÐУ¬×ªÈëÒì³£´¦ÀíÁ÷³Ì¡£


6 ÓÅÏȼ¶·´×ªÎÊÌâÔÚǶÈëʽϵͳÖÐÊÇÒ»ÖÐÑÏÖصÄÎÊÌ⣬±ØÐë¸øÓë×ã¹»ÖØÊÓ¡£
a) Ê×ÏÈÇë½âÊÍÓÅÏȼ¶·´×ªÎÊÌâ
¸ßÓÅÏȼ¶ÈÎÎñÐèÒªµÈ´ýµÍÓÅÏȼ¶ÈÎÎñÊÍ·Å×ÊÔ´£¬¶øµÍÓÅÏȼ¶ÈÎÎñÓÖÕýÔڵȴýÖеÈÓÅÏȼ¶ÈÎÎñµÄÏÖÏó½Ð×öÓÅÏȼ¶·´×ª


b) ºÜ¶àRTOSÌṩÓÅÏȼ¶¼Ì³Ð²ßÂÔ(Priority inheritance)ºÍÓÅÏȼ¶Ì컨°å²ßÂÔ(Priority ceilings)ÓÃÀ´½â¾öÓÅÏȼ¶·´×ªÎÊÌ⣬ÇëÌÖÂÛÕâÁ½ÖÖ²ßÂÔ¡£


ÓÅÏȼ¶¼Ì³Ð²ßÂÔ(Priority inheritance):×îµÍÓÅÏȼ¶ÈÎÎñ¼Ì³ÐÏÖÓб»×èÈûÈÎÎñµÄ×î¸ßÓÅÏȼ¶×÷ΪÆäÓÅÏȼ¶£¬ÈÎÎñÍ˳öÁÙ½çÇø£¬»Ö


¸´³õʼÓÅÏȼ¶¡£
ÓÅÏȼ¶Ì컨°å²ßÂÔ(Priority ceilings):¿ØÖÆ·ÃÎÊÁÙ½ç×ÊÔ´µÄÐźÅÁ¿µÄÓÅÏȼ¶Ì컨°å¡£
ÓÅÏȼ¶¼Ì³Ð²ßÂÔ¶ÔÈÎÎñÖ´ÐÐÁ÷³ÌµÄÓ°ÏìÏà¶Ô½ÌС£¬ÒòΪֻÓе±¸ßÓÅÏȼ¶ÈÎÎñÉêÇëÒѱ»µÍÓÅÏȼ¶ÈÎÎñÕ¼ÓеÄÁÙ½ç×ÊÔ´


ÕâÒ»ÊÂʵ·¢Éúʱ£¬²Å̧ÉýµÍÓÅÏȼ¶ÈÎÎñµÄÓÅÏȼ¶¡£
viaµÄ¿¼Ì⣭£­¼ÌÐø
2007-06-29 11:09
1.viaµÄ¿¼ÌâÒ»µÀ
Õâ¸ö³ÌÐòÉè¼ÆµÄ˼ÏëÊÇÕâÑùµÄ£º
ΪÁ˲âÊÔ32λ»úÉϵĸ¡µãÊýµÄÔËË㾫¶È£¬×÷ÈçÏ¿¼ÂÇ£º
µ±1.5 == 1ʱ(¶þ½øÖÆ1.1==1)¾«¶ÈΪ1¸öСÊýλ
µ±1.25 == 1ʱ£¨¶þ½øÖÆ1.01==1)¾«¶ÈΪ2¸öСÊýλ
¼ÌÐøÅжϲâÊÔ£¬Ö±µ½Á½ÕßÏàµÈ£¬´Ó¶øµÃµ½¾«¶È¡£
ËùÒÔ³ÌÐò´úÂëÈçÏ£º
int main()
{ int nCount;
float number1,number2;
nCount = 0;
number1 = 1.0;
number2 = 1.0
while( number1 + number2 != number1 ){
nCount++;
number2 /= 2.0;
}
printf( ¡°%d bits accruacy.\n¡±, nCount );
}
ÎÊÌâÊÇ£¬½á¹ûΪ¶àÉÙ£¿
¾­²âÊÔµÃ64»òÕß53»òÕß24(ÉԼӸĶ¯)¡£¡£¡£
µÃ53ºÍ24ÒÑ»ù±¾µÃ³ö´ð°¸£¬Ö÷ÒªÊÇieee 754±ê×¼Öй涨µ¥Ë«¾«¶ÈÊý×ֵĵ×ÊýÖ¸Êý·ûºÅλËùÖᣡ£¡£64µÄÄ¿Ç°»¹Ã»Óеóö½áÂÛ¡£¡£¡£
2.¸Ä´íÌâ
void mymul(double *p)
{
*p *= 2.0;
}
int main(int argc, char *argv[])
{
float f = 6.0;
mymul((double *) &f);
printf(¡°now f = %f\n¡±, f);
return 0;
}
Ö±½ÓÔËÐУ¬½á¹ûΪ6.00000
Õâ¸öÌâÄ¿ºÜ¼òµ¥£¬¿ÉÒÔÓкܶàÖָķ¨£¬È磺a.°Ñfloat f=6.0;¸ÄΪdouble f=6.0;¾¦ÃæµÄmymul¾ä²»ÒªÇ¿ÖÆÀàÐÍת»¯ b.°ÑËùÓеÄÊý¶¼µ±³ÉfloatÐÍÀ´´¦ÀíµÈµÈ
µ«ÍùϸµÄ·½ÃæÏ룬floatÐÍĬÈÏ4×Ö½Ú£¬doubleÐÍĬÈÏ8×Ö½Ú£¬ËäÈ»ÔÚvc6ÏÂÄÜÃãÇ¿ÔËÐУ¨ÔËÐÐʱ±¨³öµ÷ÊÔ´°¿Ú£©£¬µ«µ¥²½¸ú×Ù·¢ÏÖÔÚmymul£¨£©Öв¢Ã»Óеõ½ÕýÈ·Ö´ÐУ¬¶øÊÇ£ºAcc

Ê×Ò³ ÉÏÒ»Ò³ 1 2 3 4 5 ÏÂÒ»Ò³ βҳ 2/5/5
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
ÉÏһƪ£ºÊ²Ã´ÊǹþÏ£±í£¿ ÏÂһƪ£º³ÌÐòԱӦƸ×î±ä̬µÄÃæÊÔ¾­Àú

×îÐÂÎÄÕÂ

ÈÈÃÅÎÄÕÂ

Hot ÎÄÕÂ

Python

C ÓïÑÔ

C++»ù´¡

´óÊý¾Ý»ù´¡

linux±à³Ì»ù´¡

C/C++ÃæÊÔÌâÄ¿