0.ǰÑÔ
É豸µÄ¿É¿¿ÐÔÉæ¼°¶à¸ö·½Ã棺Îȶ¨µÄÓ²¼þ¡¢ÓÅÐãµÄÈí¼þ¼Ü¹¹¡¢ÑϸñµÄ²âÊÔÒÔ¼°Êг¡ºÍʱ¼äµÄ¼ìÑéµÈµÈ¡£ÕâÀï×ÅÖØÌ¸Ò»ÏÂ×÷Õß×Ô¼º¶ÔǶÈëʽÈí¼þ¿É¿¿ÐÔÉè¼ÆµÄһЩÀí½â£¬Í¨¹ýÒ»¶¨µÄ¼¼Çɺͷ½·¨Ìá¸ßÈí¼þ¿É¿¿ÐÔ¡£ÕâÀïËù˵µÄǶÈëʽÉ豸,ÊÇָʹÓõ¥Æ¬»ú¡¢ARM7¡¢Cortex-M0£¬M3Ö®ÀàΪºËÐÄµÄ²â¿Ø»ò¹¤¿ØÏµÍ³¡£
ǶÈëʽÈí¼þ¿É¿¿ÐÔÉè¼ÆÓ¦¸Ã´Ó·À´í¡¢ÅдíºÍÈÝ´íÈý·½Ãæ½øÐп¼ÂÇ. ´ËÍâ,»¹ÐèÀí½â×Ô¼ºËùʹÓõıàÒëÆ÷ÌØÐÔ¡£
´ËÎÄÊôÅ×שÒýÓñ.
1.·À´í
Á¼ºÃµÄÈí¼þ¼Ü¹¹¡¢ÇåÎúµÄ´úÂë½á¹¹¡¢ÕÆÎÕÓ²¼þ¡¢ÉîÈëÀí½âCÓïÑÔÊÇ·À´íµÄÒªµã£¬ÕâÀï̸ֻһÏÂCÓïÑÔ¡£
¡°È˵Ä˼άºÍ¾Ñé»ýÀÛ¶ÔÈí¼þ¿É¿¿ÐÔÓкܴóÓ°Ïì"¡£CÓïÑÔ¹îÒìÇÒÓÐÖÖÖÖÏÝÚåºÍȱÏÝ£¬ÐèÒª³ÌÐòÔ±¶àÄêÀúÁ·²ÅÄÜ´ïµ½½ÏΪÍêÉÆµÄµØ²½¡£¡°Èí¼þµÄÖÊÁ¿ÊÇÓɳÌÐòÔ±µÄÖÊÁ¿ÒÔ¼°ËûÃÇÏ໥֮¼äµÄÐ×÷¾ö¶¨µÄ¡±¡£Òò´Ë£¬×÷ÕßÈÏΪ·À´íµÄÖØµãÊÇÒª¿¼ÂÇÈ˵ÄÒòËØ¡£
¡°ÉîÈëÒ»ÃÅÓïÑÔ±à³Ì£¬²»Òª¸¡ÓÚ±íÃæ¡±¡£Èí¼þµÄ¿É¿¿ÐÔ£¬ÓëÄãÀí½âµÄÓïÑÔÉî¶ÈÃÜÇÐÏà¹Ø£¬Ç¶ÈëʽC¸üÊÇÈç´Ë¡£³ýÁËÓïÑÔ£¬×÷ÕßÈÏΪǶÈëʽ¿ª·¢»¹±ØÐëÉîÈëÀí½â±àÒëÆ÷¡£
±¾½Ú½«¶ÔCÓïÑÔµÄÏÝÚåºÍȱÏÝ×ö³õ²½Ì½ÌÖ¡£
1.1 ´¦´¦½ÔÏÝÚå
×î³õ¿ªÊ¼±à³Ìʱ£¬³ýÁËÓ¢Îıêµã±»Îóд³ÉÖÐÎıêµãÍ⣬¿ÉÄܱ»´ó¼ÒÆÕ±éÓöµ½µÄÊǽ«±È½ÏÔËËã·û==Îóд³É¸³ÖµÔËËã·û=£¬´úÂëÈçÏÂËùʾ£º
if(x=5) { ¡ }
ÕâÀï±¾ÒâÊDZȽϱäÁ¿xÊÇ·ñµÈÓÚ³£Á¿5£¬µ«ÊÇÎ󽫡¯==¡¯Ð´³ÉÁË¡¯=¡¯£¬ifÓï¾äºãÎªÕæ¡£Èç¹ûÔÚÂß¼Åжϱí´ïʽÖгöÏÖ¸³ÖµÔËËã·û£¬ÏÖÔڵĴó¶àÊý±àÒëÆ÷»á¸ø³ö¾¯¸æÐÅÏ¢¡£²¢·ÇËùÓгÌÐòÔ±¶¼»á×¢Òâµ½ÕâÀྯ¸æ£¬Òò´ËÓоÑéµÄ³ÌÐòԱʹÓÃÏÂÃæµÄ´úÂëÀ´±ÜÃâ´ËÀà´íÎó£º
if(5==x) { ¡ }
½«³£Á¿·ÅÔÚ±äÁ¿xµÄ×ó±ß£¬¼´Ê¹³ÌÐòÔ±Î󽫡¯==¡¯Ð´³ÉÁË¡¯=¡¯£¬±àÒëÆ÷»á²úÉúÒ»¸öÈÎËÒ²²»ÄÜÎÞÊÓµÄÓï·¨´íÎóÐÅÏ¢£º²»¿É¸ø³£Á¿¸³Öµ£¡
+=Óë=+¡¢-=Óë=-Ò²ÊÇÈÝÒ×д»ìµÄ¡£¸´ºÏ¸³ÖµÔËËã·û£¨+=¡¢*=µÈµÈ£©ËäÈ»¿ÉÒÔʹ±í´ïʽ¸ü¼Ó¼ò½à²¢ÓпÉÄܲúÉú¸ü¸ßЧµÄ»úÆ÷´úÂ룬µ«Ä³Ð©¸´ºÏ¸³ÖµÔËËã·ûÒ²»á¸ø³ÌÐò´øÀ´Òþº¬Bug£¬ÈçÏÂËùʾ´úÂ룺
tmp=+1;
¸Ã´úÂë±¾ÒâÊÇÏë±í´ïtmp=tmp+1£¬µ«Êǽ«¸´ºÏ¸³ÖµÔËËã·û+=Îóд³É=+£º½«ÕýÕûÊý³£Á¿1¸³Öµ¸ø±äÁ¿tmp¡£±àÒëÆ÷»áÐÀÈ»½ÓÊÜÕâÀà´úÂ룬Á¬¾¯¸æ¶¼²»»á²úÉú¡£
Èç¹ûÄãÄÜÔÚµ÷ÊԽ׶ξͷ¢ÏÖÕâ¸öBug£¬ÄãÕæÓ¦¸ÃÇìףһϣ¬·ñÔòÕâºÜ¿ÉÄÜ»á³ÉΪһ¸öÖØ´óÒþº¬Bug£¬ÇÒ²»Ò×±»²ì¾õ¡£
-=Óë=-Ò²ÊÇͬÑùµÀÀí¡£ÓëÖ®ÀàËÆµÄ»¹ÓÐÂß¼Óë&&ºÍλÓë&¡¢Âß¼»ò||ºÍλ»ò|¡¢Âß¼·Ç£¡ºÍλȡ·´~¡£´ËÍâ×ÖĸlºÍÊý×Ö1¡¢×ÖĸOºÍÊý×Ö0Ò²Ò×»ìÏý£¬ÕâÖÖÇé¿ö¿É½èÖú±àÒëÆ÷À´¾ÀÕý¡£
ºÜ¶àµÄÈí¼þBUG×ÔÓÚÊäÈë´íÎó¡£ÔÚGoogleÉÏËÑË÷µÄʱºò£¬ÓÐЩ½á¹ûÁбíÏîÖдøÓÐÒ»Ìõ¾¯¸æ£¬±íÃ÷GoogleÈÏΪËü´øÓжñÒâ´úÂë¡£Èç¹ûÄãÔÚ2009Äê1ÔÂ31ÈÕÒ»´óÔçʹÓÃGoogleËÑË÷µÄ»°£¬Äã¾Í»á¿´µ½£¬ÔÚÄÇÌìÔ糿55·ÖÖÓµÄʱ¼äÄÚ£¬GoogleµÄËÑË÷½á¹û±êÃ÷ÿ¸öÕ¾µã¶ÔÄãµÄPC¶¼ÊÇÓк¦µÄ¡£ÕâÉæ¼°µ½Õû¸öInternetÉϵÄËùÓÐÕ¾µã£¬°üÀ¨Google×Ô¼ºµÄËùÓÐÕ¾µãºÍ·þÎñ¡£GoogleµÄ¶ñÒâÈí¼þ¼ì²â¹¦ÄÜͨ¹ýÔÚÒ»¸öÒÑÖª¹¥»÷ÕßµÄÁбíÉϲéÕÒÕ¾µã£¬´Ó¶øÊ¶±ð³öΣÏÕÕ¾µã¡£ÔÚ1ÔÂ31ÈÕÔ糿£¬¶ÔÕâ¸öÁбíµÄ¸üÐÂÒâÍâµØ°üº¬ÁËÒ»Ìõб¸Ü(¡°/¡±)¡£ËùÓеÄURL¶¼°üº¬Ò»Ìõб¸Ü£¬²¢ÇÒ£¬·´¶ñÒâÈí¼þ¹¦ÄܰÑÕâÌõб¸ÜÀí½âΪËùÓеÄURL¶¼ÊÇ¿ÉÒɵģ¬Òò´Ë£¬ËüÓä¿ìµØ¶ÔËÑË÷½á¹ûÖеÄÿ¸öÕ¾µã¶¼Ìí¼ÓÒ»Ìõ¾¯¸æ¡£ºÜÉÙ¼ûµ½Èç´Ë¼òµ¥µÄÒ»¸öÊäÈë´íÎó´øÀ´µÄ½á¹ûÈç´ËÆæ¹ÖÇÒÓ°ÏìÈç´Ë¹ã·º£¬µ«³ÌÐò¾ÍÊÇÕâÑù£¬Èݲ»µÃһ˿Êèºö¡£
Êý×é³£³£Ò²ÊÇÒýÆð³ÌÐò²»Îȶ¨µÄÖØÒªÒòËØ£¬CÓïÑÔÊý×éµÄÃÔ»óÐÔÓëÊý×éϱê´Ó0¿ªÊ¼Ãܲ»¿É·Ö£¬Äã¿ÉÒÔ¶¨Òåint
a[30]£¬µ«ÊÇÄã¾ø²»¿ÉÒÔʹÓÃÊý×éÔªËØa[30]£¬³ý·ÇÄã×Ô¼ºÃ÷È·ÖªµÀÔÚ×öʲô¡£
switch¡caseÓï¾ä¿ÉÒԺܷ½±ãµÄʵÏÖ¶à·ÖÖ§½á¹¹£¬µ«Òª×¢ÒâÔÚºÏÊʵÄλÖÃÌí¼Óbreak¹Ø¼ü×Ö¡£³ÌÐòÔ±ÍùÍùÈÝÒש¼Óbreak´Ó¶øÒýÆð˳ÐòÖ´Ðжà¸öcaseÓï¾ä£¬ÕâÒ²ÐíÊÇCµÄÒ»¸öȱÏÝÖ®´¦¡£¶ÔÓÚswitch¡caseÓï¾ä£¬´Ó¸ÅÂÊÂÛÉÏ˵£¬¾ø´ó¶àÊý³ÌÐòÒ»´ÎÖ»ÐèÖ´ÐÐÒ»¸öÆ¥ÅäµÄcaseÓï¾ä£¬¶øÃ¿Ò»¸öÕâÑùµÄcaseÓï¾äºó¶¼±ØÐë¸úÒ»¸öbreak¡£È¥¸´ÔÓ»¯´ó¸ÅÂÊʼþ£¬Õâ¶àÉÙÓÐЩ²»ºÏ³£Çé¡£
break¹Ø¼ü×ÖÓÃÓÚÌø³ö×î½üµÄÄDzãÑ»·Óï¾ä»òÕßswitchÓï¾ä£¬µ«³ÌÐòÔ±ÍùÍù²»¹»ÖØÊÓÕâÒ»µã¡£
1990Äê1ÔÂ15ÈÕ£¬AT&Tµç»°ÍøÂçλÓÚŦԼµÄһ̨½»»»»úµ±»ú²¢ÇÒÖØÆô£¬ÒýÆðËüÁÚ½ü½»»»»ú̱»¾£¬Óɴ˼°±Ë£¬Ò»¸öÁ¬×ÅÒ»¸ö£¬ºÜ¿ì£¬114̨½»»»»úÿÁùÃëµ±»úÖØÆôÒ»´Î£¬ÁùÍòÈ˾ÅСʱÄÚ²»ÄÜ´ò³¤Í¾µç»°¡£µ±Ê±µÄ½â¾ö·½Ê½£º¹¤³ÌÊ¦ÖØ×°ÁËÒÔǰµÄÈí¼þ°æ±¾¡£ÊºóµÄʹʵ÷²é·¢ÏÖ£¬ÕâÊÇbreak¹Ø¼ü×ÖÎóÓÃÔì³ÉµÄ¡£¡¶Cר¼Ò±à³Ì¡·ÌṩÁËÒ»¸ö¼ò»¯°æµÄÎÊÌâÔ´Â룺
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ network code() { switch(line) { case THING1: doit1(); break; case THING2: if(x==STUFF) { do_first_stuff(); if(y==OTHER_STUFF) break; do_later_stuff(); } /*´úÂëµÄÒâͼÊÇÌø×ªµ½ÕâÀï¡ ¡*/ initialize_modes_pointer(); break; default: processing(); }/*¡ ¡µ«ÊÂʵÉÏÌøµ½ÁËÕâÀï¡£*/ use_modes_pointer();/*ÖÂʹmodes_pointerδ³õʼ»¯*/ } |
ÄǸö³ÌÐòԱϣÍû´ÓifÓï¾äÌø³ö£¬µ«ËûÈ´Íü¼ÇÁËbreak¹Ø¼ü×Öʵ¼ÊÉÏÌø³ö×î½üµÄÄDzãÑ»·Óï¾ä»òÕßswitchÓï¾ä¡£ÏÖÔÚËüÌø³öÁËswitchÓï¾ä£¬Ö´ÐÐÁËuse_modes_pointer()º¯Êý¡£µ«±ØÒªµÄ³õʼ»¯¹¤×÷²¢Î´Íê³É£¬Îª½«À´³ÌÐòµÄʧ°ÜÂñÏÂÁË·ü±Ê¡£
½«Ò»¸öÕûÐγ£Á¿¸³Öµ¸ø±äÁ¿£¬´úÂëÈçÏÂËùʾ£º
int a=34, b=034;
±äÁ¿aºÍbÏàµÈÂ𣿴ð°¸ÊDz»ÏàµÈµÄ¡£ÎÒÃÇÖªµÀ£¬16½øÖƳ£Á¿ÒÔ¡¯0x¡¯ÎªÇ°×º£¬10½øÖƳ£Á¿²»ÐèҪǰ׺£¬ÄÇô8½øÖÆÄØ£¿ËüÓë10½øÖƺÍ16½øÖƱíʾ·½·¨¶¼²»Ïàͨ£¬ËüÒÔÊý×Ö¡¯0¡¯ÎªÇ°×º£¬Õâ¶àÉÙÓÐµãÆæÝ⣺ÈýÖÖ½øÖƵıíʾ·½·¨ÍêÈ«²»Ïàͨ¡£Èç¹û8½øÖÆÒ²Ïñ16½øÖÆÄÇÑùÒÔÊý×ÖºÍ×Öĸ±íʾǰ׺µÄ»°£¬»òÐí¸üÓÐÀûÓÚ¼õÉÙÈí¼þBug£¬±Ï¾¹ÄãʹÓÃ8½øÖƵĴÎÊý¿ÉÄܶ¼²»»áÓÐÎóʹÓõĴÎÊý¶à£¡ÏÂÃæÕ¹Ê¾Ò»¸öÎóÓÃ8½øÖƵÄÀý×Ó£¬×îºóÒ»¸öÊý×éÔªËØ¸³Öµ´íÎó£º
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ a[0]=106; /*Ê®½øÖÆÊý106*/ a[1]=112; /*Ê®½øÖÆÊý112*/ a[2]=052; /*ʵ¼ÊΪʮ½øÖÆÊý42£¬±¾ÒâΪʮ½øÖÆ52*/ |
Ö¸ÕëµÄ¼Ó¼õÔËËãÊÇÌØÊâµÄ¡£ÏÂÃæµÄ´úÂëÔËÐÐÔÚ32λARM¼Ü¹¹ÉÏ£¬Ö´ÐÐÖ®ºó£¬aºÍpµÄÖµ·Ö±ðÊǶàÉÙ£¿
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ int a=1; int *p=(int*)0x00001000; a=a+1; p=p+1; |
¶ÔÓÚaµÄÖµºÜÈÝÅжϳö½á¹ûΪ2£¬µ«ÊÇpµÄ½á¹ûÈ´ÊÇ0x00001004¡£Ö¸Õëp¼Ó1ºó£¬pµÄÖµÔö¼ÓÁË4£¬ÕâÊÇÎªÊ²Ã´ÄØ£¿ÔÒòÊÇÖ¸Õë×ö¼Ó¼õÔËËãʱÊÇÒÔÖ¸ÕëµÄÊý¾ÝÀàÐÍΪµ¥Î»¡£p+1ʵ¼ÊÉÏÊÇp+1*sizeof(int)¡£²»Àí½âÕâÒ»µã£¬ÔÚʹÓÃÖ¸ÕëÖ±½Ó²Ù×÷Êý¾Ýʱ¼«Ò×·¸´í¡£±ÈÈçÏÂÃæ¶ÔÁ¬ÐøRAM³õʼ»¯Áã²Ù×÷´úÂë:
view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ unsigned int *pRAMaddr; //¶¨Ò嵨ַ֏Õë±äÁ¿ for(pRAMaddr=StartAddr;pRAMaddr<EndAddr;pRAMaddr+=4) { *pRAMaddr=0x00000000; //Ö¸¶¨RAMµØÖ·ÇåÁã } |
ÓÉÓÚpRAMaddrÊÇÒ»¸öÖ¸Õë±äÁ¿,ËùÒÔpRAMaddr+=4´úÂëÆäʵʹpRAMaddrÆ«ÒÆÁË4*sizeof(int)=16¸ö×Ö½Ú£¬ËùÒÔÿִÐÐÒ»´ÎforÑ»·£¬»áʹ±äÁ¿pRAMaddrÆ«ÒÆ16¸ö×ֽڿռ䣬µ«Ö»ÓÐ4×ֽڿռ䱻³õʼ»¯ÎªÁã¡£ÆäËüµÄ12×Ö½ÚÊý¾ÝµÄÄÚÈÝ£¬ÔÚ´ó¶àÊý¼Ü¹¹´¦ÀíÆ÷Öж¼»áÊÇËæ»úÊý¡£
¶ÔÓÚsizeof()£¬ÕâÀïÇ¿µ÷Á½µã£¬µÚÒ»ËüÊÇÒ»¸ö¹Ø¼ü×Ö£¬¶ø²»ÊǺ¯Êý£¬²¢ÇÒËüĬÈÏ·µ»ØÎÞ·ûºÅÕûÐÎÊý¾Ý£¨Òª¼ÇסÊÇÎÞ·ûºÅ£©£»µÚ¶þ£¬Ê¹ÓÃsizeof»ñÈ¡Êý×鳤¶Èʱ£¬²»Òª¶ÔÖ¸ÕëÓ¦ÓÃsizeof²Ù×÷·û£¬±ÈÈçÏÂÃæµÄÀý×Ó£º
[cpp] view plain copy print? ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ void ClearRAM(char array[]) { int i ; for(i=0;i<sizeof(array)/sizeof(array[0]);i++) //ÕâÀïÓ÷¨´íÎó£¬arrayʵ¼ÊÉÏÊÇÖ¸Õë { array[i]=0x00; } } int main(void) { char Fle[20]; ClearRAM(Fle); //Ö»ÄÜÇå³ýÊý×éFleÖеÄǰËĸöÔªËØ } |
ÎÒÃÇÖªµÀ£¬¶ÔÓÚÒ»¸öÊý×éarray[20]£¬ÎÒÃÇʹÓôúÂësizeof(array)/sizeof(array[0])¿ÉÒÔ»ñµÃÊý×éµÄÔªËØ£¨ÕâÀïΪ20£©£¬µ«Êý×éÃûºÍÖ¸ÕëÍùÍùÊÇÈÝÒ×»ìÏýµÄ£¬¶øÇÒÓÐÇÒÖ»ÓÐÒ»ÖÖÇé¿öÏÂÊÇ¿ÉÒÔµ±×öÖ¸ÕëµÄ£¬ÄǾÍÊÇÊý×éÃû×÷Ϊº¯ÊýÐβÎʱ£¬Êý×éÃû±»ÈÏΪÊÇÖ¸Õ롣ͬʱ£¬Ëü²»ÄÜÔÙ¼æÈÎÊý×éÃû¡£×¢ÒâÖ»ÓÐÕâÖÖÇé¿öÏ£¬Êý×éÃû²Å¿ÉÒÔµ±×öÖ¸Õ룬µ«²»ÐÒµÄÊÇÕâÖÖÇé¿öÏÂÈÝÒ×Òý·¢·çÏÕ¡£ÔÚClearRAMº¯ÊýÄÚ£¬×÷ΪÐβεÄarray[]²»ÔÙÊÇÊý×éÃûÁË£¬¶ø³ÉÁËÖ¸Õë¡£sizeof(array)Ï൱ÓÚÇóÖ¸Õë±äÁ¿Õ¼ÓõÄ×Ö½ÚÊý£¬ÔÚ32λϵͳÏ£¬¸ÃֵΪ4£¬sizeof(array)/sizeof(array[0])µÄÔËËã½á¹ûҲΪ4¡£ËùÒÔÔÚmainº¯ÊýÖе÷ÓÃClearRAM(Fle)£¬Ò²Ö»ÄÜÇå³ýÊý×éFleÖеÄǰËĸöÔªËØÁË¡£
ÔöÁ¿ÔËËã·û++ºÍ¼õÁ¿ÔËËã·û--¼È¿ÉÒÔ×öǰ׺Ҳ¿ÉÒÔ×öºó׺¡£Ç°×ººÍºó׺µÄÇø±ðÔÚÓÚÖµµÄÔö¼Ó»ò¼õÉÙÕâÒ»¶¯×÷·¢ÉúµÄʱ¼äÊDz»Í¬µÄ¡£×÷Ϊǰ׺ÊÇÏÈ×Ô¼Ó»ò×Ô¼õÈ»ºó×ö±ðµÄÔËË㣬×÷Ϊºó׺ʱ£¬ÊÇÏÈ×öÔËË㣬֮ºóÔÙ×Ô¼Ó»ò×Ô¼õ¡£Ðí¶à³ÌÐòÔ±¶Ô´ËÈÏʶ²»¹»£¬¾ÍÈÝÒ×ÂñÏÂÒþ»¼¡£ÏÂÃæµÄÀý×Ó¿ÉÒԺܺõĽâÊÍǰ׺ºÍºó׺µÄÇø±ð¡£
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ int a=8,b=2,y; y=a+++--b; |
´úÂëÖ´Ðкó£¬yµÄÖµÊǶàÉÙ£¿
Õâ¸öÀý×Ó²¢·ÇÊÇÍÚ¿ÕÐÄ˼Éè¼Æ³öÀ´×¨ÃÅÈÃÄã½Ê¾¡ÄÔÖµÄCÄÑÌ⣨Èç¹ûÄã¾õµÃ×Ô¼º¶ÔCϸ½ÚÕÆÎÕºÜÓÐÐÅÐÄ£¬×öһЩCÄÑÌâ¼ìÑéÒ»ÏÂÊǸö²»´íµÄÑ¡Ôñ¡£ÄÇô£¬¡¶The
C Puzzle Book¡·Õâ±¾ÊéÒ»¶¨²»Òª´í¹ý¡££©£¬ÄãÉõÖÁ¿ÉÒÔ½«Õâ¸öÄѶ®µÄÓï¾ä×÷Ϊ²»ÓѺôúÂëµÄ·´ÃæÀý×Ó¡£µ«ÊÇËüÒ²¿ÉÒÔÈÃÄã¸üºÃµÄÀí½âCÓïÑÔ¡£¸ù¾ÝÔËËã·ûÓÅÏȼ¶ÒÔ¼°±àÒëÆ÷ʶ±ð×Ö·ûµÄ̰ÐÄ·¨ÔÔò£¬´úÂëy=a+++--b;¿ÉÒÔд³É¸üÃ÷È·µÄÐÎʽ£º
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ y=(a++)+(--b); |
µ±¸³Öµ¸ø±äÁ¿yʱ£¬aµÄֵΪ8£¬bµÄֵΪ1,ËùÒÔ±äÁ¿yµÄֵΪ9£»¸³ÖµÍê³Éºó£¬±äÁ¿a×Ô¼Ó£¬aµÄÖµ±äΪ9£¬Ç§Íò²»ÒªÒÔΪyµÄֵΪ10¡£ÕâÌõ¸³ÖµÓï¾äÏ൱ÓÚÏÂÃæµÄÁ½ÌõÓï¾ä£º
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ y=a+(--b); a=a+1; |
1.2 Íæ¾ß°ãµÄ±àÒëÆ÷ÓïÒå¼ì²é
ΪÁ˸ü¼òµ¥µÄÉè¼Æ±àÒëÆ÷£¬Ä¿Ç°¼¸ºõËùÓбàÒëÆ÷µÄÓïÒå¼ì²é¶¼±È½ÏÈõС£¬¼Ó֮ΪÁË»ñµÃ¸ü¿ìµÄÖ´ÐÐЧÂÊ£¬CÓïÑÔ±»Éè¼ÆµÄ×ã¹»Áé»îÇÒ¼¸ºõ²»½øÐÐÈκÎÔËÐÐʱ¼ì²é£¬±ÈÈçÊý×éÔ½½ç¡¢Ö¸ÕëÊÇ·ñºÏ·¨¡¢ÔËËã½á¹ûÊÇ·ñÒç³öµÈµÈ¡£
CÓïÑÔ×ã¹»Áé»î£¬¶ÔÓÚÒ»¸öÊý×éa[30]£¬ËüÔÊÐíʹÓÃÏña[-1]ÕâÑùµÄÐÎʽÀ´¿ìËÙ»ñÈ¡Êý×éÊ×ÔªËØËùÔÚµØÖ·Ç°ÃæµÄÊý¾Ý£»ÔÊÐí½«Ò»¸ö³£ÊýÇ¿ÖÆ×ª»»Îªº¯ÊýÖ¸Õ룬ʹÓôúÂë(*((void(*)())0))()À´µ÷ÓÃλÓÚ0µØÖ·µÄº¯Êý¡£CÓïÑÔ¸øÁ˳ÌÐòÔ±×ã¹»µÄ×ÔÓÉ£¬µ«Ò²ÓɳÌÐòÔ±³Ðµ£ÀÄÓÃ×ÔÓÉ´øÀ´µÄÔðÈΡ£ÏÂÃæµÄÁ½¸öÀý×Ó¶¼ÊÇËÀÑ»·£¬Èç¹ûÔÚ²»³£Ó÷ÖÖ§ÖгöÏÖÀàËÆ´úÂ룬½«»áÔì³É¿´ËÆÄªÃûÆäÃîµÄËÀ»ú»òÕßÖØÆô¡£
a. unsigned char i£» b. unsigned chari;
for(i=0;i<256;i++) {¡ } for(i=10;i>=0;i--)
{ ¡ }
¶ÔÓÚÎÞ·ûºÅcharÀàÐÍ£¬±íʾµÄ·¶Î§Îª0~255£¬ËùÒÔÎÞ·ûºÅcharÀàÐͱäÁ¿iÓÀԶСÓÚ256£¨µÚÒ»¸öforÑ»·ÎÞÏÞÖ´ÐУ©£¬ÓÀÔ¶´óÓÚµÈÓÚ0£¨µÚ¶þ¸öforÑ»·ÎÞÏßÖ´ÐУ©¡£ÐèҪ˵Ã÷µÄÊÇ£¬¸³Öµ´úÂëi=256ÊDZ»CÓïÑÔÔÊÐíµÄ£¬¼´Ê¹Õâ¸ö³õÖµÒѾ³¬³öÁ˱äÁ¿i¿ÉÒÔ±íʾµÄ·¶Î§¡£CÓïÑÔ»áǧ·½°Ù¼ÆµÄΪ³ÌÐòÔ±´´Ôì³ö´íµÄ»ú»á£¬¿É¼ûÒ»°ß¡£
¼ÙÈçÄãÔÚifÓï¾äºóÎó¼ÓÁËÒ»¸ö·ÖºÅ¸Ä±äÁ˳ÌÐòÂß¼£¬±àÒëÆ÷Ò²»áºÜÅäºÏµÄ°ïæÑڸǣ¬ÉõÖÁÁ¬¾¯¸æ¶¼²»Ìáʾ¡£´úÂëÈçÏ£º
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ if(a>b); //ÕâÀïÎó¼ÓÁËÒ»¸ö·ÖºÅ a=b; //Õâ¾ä´úÂëÒ»Ö±±»Ö´ÐÐ |
²»µ«Èç´Ë£¬±àÒëÆ÷»¹»áºöÂÔµô¶àÓàµÄ¿Õ¸ñ·ûºÍ»»Ðзû£¬¾ÍÏñÏÂÃæµÄ´úÂëÒ²²»»á¸ø³ö×ã¹»Ìáʾ£º
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ if(n<3) return //ÕâÀïÉÙ¼ÓÁËÒ»¸ö·ÖºÅ logrec.data=x[0]; logrec.time=x[1]; logrec.code=x[2]; |
Õâ¶Î´úÂëµÄ±¾ÒâÊÇn<3ʱ³ÌÐòÖ±½Ó·µ»Ø£¬ÓÉÓÚ³ÌÐòÔ±µÄʧÎó£¬returnÉÙÁËÒ»¸ö½áÊø·ÖºÅ¡£±àÒëÆ÷½«Ëü·Òë³É·µ»Ø±í´ïʽlogrec.data=x[0]µÄ½á¹û£¬returnºóÃæ¼´Ê¹ÊÇÒ»¸ö±í´ïʽҲÊÇCÓïÑÔÔÊÐíµÄ¡£ÕâÑùµ±n>=3ʱ£¬±í´ïʽlogrec.data=x[0];¾Í²»»á±»Ö´ÐУ¬¸ø³ÌÐòÂñÏÂÁËÒþ»¼¡£
¿ÉÒÔºÁ²»¿ÍÆøµÄ˵£¬ÈõСµÄ±àÒëÆ÷ÓïÒå¼ì²éÔںܴó³Ì¶ÈÉÏ×ÝÈÝÁ˲»¿É¿¿´úÂë¿ÉÒÔËÁÎ޼ɵ¬µÄ´æÔÚ¡£
ÉÏÎÄÔøÌáµ½Êý×é³£³£ÊÇÒýÆð³ÌÐò²»Îȶ¨µÄÖØÒªÒòËØ£¬³ÌÐòÔ±ÍùÍù²»¾Òâ¼ä¾Í»áдÊý×éÔ½½ç¡£Ò»Î»Í¬ÊµĴúÂëÔÚÓ²¼þÉÏÔËÐУ¬Ò»¶Îʱ¼äºó¾Í»á·¢ÏÖLCDÏÔʾÆÁÉϵÄÒ»¸öÊý×Ö²»Õý³£µÄ±»¸Ä±ä¡£¾¹ýÒ»¶Îʱ¼äµÄµ÷ÊÔ£¬ÎÊÌâ±»¶¨Î»µ½ÏÂÃæµÄÒ»¶Î´úÂëÖУº
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ int SensorData[30]; ¡for(i=30;i>0;i--) { SensorData[i]=¡; ¡ } |
ÕâÀïÉùÃ÷ÁËÓµÓÐ30¸öÔªËØµÄÊý×飬²»ÐÒµÄÊÇforÑ»·´úÂëÖÐÎóÓÃÁ˱¾²»´æÔÚµÄÊý×éÔªËØSensorData[30]£¬µ«CÓïÑÔȴĬÐíÕâôʹÓ㬲¢ÐÀÈ»µÄ°´ÕÕ´úÂë¸Ä±äÁËÊý×éÔªËØSensorData[30]ËùÔÚλÖõÄÖµ£¬
SensorData[30]ËùÔÚµÄλÖÃÔ±¾ÊÇÒ»¸öLCDÏÔʾ±äÁ¿£¬ÕâÕýÊÇÏÔʾÆÁÉϵÄÄǸöÖµ²»Õý³£±»¸Ä±äµÄÔÒò¡£ÕæÇìÐÒÕâôÇá¶øÒ׾ٵķ¢ÏÖÁËÕâ¸öBug¡£
ÆäʵºÜ¶à±àÒëÆ÷»á¶ÔÉÏÊö´úÂë²úÉúÒ»¸ö¾¯¸æ£º¸³Öµ³¬³öÊý×é½çÏÞ¡£µ«²¢·ÇËùÓгÌÐòÔ±¶¼¶Ô±àÒëÆ÷¾¯¸æ±£³Ö×ã¹»Ãô¸Ð£¬¿öÇÒ£¬±àÒëÆ÷Ò²²¢²»Äܼì²é³öÊý×éÔ½½çµÄËùÓÐÇé¿ö¡£¾ÙÒ»¸öÀý×Ó£¬ÄãÔÚÄ£¿éAÖж¨ÒåÊý×飺
int SensorData[30];
ÔÚÄ£¿éBÖÐÒýÓøÃÊý×飬µ«ÓÉÓÚÄãÒýÓôúÂë²¢²»¹æ·¶£¬ÕâÀïûÓÐÏÔʾÉùÃ÷Êý×é´óС£¬µ«±àÒëÆ÷Ò²ÔÊÐíÕâô×ö£º
extern int SensorData[];
Èç¹ûÔÚÄ£¿éBÖдæÔÚºÍÉÏÃæÒ»ÑùµÄ´úÂ룺
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ for(i=30;i>0;i--) { SensorData[i]=¡; ¡ } |
Õâ´Î£¬±àÒëÆ÷²»»á¸ø³ö¾¯¸æÐÅÏ¢£¬ÒòΪ±àÒëÆ÷ѹ¸ù¾Í²»ÖªµÀÊý×éµÄÔªËØ¸öÊý¡£ËùÒÔ£¬µ±Ò»¸öÊý×éÉùÃ÷Ϊ¾ßÓÐÍⲿÁ´½Ó£¬ËüµÄ´óСӦ¸ÃÏÔʽÉùÃ÷¡£
ÔÙ¾ÙÒ»¸ö±àÒëÆ÷¼ì²é²»³öÊý×éÔ½½çµÄÀý×Ó¡£º¯Êýfunc()µÄÐβÎÊÇÒ»¸öÊý×éÐÎʽ£¬º¯Êý´úÂë¼ò»¯ÈçÏÂËùʾ£º
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ char * func(char SensorData[30]) { unsignedint i£» for(i=30;i>0;i--) { SensorData[i]=¡; ¡ } } |
Õâ¸ö¸øSensorData[30]¸³³õÖµµÄÓï¾ä£¬±àÒëÆ÷Ò²ÊDz»¸øÈκξ¯¸æµÄ¡£Êµ¼ÊÉÏ£¬±àÒëÆ÷Êǽ«Êý×éÃûSensorÒþº¬µÄת»¯ÎªÖ¸ÏòÊý×éµÚÒ»¸öÔªËØµÄÖ¸Õ룬º¯ÊýÌåÊÇʹÓÃÖ¸ÕëµÄÐÎʽÀ´·ÃÎÊÊý×éµÄ£¬Ëüµ±È»Ò²²»»áÖªµÀÊý×éÔªËØµÄ¸öÊýÁË¡£Ôì³ÉÕâÖÖ¾ÖÃæµÄÔÒòÖ®Ò»ÊÇC±àÒëÆ÷µÄ×÷ÕßÃÇÈÏΪָÕë´úÌæÊý×é¿ÉÒÔÌá¸ß³ÌÐòЧÂÊ£¬¶øÇÒ£¬»¹¿ÉÒÔ¼ò»¯±àÒëÆ÷µÄ¸´ÔÓ¶È¡£
Ö¸ÕëºÍÊý×éÊÇÈÝÒ׸ø³ÌÐòÔì³É»ìÂҵģ¬ÎÒÃÇÓбØÒª×ÐϸµÄÇø·ÖËüÃǵIJ»Í¬¡£Æäʵ»»Ò»¸ö½Ç¶ÈÏëÏ룬ËüÃÇÒ²ÊÇÈÝÒ×Çø·ÖµÄ£º¿ÉÒÔ½«Êý×éÃûµÈͬÓÚÖ¸ÕëµÄÇé¿öÓÐÇÒÖ»ÓÐÒ»´¦£¬¾ÍÊÇÉÏÃæÀý×ÓÌáµ½µÄÊý×é×÷Ϊº¯ÊýÐβÎʱ¡£ÆäËüʱºò£¬Êý×éÃûÊÇÊý×éÃû£¬Ö¸ÕëÊÇÖ¸Õë¡£
ÏÂÃæµÄÀý×Ó±àÒëÆ÷ͬÑù¼ì²é²»³öÊý×éÔ½½ç¡£
ÎÒÃdz£³£ÓÃÊý×éÀ´»º´æÍ¨Ñ¶ÖеÄÒ»Ö¡Êý¾Ý¡£ÔÚͨѶÖжÏÖн«½ÓÊÕµÄÊý¾Ý±£´æµ½Êý×éÖУ¬Ö±µ½Ò»Ö¡Êý¾ÝÍêÈ«½ÓÊÕºóÔÙ½øÐд¦Àí¡£¼´Ê¹¶¨ÒåµÄÊý×鳤¶È×ã¹»³¤£¬½ÓÊÕÊý¾ÝµÄ¹ý³ÌÖÐÒ²¿ÉÄÜ·¢ÉúÊý×éÔ½½ç£¬ÌرðÊǸÉÈÅÑÏÖØÊ±¡£ÕâÊÇÓÉÓÚÍâ½çµÄ¸ÉÈÅÆÆ»µÁËÊý¾ÝÖ¡µÄijЩ룬¶ÔÒ»Ö¡µÄÊý¾Ý³¤¶ÈÅжϴíÎ󣬽ÓÊÕµÄÊý¾Ý³¬³öÊý×鷶Χ£¬¶àÓàµÄÊý¾Ý¸ÄдÓëÊý×éÏàÁڵıäÁ¿£¬Ôì³Éϵͳ±ÀÀ£¡£ÓÉÓÚÖжÏʼþµÄÒì²½ÐÔ£¬ÕâÀàÊý×éÔ½½ç±àÒëÆ÷ÎÞ·¨¼ì²éµ½¡£
Èç¹û¾Ö²¿Êý×éÔ½½ç£¬¿ÉÄÜÒý·¢ARM¼Ü¹¹Ó²¼þÒì³£¡£Í¬ÊµÄÒ»¸öÉ豸ÓÃÓÚ½ÓÊÕÎÞÏß´«¸ÐÆ÷µÄÊý¾Ý£¬Ò»´ÎÈí¼þÉý¼¶ºó£¬·¢ÏÖ½ÓÊÕÉ豸¹¤×÷Ò»¶Îʱ¼äºó»áËÀ»ú¡£µ÷ÊÔ±íÃ÷ARM7´¦ÀíÆ÷·¢ÉúÁËÓ²¼þÒì³££¬Òì³£´¦Àí´úÂëÊÇÒ»¶ÎËÀÑ»·£¨ËÀ»úµÄÖ±½ÓÔÒò£©¡£½ÓÊÕÉ豸ÓÐÒ»¸öÓ²¼þÄ£¿éÓÃÓÚ½ÓÊÕÎÞÏß´«¸ÐÆ÷µÄÕû°üÊý¾Ý²¢´æÔÚ×Ô¼ºµÄÓ²¼þ»º³åÇøÖУ¬µ±Ò»Ö¡Êý¾Ý½ÓÊÕÍê³Éºó£¬Ê¹ÓÃÍⲿÖжÏ֪ͨÉ豸ȡÊý¾Ý£¬ÍⲿÖжϷþÎñ³ÌÐò¾«¼òºóÈçÏÂËùʾ£º
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ __irq ExintHandler(void) { unsignedchar DataBuf[50]; GetData(DataBug); //´ÓÓ²¼þ»º³åÇøÈ¡Ò»Ö¡Êý¾Ý ¡ } |
ÓÉÓÚ´æÔÚ¶à¸öÎÞÏß´«¸ÐÆ÷½üºõͬʱ·¢ËÍÊý¾ÝµÄ¿ÉÄܼÓÖ®GetData()º¯Êý±£»¤Á¦¶È²»¹»£¬Êý×éDataBufÔÚÈ¡Êý¾Ý¹ý³ÌÖз¢ÉúÔ½½ç¡£ÓÉÓÚÊý×éDataBufΪ¾Ö²¿±äÁ¿£¬±»·ÖÅäÔÚ¶ÑÕ»ÖУ¬Í¬Ôڴ˶ÑÕ»ÖеϹÓÐÖжϷ¢ÉúʱµÄÔËÐл·¾³ÒÔ¼°ÖжϷµ»ØµØÖ·¡£Òç³öµÄÊý¾Ý½«ÕâЩÊý¾ÝÆÆ»µµô£¬ÖжϷµ»ØÊ±PCÖ¸Õë¿ÉÄܱä³ÉÒ»¸ö²»ºÏ·¨Öµ£¬Ó²¼þÒì³£Óɴ˲úÉú¡£
Èç¹ûÎÒÃǾ«ÐÄÉè¼ÆÒç³ö²¿·ÖµÄÊý¾Ý£¬»¯Êý¾ÝΪָÁ¾Í¿ÉÒÔÀûÓÃÊý×éÔ½½çÀ´ÐÞ¸ÄPCÖ¸ÕëµÄÖµ£¬Ê¹Ö®Ö¸ÏòÎÒÃÇÏ£ÍûÖ´ÐеĴúÂë¡£1988Ä꣬µÚÒ»¸öÍøÂçÈ䳿ÔÚÒ»ÌìÖ®ÄÚ¸ÐȾÁË2000µ½6000̨¼ÆËã»ú£¬Õâ¸öÈ䳿³ÌÐòÀûÓõÄÕýÊÇÒ»¸ö±ê×¼ÊäÈë¿âº¯ÊýµÄÊý×éÔ½½çBug¡£ÆðÒòÊÇÒ»¸ö±ê×¼ÊäÈëÊä³ö¿âº¯Êýgets()£¬ÔÀ´Éè¼ÆÎª´ÓÊý¾ÝÁ÷Öлñȡһ¶ÎÎı¾£¬Òź¶µÄÊÇ£¬gets()º¯ÊýûÓй涨ÊäÈëÎı¾µÄ³¤¶È¡£gets()º¯ÊýÄÚ²¿¶¨ÒåÁËÒ»¸ö500×Ö½ÚµÄÊý×飬¹¥»÷Õß·¢ËÍÁË´óÓÚ500×Ö½ÚµÄÊý¾Ý£¬ÀûÓÃÒç³öµÄÊý¾ÝÐÞ¸ÄÁ˶ÑÕ»ÖеÄPCÖ¸Õ룬´Ó¶ø»ñÈ¡ÁËϵͳȨÏÞ¡£
Ò»¸ö³ÌÐòÄ£¿éͨ³£ÓÉÁ½¸öÎļþ×é³É£¬Ô´ÎļþºÍÍ·Îļþ¡£Èç¹ûÄãÔÚÔ´Îļþ¶¨Òå±äÁ¿£º
unsigned int a;
²¢ÔÚÍ·ÎļþÖÐÉùÃ÷¸Ã±äÁ¿£ºextern unsigned long
a;
±àÒëÆ÷»áÌáʾһ¸öÓï·¨´íÎ󣺱äÁ¿¡¯a¡¯ÉùÃ÷ÀàÐͲ»Ò»Ö¡£µ«Èç¹ûÄãÔÚÔ´Îļþ¶¨Òå±äÁ¿£º
volatile unsigned int a£¬
ÔÚÍ·ÎļþÖÐÉùÃ÷±äÁ¿£ºextern unsigned int a;
/*ȱÉÙvolatileÏÞ¶¨·û*/
±àÒëÆ÷È´²»»á¸ø³ö´íÎóÐÅÏ¢£¨ÓÐЩ±àÒëÆ÷½ö¸ø³öÒ»Ìõ¾¯¸æ£©¡£ÕâÀïvolatileÊôÓÚÀàÐÍÏÞ¶¨·û£¬ÁíÒ»¸ö³£¼ûµÄÀàÐÍÏÞ¶¨·ûÊÇconst¹Ø¼ü×Ö¡£ÏÞ¶¨·ûvolatileÔÚǶÈëʽÈí¼þÖÐÖÁ¹ØÖØÒª£¬ÓÃÀ´¸æËß±àÒëÆ÷²»ÒªÓÅ»¯ËüÐÞÊεıäÁ¿¡£ÕâÀï¾ÙÒ»¸ö¿ÌÒâ¹¹Ôì³öµÄÀý×Ó£¬ÒòΪÏÖʵÖеÄvolatileʹÓÃBug´ó¶¼Òþº¬ÇÒÄÑÒÔÀí½â¡£
ÔÚÄ£¿éAµÄÔ´ÎļþÖУ¬¶¨Òå±äÁ¿£º
volatile unsigned int TimerCount=0;
¸Ã±äÁ¿ÓÃÀ´ÔÚÒ»¸ö¶¨Ê±Æ÷·þÎñ³ÌÐòÖнøÐÐÈí¼þ¼ÆÊ±£º
TimerCount++; //¶ÁÈ¡IO¶Ë¿Ú1µÄÖµ
ÔÚÄ£¿éAµÄÍ·ÎļþÖУ¬ÉùÃ÷±äÁ¿£º
extern unsigned int TimerCount; //ÕâÀ冀ôÁËÀàÐÍÏÞ¶¨·ûvolatile
ÔÚÄ£¿éBÖУ¬ÒªÊ¹ÓÃTimerCount±äÁ¿½øÐо«È·µÄÈí¼þÑÓʱ£º
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ #include ¡°...A.h¡± //Ê×ÏȰüº¬Ä£¿éAµÄÍ·Îļþ ¡ TimerCount=0; while(TimerCount>=TIMER_VALUE); //ÑÓʱһ¶Îʱ¼ä |
ʵ¼ÊÉÏ£¬ÕâÊÇÒ»¸öËÀÑ»·¡£ÓÉÓÚÄ£¿éAÍ·ÎļþÖÐÉùÃ÷±äÁ¿TimerCountʱ©µôÁËvolatileÏÞ¶¨·û£¬ÔÚÄ£¿éBÖУ¬±äÁ¿TimerCountÊDZ»µ±×÷unsigned
intÀàÐͱäÁ¿¡£ÓÉÓڼĴæÆ÷ËÙ¶ÈÔ¶¿ìÓÚRAM£¬±àÒëÆ÷ÔÚʹÓ÷ÇvolatileÏÞ¶¨±äÁ¿Ê±ÊÇÏȽ«±äÁ¿´ÓRAMÖп½±´µ½¼Ä´æÆ÷ÖУ¬Èç¹ûͬһ¸ö´úÂë¿éÔÙ´ÎÓõ½¸Ã±äÁ¿£¬¾Í²»ÔÙ´ÓRAMÖп½±´Êý¾Ý¶øÊÇÖ±½ÓʹÓÃ֮ǰ¼Ä´æÆ÷±¸·ÝÖµ¡£´úÂëwhile(TimerCount>=TIMER_VALUE)ÖУ¬±äÁ¿TimerCount½öµÚÒ»´ÎÖ´ÐÐʱ±»Ê¹Óã¬Ö®ºó¶¼ÊÇʹÓõļĴæÆ÷±¸·ÝÖµ£¬¶øÕâ¸ö¼Ä´æÆ÷ֵһֱΪ0£¬ËùÒÔ³ÌÐòÎÞÏÞÑ»·¡£ÏÂÃæµÄÁ÷³Ìͼ˵Ã÷Á˳ÌÐòʹÓÃÏÞ¶¨·ûvolatileºÍ²»Ê¹ÓÃvolatileµÄÖ´Ðйý³Ì¡£

ARM¼Ü¹¹ÏµıàÒëÆ÷»áƵ·±µÄʹÓöÑÕ»£¬¶ÑÕ»ÓÃÓÚ´æ´¢º¯ÊýµÄ·µ»ØÖµ¡¢AAPCS¹æ¶¨µÄ±ØÐë±£»¤µÄ¼Ä´æÆ÷ÒÔ¼°¾Ö²¿±äÁ¿£¬°üÀ¨¾Ö²¿Êý×é¡¢½á¹¹Ìå¡¢ÁªºÏÌåºÍC++µÄÀà¡£´Ó¶ÑÕ»ÖзÖÅäµÄ¾Ö²¿±äÁ¿µÄ³õÖµÊDz»È·¶¨µÄ£¬Òò´ËÐèÒªÔËÐÐʱÏÔʽ³õʼ»¯¸Ã±äÁ¿¡£Ò»µ©À뿪¾Ö²¿±äÁ¿µÄ×÷ÓÃÓò£¬Õâ¸ö±äÁ¿Á¢¼´±»ÊÍ·Å£¬ÆäËü´úÂëÒ²¾Í¿ÉÒÔʹÓÃËü£¬Òò´Ë¶ÑÕ»ÖеÄÒ»¸öÄÚ´æÎ»ÖÿÉÄܶÔÓ¦Õû¸ö³ÌÐòµÄ¶à¸ö±äÁ¿¡£
¾Ö²¿±äÁ¿±ØÐëÏÔʽ³õʼ»¯£¬³ý·ÇÄãÈ·¶¨ÖªµÀÄãÒª×öʲô¡£ÏÂÃæµÄ´úÂëµÃµ½µÄζÈÖµ¸úÔ¤ÆÚ»áÓкܴó²î±ð£¬ÒòΪÔÚʹÓþֲ¿±äÁ¿sumʱ£¬²¢²»Äܱ£Ö¤ËüµÄ³õֵΪ0¡£±àÒëÆ÷»áÔÚµÚÒ»´ÎÔËÐÐʱÇåÁã¶ÑÕ»ÇøÓò£¬Õâ¼ÓÖØÁË´ËÀàBugµÄÒþ±ÎÐÔ¡£
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ unsigned intGetTempValue(void) { unsigned int sum; //¶¨Òå¾Ö²¿±äÁ¿£¬±£´æ×ÜÖµ for(i=0;i<10;i++) { sum+=CollectTemp(); //º¯ÊýCollectTemp¿ÉÒԵõ½µ±Ç°µÄζÈÖµ } return (sum/10); } |
ÓÉÓÚÒ»µ©³ÌÐòÀ뿪¾Ö²¿±äÁ¿µÄ×÷ÓÃÓò¼´±»ÊÍ·Å£¬ËùÒÔÏÂÃæ´úÂë·µ»ØÖ¸Ïò¾Ö²¿±äÁ¿µÄÖ¸ÕëÊÇûÓÐʵ¼ÊÒâÒåµÄ£¬¸ÃÖ¸ÕëÖ¸ÏòµÄÇøÓò¿ÉÄܻᱻÆäËü³ÌÐòʹÓã¬ÆäÖµ»á±»¸Ä±ä¡£
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ char * GetData(void) { char buffer[100]; //¾Ö²¿Êý×é ¡ return buffer; } |
ÈÃÈËÐÀοµÄÊÇ£¬ÏÖÔÚÔ½À´Ô½¶àµÄ±àÒëÆ÷Òâʶµ½ÁËÓïÒå¼ì²éµÄÖØÒªÐÔ£¬±àÒëÆ÷µÄÓïÒå¼ì²éÒ²Ô½À´Ô½Ç¿´ó£¬±ÈÈçÖøÃûµÄKeil
MDK±àÒëÆ÷ÔÚÆä V4.47»òÒÔÉϰ汾ÖÐÔö¼ÓÁ˶¯Ì¬Óï·¨¼ì²é²¢¼ÓÇ¿ÁËÓïÒå¼ì²é£¬¿ÉÒÔÓѺõÄÌáʾ¸ü¶à¾¯¸æÐÅÏ¢¡£
1.3 ²»ºÏÀíµÄÓÅÏȼ¶
CÓïÑÔÓÐ32¸ö¹Ø¼ü×Ö£¬È´ÓÐ34¸öÔËËã·û¡£Òª¼ÇסËùÓÐÔËËã·ûµÄÓÅÏȼ¶ÊÇÀ§Äѵġ£²»ºÏÀíµÄ#define»á¼ÓÖØÓÅÏȼ¶ÎÊÌ⣬ÈÃÎÊÌâ±äµÃ¸ü¼ÓÒþ±Î¡£
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ #define READSDA IO0PIN&(1<<11) //¶¨Òåºê£¬¶ÁIO¿Úp0.11µÄ¶Ë¿Ú״̬ //Åж϶˿Úp0.11ÊÇ·ñΪ¸ßµçƽ if(READSDA==(1<<11)) { ¡ } |
±àÒëÆ÷ÔÚ±àÒëºó½«ºê´øÈë,ÔifÓï¾ä±äΪ:
ÔËËã·û'=='µÄÓÅÏȼ¶ÊÇ´óÓÚ'&'µÄ£¬´úÂëIO0PIN&(1<<11)
==(1<<11))µÈЧΪIO0PIN&0x00000001£ºÅж϶˿ÚP0.0ÊÇ·ñΪ¸ßµçƽ£¬ÕâÓëÔÒâÏà²îÉõÔ¶¡£
ΪÁËÖÆÔì¸ü¶àµÄÈí¼þBug£¬CÓïÑÔµÄÔËËã·ûµ±È»²»»áÖ»Ö¹²½ÓÚÊýÄ¿·±¶à¡£ÔÚ´Ë»ù´¡ÉÏ£¬°´ÕÕ³£¹æ·½Ê½Ê¹ÓÃʱ£¬¿ÉÄÜÒýÆðÎó»áµÄÔËËã·û¸üÊDZȱȽÔÊÇ£¡ÈçϱíËùʾ£º

1.4 Òþʽת»»ºÍÇ¿ÖÆ×ª»»
ÕâÓÖÊÇCÓïÑÔµÄÒ»´ó¹îÒìÖ®´¦£¬ËüÔì³ÉµÄΣº¦³Ì¶ÈÓëÊý×éºÍÖ¸ÕëÓеÄһƴ¡£Óï¾ä»ò±í´ïʽͨ³£Ó¦¸ÃֻʹÓÃÒ»ÖÖÀàÐ͵ıäÁ¿ºÍ³£Á¿¡£È»¶ø£¬Èç¹ûÄã»ìºÏʹÓÃÀàÐÍ£¬CʹÓÃÒ»¸ö¹æÔò¼¯ºÏÀ´×Ô¶¯Íê³ÉÀàÐÍת»»¡£Õâ¿ÉÄܷܺ½±ã£¬µ«Ò²ºÜΣÏÕ¡£
a.µ±³öÏÖÔÚ±í´ïʽÀïʱ£¬ÓзûºÅºÍÎÞ·ûºÅµÄcharºÍshortÀàÐͶ¼½«×Ô¶¯±»×ª»»ÎªintÀàÐÍ£¬ÔÚÐèÒªµÄÇé¿öÏ£¬½«×Ô¶¯±»×ª»»Îªunsigned
int£¨ÔÚshortºÍint¾ßÓÐÏàͬ´óСʱ£©¡£Õâ³ÆÎªÀàÐÍÌáÉý¡£ÌáÉýÔÚËãÊýÔËËãÖÐͨ³£²»»áÓÐʲô´óµÄ»µ´¦£¬µ«Èç¹ûλÔËËã·û
~ ºÍ << Ó¦ÓÃÔÚ»ù±¾ÀàÐÍΪunsigned char»òunsigned short
µÄ²Ù×÷Êý£¬½á¹ûÓ¦¸ÃÁ¢¼´Ç¿ÖÆ×ª»»Îªunsigned char»òÕßunsigned shortÀàÐÍ£¨È¡¾öÓÚ²Ù×÷ʱʹÓõÄÀàÐÍ£©¡£
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ uint8_t port =0x5aU; uint8_t result_8; result_8= (~port) >> 4; |
¼ÙÈçÎÒÃDz»Á˽â±í´ïʽÀïµÄÀàÐÍÌáÉý£¬ÈÏΪÔÚÔËËã¹ý³ÌÖбäÁ¿portÒ»Ö±ÊÇunsigned
charÀàÐ͵ġ£ÎÒÃÇÀ´¿´Ò»ÏÂÔËËã¹ý³Ì£º~port½á¹ûΪ0xa5£¬0xa5>>4½á¹ûΪ0x0a£¬ÕâÊÇÎÒÃÇÆÚÍûµÄÖµ¡£µ«Êµ¼ÊÉÏ£¬result_8µÄ½á¹ûÈ´ÊÇ0xfa£¡ÔÚARM½á¹¹Ï£¬intÀàÐÍΪ32λ¡£±äÁ¿portÔÚÔËËãǰ±»ÌáÉýΪintÀàÐÍ£º~port½á¹ûΪ0xffffffa5£¬0xa5>>4½á¹ûΪ0x0ffffffa£¬¸³Öµ¸ø±äÁ¿result_8£¬·¢ÉúÀàÐͽضϣ¨ÕâÒ²ÊÇÒþʽµÄ£¡£©£¬result_8=0xfa¡£¾¹ýÕâô¹îÒìµÄÒþʽת»»£¬½á¹û¸úÎÒÃÇÆÚÍûµÄÖµ£¬ÒѾ´óÏྶͥ£¡ÕýÈ·µÄ±í´ïʽÓï¾äÓ¦¸ÃΪ£º
result_8=(unsigned char) (~port)
>> 4; /*Ç¿ÖÆ×ª»»*/
b.ÔÚ°üº¬Á½ÖÖÊý¾ÝÀàÐ͵ÄÈκÎÔËËãÀÁ½¸öÖµ¶¼»á±»×ª»»³ÉÁ½ÖÖÀàÐÍÀï½Ï¸ßµÄ¼¶±ð¡£ÀàÐͼ¶±ð´Ó¸ßµ½µÍµÄ˳ÐòÊÇlong
double¡¢double¡¢float¡¢unsigned long long¡¢long long¡¢unsigned
long¡¢long¡¢unsigned int¡¢int¡£ÕâÖÖÀàÐÍÌáÉýͨ³£¶¼ÊǼþºÃÊ£¬µ«ÍùÍùÓкܶà³ÌÐòÔ±²»ÄÜÕæÕýÀí½âÕâ¾ä»°£¬´Ó¶ø×öһЩÏ뵱ȻµÄÊÂÇ飬±ÈÈçÏÂÃæµÄÀý×Ó£¬intÀàÐͱíʾ16λ¡£
cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ uint16_t u16a = 40000; /* 16λÎÞ·ûºÅ±äÁ¿*/ uint16_t u16b= 30000; /*16λÎÞ·ûºÅ±äÁ¿*/ uint32_t u32x; /*32λÎÞ·ûºÅ±äÁ¿ */ uint32_t u32y; u32x = u16a +u16b; /* u32x = 70000»¹ÊÇ4464 ? */ u32y =(uint32_t)(u16a + u16b); /* u32y = 70000 »¹ÊÇ4464 ? */ |
u32xºÍu32yµÄ½á¹û¶¼ÊÇ4464£¨70000%65536£©£¡²»ÒªÈÏΪ±í´ïʽÖÐÓÐÒ»¸ö¸ßÀà±ðuint32_tÀàÐͱäÁ¿£¬±àÒëÆ÷¶¼»á°ïÄã°ÑËùÓÐÆäËûµÍÀà±ð¶¼ÌáÉýµ½uint32_tÀàÐÍ¡£ÕýÈ·µÄÊéд·½Ê½£º
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ u32x = (uint32_t)u16a +(uint32_t)u16b;»òÕߣº u32x = (uint32_t)u16a + u16b; |
ºóÒ»ÖÖд·¨ÔÚ±¾±í´ïʽÖÐÊÇÕýÈ·µÄ£¬µ«ÊÇÔÚÆäËü±í´ïʽÖв»Ò»¶¨ÕýÈ·£¬±ÈÈ磺
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ uint16_t u16a,u16b,u16c; uint32_t u32x; u32x= u16a + u16b + (uint32_t)u16c;/*´íÎóд·¨£¬u16a+ u16bÈÔ¿ÉÄÜÒç³ö*/ |
c.ÔÚ¸³ÖµÓï¾äÀ¼ÆËãµÄ×îºó½á¹û±»×ª»»³É½«Òª±»¸³ÓèÖµµÃÄǸö±äÁ¿µÄÀàÐÍ¡£ÕâÒ»¹ý³Ì¿ÉÄܵ¼ÖÂÀàÐÍÌáÉýÒ²¿ÉÄܵ¼ÖÂÀàÐͽµ¼¶¡£½µ¼¶¿ÉÄܻᵼÖÂÎÊÌâ¡£±ÈÈ罫ÔËËã½á¹ûΪ321µÄÖµ¸³Öµ¸ø8λcharÀàÐͱäÁ¿¡£³ÌÐò±ØÐë¶ÔÔËËãʱµÄÊý¾ÝÒç³ö×öºÏÀíµÄ´¦Àí¡£
ºÜ¶àÆäËûÓïÑÔ£¬ÏñPascalÓïÑÔ£¨ºÃЦµÄÊÇCÓïÑÔÉè¼ÆÕßÖ®Ò»Ôø×«ÎĺݺÝÅúÆÀ¹ýPascalÓïÑÔ£©£¬¶¼²»ÔÊÐí»ìºÏʹÓÃÀàÐÍ£¬µ«CÓïÑÔ²»»áÏÞÖÆÄãµÄ×ÔÓÉ£¬¼´±ãÕâ¾³£ÒýÆðBug¡£
d.µ±×÷Ϊº¯ÊýµÄ²ÎÊý±»´«µÝʱ£¬charºÍshort»á±»×ª»»Îªint£¬float»á±»×ª»»Îªdouble¡£
e.CÓïÑÔÖ§³ÖÇ¿ÖÆÀàÐÍת»»£¬Èç¹ûÄã±ØÐëÒª½øÐÐÇ¿ÖÆÀàÐÍת»»Ê±£¬ÒªÈ·±£Äã¶ÔÀàÐÍת»»ÓÐ×ã¹»Á˽⣺
²¢·ÇËùÓÐÇ¿ÖÆÀàÐÍת»»¶¼ÊÇÓÉ·çÏյ쬰ÑÒ»¸öÕûÊýֵת»»ÎªÒ»ÖÖ¾ßÓÐÏàͬ·ûºÅµÄ¸ü¿íÀàÐÍʱ£¬ÊǾø¶Ô°²È«µÄ¡£
¾«¶È¸ßµÄÀàÐÍÇ¿ÖÆ×ª»»Îª¾«¶ÈµÍµÄÀàÐÍʱ£¬Í¨¹ý¶ªÆúÊʵ±ÊýÁ¿µÄ×î¸ßÓÐЧλÀ´»ñÈ¡½á¹û£¬Ò²¾ÍÊÇ˵»á·¢ÉúÊý¾Ý½Ø¶Ï£¬²¢ÇÒ¿ÉÄܸıäÊý¾ÝµÄ·ûºÅλ¡£
¾«¶ÈµÍµÄÀàÐÍÇ¿ÖÆ×ª»»Îª¾«¶È¸ßµÄÀàÐÍʱ£¬Èç¹ûÁ½ÖÖÀàÐ;ßÓÐÏàͬµÄ·ûºÅ£¬ÄÇôûʲôÎÊÌ⣻ÐèҪעÒâµÄÊǸºµÄÓзûºÅ¾«¶ÈµÍÀàÐÍÇ¿ÖÆ×ª»»ÎªÎÞ·ûºÅ¾«¶È¸ßÀàÐÍʱ£¬»á²»Ö±¹ÛµÄÖ´ÐзûºÅÀ©Õ¹£¬ÀýÈ磺
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ unsigned int bob; signed char fred = -1; bob=(unsigned int )fred; /*·¢Éú·ûºÅÀ©Õ¹£¬´ËʱbobΪ0xFFFFFFFF*/ |
һЩ±à³Ì½¨Ò飺
ÉîÈëÀí½âǶÈëʽCÓïÑÔÒÔ¼°±àÒëÆ÷
ϸÖ¡¢½÷É÷µÄ±à³Ì
ʹÓúõķç¸ñºÍºÏÀíµÄÉè¼Æ
²»Òª²Ö´Ù±àд´úÂ룬дÿһÐеĴúÂëʱ¶¼ÒªÈý˼¶øºóÐУº¿ÉÄÜ»á³öÏÖʲôÑùµÄ´íÎó£¿ÊÇ·ñ¿¼ÂÇÁËËùÓеÄÂß¼·ÖÖ§£¿
´ò¿ª±àÒëÆ÷ËùÓо¯¸æ¿ª¹Ø
ʹÓþ²Ì¬·ÖÎö¹¤¾ß·ÖÎö´úÂë
°²È«µÄ¶ÁдÊý¾Ý£¨¼ì²éËùÓÐÊý×é±ß½ç¡£©
¼ì²éÖ¸ÕëµÄºÏ·¨ÐÔ
¼ì²éº¯ÊýÈë¿Ú²ÎÊýºÏ·¨ÐÔ
¼ì²éËùÓзµ»ØÖµ
ÔÚÉùÃ÷±äÁ¿Î»Öóõʼ»¯ËùÓбäÁ¿
ºÏÀíµÄʹÓÃÀ¨ºÅ
½÷É÷µÄ½øÐÐÇ¿ÖÆ×ª»»
ʹÓúõÄÕï¶ÏÐÅÏ¢ÈÕÖ¾ºÍ¹¤¾ß
2. Åдí
¹¤ÓûÉÆÆäʱØÏÈÀûÆäÆ÷¡£ÅдíµÄ×îÖÕÄ¿µÄÊÇÓÃÀ´±©Â¶Éè¼ÆÖеÄBug²¢¼ÓÒÔ¸ÄÕý£¬ËùÒÔ½«´íÎóÐÅÏ¢Ìṩ¸ø±à³ÌÕßÊDZØÒªµÄ¡£ÓÐʱºòÐèÒª½«¹ÊÕÏÐÅÏ¢´¢´æÓÚ·ÇÒ×ʧÐÔ´æ´¢Æ÷ÖУ¬±ãÓڲ鿴¡£ÕâÀïÒÔʹÓô®¿Ú´òÓ¡´íÎóÐÅÏ¢µ½PCÏÔʾÆÁΪÀý£¬À´ËµÃ÷Ò»°ãÐèÒªÏÔʾʲôÐÅÏ¢¡£
±àд»òÒÆÖ²Ò»¸öÀàËÆC±ê×¼¿âÖеÄprintfº¯Êý£¬¿ÉÒÔ¸ñʽ»¯´òÓ¡×Ö·û¡¢×Ö·û´®¡¢Ê®½øÖÆÕûÊý¡¢Ê®Áù½øÖÆÕûÊý¡£ÕâÀï³ÆÎªUARTprintf£¨£©¡£
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ unsigned int WriteData(unsigned int addr) { if((addr>= BASE_ADDR)&&(addr<=END_ADDR)) { ¡/*µØÖ·ºÏ·¨,½øÐд¦Àí*/ } else { /*µØÖ·´íÎ󣬴òÓ¡´íÎóÐÅÏ¢*/ UARTprintf ("Îļþ%sµÄµÚ %d ÐÐдÊý¾Ýʱ·¢ÉúµØÖ·´íÎó, ´íÎóµØÖ·Îª:0x%x\n",__FILE__,__LINE__,addr); ¡/*´íÎó´¦Àí´úÂë*/ } |
¼ÙÉèUARTprintf()º¯ÊýλÓÚmain.cÄ£¿éµÄµÚ256ÐУ¬²¢ÇÒWriteData()º¯ÊýÔÚ¶ÁÊý¾Ýʱ´«µÝÁË´íÎóµØÖ·0x00000011£¬Ôò»áÖ´ÐÐUARTprintf()º¯Êý£¬´òÓ¡ÈçÏÂËùʾµÄÐÅÏ¢£º
Îļþmain.cµÄµÚ256ÐÐдÊý¾Ýʱ·¢ÉúµØÖ·´íÎ󣬴íÎóµØÖ·Îª£º0x00000011¡£
ÀàËÆÕâÑùµÄÐÅÏ¢»áÓÐÖúÓÚ³ÌÐòÔ±¶¨Î»·ÖÎö´íÎó²úÉúµÄ¸ùÔ´£¬¸ü¿ìµÄÏû³ýBug¡£
2.1¾ßÓÐÐβεĺ¯Êý£¬ÐèÅжϴ«µÝÀ´µÄʵ²ÎÊÇ·ñºÏ·¨¡£
³ÌÐòÔ±¿ÉÄÜÎÞÒâʶµÄ´«µÝÁË´íÎó²ÎÊý£»Íâ½çµÄÇ¿¸ÉÈÅ¿ÉÄܽ«´«µÝµÄ²ÎÊýÐ޸ĵô£¬»òÕßʹÓÃËæ»ú²ÎÊýÒâÍâµÄµ÷Óú¯Êý£¬Òò´ËÔÚÖ´Ðк¯ÊýÖ÷Ìåǰ£¬ÐèÒªÏÈÈ·¶¨Êµ²ÎÊÇ·ñºÏ·¨¡£
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ int exam_fun( unsigned char *str ) { if( str != NULL ){ // ¼ì²é¡°¼ÙÉèÖ¸Õ벻Ϊ¿Õ¡±Õâ¸öÌõ¼þ ... //Õý³£´¦Àí´úÂë } else { UARTprintf(¡); // ´òÓ¡´íÎóÐÅÏ¢ ¡//´¦Àí´íÎó´úÂë } } |
2.2 ×Ðϸ¼ì²éº¯ÊýµÄ·µ»ØÖµ
¶Ôº¯Êý·µ»ØµÄ´íÎóÂ룬Ҫ½øÐÐÈ«Ãæ×Ðϸ´¦Àí£¬±ØÒªÊ±×ö´íÎó¼Ç¼¡£
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ char *DoSomething(¡) { char * p; p=malloc(1024); if(p==NULL) { /*¶Ôº¯Êý·µ»ØÖµ×÷³öÅжÏ*/ UARTprintf(¡); /*´òÓ¡´íÎóÐÅÏ¢*/ return NULL; } retuen p; } |
2.3 ·ÀÖ¹Ö¸ÕëÔ½½ç
Èç¹û¶¯Ì¬¼ÆËãÒ»¸öµØÖ·Ê±£¬Òª±£Ö¤±»¼ÆËãµÄµØÖ·ÊǺÏÀíµÄ²¢Ö¸Ïòij¸öÓÐÒâÒåµÄµØ·½¡£Ìرð¶ÔÓÚÖ¸ÏòÒ»¸ö½á¹¹»òÊý×éµÄÄÚ²¿µÄÖ¸Õ룬µ±Ö¸ÕëÔö¼Ó»òÕ߸ıäºóÈÔȻָÏòͬһ¸ö½á¹¹»òÊý×é¡£
2.4 ·ÀÖ¹Êý×éÔ½½ç
Êý×éÔ½½çµÄÎÊÌâǰÎÄÒѾ½²ÊöµÄºÜ¶àÁË£¬ÓÉÓÚC²»»á¶ÔÊý×é½øÐÐÓÐЧµÄ¼ì²â£¬Òò´Ë±ØÐëÔÚÓ¦ÓÃÖÐÏÔʽµÄ¼ì²âÊý×éÔ½½çÎÊÌâ¡£ÏÂÃæµÄÀý×Ó¿ÉÓÃÓÚÖжϽÓÊÕͨѶÊý¾Ý¡£
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ #define REC_BUF_LEN 100 unsigned char RecBuf[REC_BUF_LEN]; ¡ //ÆäËü´úÂë void Uart_IRQHandler(void) { static RecCount=0; //½ÓÊÕÊý¾Ý³¤¶È¼ÆÊýÆ÷ ¡ //ÆäËü´úÂë if(RecCount< REC_BUF_LEN){ RecBuf[RecCount]=¡; //´ÓÓ²¼þÈ¡Êý¾Ý RecCount++; ¡ //ÆäËü´úÂë } else { UARTprintf(¡); //´òÓ¡´íÎóÐÅÏ¢ ¡ //ÆäËü´íÎó´¦Àí´úÂë } ¡ } |
ÔÚʹÓÃһЩ¿âº¯Êýʱ£¬Í¬ÑùÐèÒª¶Ô±ß½ç½øÐмì²é£º
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ #define REC_BUF_LEN 100 unsigned char RecBuf[REC_BUF_LEN]; if(len< REC_BUF_LEN){ memset(RecBuf,0,len); //½«Êý×éRecBufÇåÁã } else { //´¦Àí´íÎó } |
2.5 ÊýѧËãÊýÔËËã
¼ì²â³ýÊýÊÇ·ñΪÁã
¼ì²âÔËËãÒç³öÇé¿ö
2.5.1 ÓзûºÅÕûÊý³ý·¨£¬½ö¼ì²â³ýÊýΪÁã¾Í¹»ÁËÂð?
Á½¸öÕûÊýÏà³ý£¬³ýÁËÒª¼ì²â³ýÊýÊÇ·ñΪÁãÍ⣬»¹Òª¼ì²â³ý·¨ÊÇ·ñÒç³ö¡£¶ÔÓÚÒ»¸ösigned
longÀàÐͱäÁ¿£¬ËüÄܱíʾµÄÊýÖµ·¶Î§Îª£º-2147483648 ~ +2147483647£¬Èç¹ûÈÃ-2147483648
/ -1£¬ÄÇô½á¹ûÓ¦¸ÃÊÇ+ 2147483648£¬µ«ÊÇÕâ¸ö½á¹ûÒѾ³¬³öÁËsigned longËùÄܱíʾµÄ·¶Î§ÁË¡£
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ #include <limits.h> signed long sl1,sl2,result; /*³õʼ»¯sl1ºÍsl2*/ if((sl2==0)||((sl1==LONG_MIN) && (sl2==-1))){ //´¦Àí´íÎó } else { result = sl1 / sl2; } |
2.5.2 ¼Ó·¨Òç³ö¼ì²â
a£©ÎÞ·ûºÅ¼Ó·¨
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ #include <limits.h> unsigned int a,b,result; /*³õʼ»¯a£¬b*/ if(UINT_MAX-a<b){ //´¦ÀíÒç³ö } else { result=a+b; } |
b£©ÓзûºÅ¼Ó·¨
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ #include <limits.h> signed int a,b,result; /*³õʼ»¯a£¬b */ if((a>0 && INT_MAX-a<b)||(a<0) && (INT_MIN-a>b)){ //´¦ÀíÒç³ö } else { result=a+b; } |
2.5.3 ³Ë·¨Òç³ö¼ì²â
a£©ÎÞ·ûºÅ³Ë·¨
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ #include <limits.h> unsigned int a,b,result; /*³õʼ»¯a£¬b*/ if((a!=0) && (UINT_MAX/a<b)) { // } else { result=a*b; } |
b£©ÓзûºÅ³Ë·¨
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ #include <limits.h> signed int a,b,tmp,result; /*³õʼ»¯a£¬b*/ tmp=a * b; if(a!=0 && tmp/a!=b){ // } else { result=tmp; } |
¼ì²âÒÆÎ»Ê±¶ªÊ§ÓÐЧλ
2.6 ÆäËü¿ÉÄܳöÏÖÔËÐÐʱ´íÎóµÄµØ·½
ÔËÐÐʱ´íÎó¼ì²éÊÇC ³ÌÐòÔ±ÐèÒª¼ÓÒÔÌØ±ðµÄ×¢ÒâµÄ£¬ÕâÊÇÒòΪCÓïÑÔÔÚÌṩÈκÎÔËÐÐʱ¼ì²â·½ÃæÄÜÁ¦½ÏÈõ¡£¶ÔÓÚÒªÇó¿É¿¿ÐԽϸߵÄÈí¼þÀ´Ëµ£¬¶¯Ì¬¼ì²âÊDZØÐèµÄ¡£Òò´ËC
³ÌÐòÔ±ÐèÒª½÷É÷¿¼ÂǵÄÎÊÌâÊÇ£¬ÔÚÈκοÉÄܳöÏÖÔËÐÐʱ´íÎóµÄµØ·½Ôö¼Ó´úÂëµÄ¶¯Ì¬¼ì²â¡£´ó¶àÊýµÄ¶¯Ì¬¼ì²âÓëÓ¦ÓýôÃÜÏà¹Ø£¬ÔÚ³ÌÐòÉè¼Æ¹ý³ÌÖÐÒª¸ù¾ÝϵͳÐèÇóÉèÖö¯Ì¬´úÂë¼ì²â¡£
3.ÈÝ´í
1980Ä꣬ÃÀËÕÉд¦ÓÚÀäÕ½½×¶Î¡£ÕâÄ꣬±±ÃÀ·À¿ÕÁªºÏ˾Áî²¿Ôø±¨¸æ³ÆÃÀ¹úÔâÊܵ¼µ¯Ï®»÷¡£ºóÀ´Ö¤Êµ£¬ÕâÊÇ·´À¡ÏµÍ³µç·¹ÊÕÏÎÊÌ⣬µ«·´À¡ÏµÍ³Èí¼þûÓп¼ÂǹÊÕÏÎÊÌâÒý·¢µÄÎ󱨡£
3.1 ¹Ø¼üÊý¾Ý¶àÇø±¸·Ý£¬È¡Êý¾Ý²ÉÓá°±í¾ö·¨¡±
RAMÖеÄÊý¾ÝÔÚÊܵ½¸ÉÈÅÇé¿öÏÂÓпÉÄܱ»¸Ä±ä£¬¶ÔÓÚϵͳ¹Ø¼üÊý¾Ý±ØÐë½øÐб£»¤¡£¹Ø¼üÊý¾Ý°üÀ¨È«¾Ö±äÁ¿¡¢¾²Ì¬±äÁ¿ÒÔ¼°ÐèÒª±£»¤µÄÊý¾ÝÇøÓò¡£Êý¾Ý±¸·ÝÓëÔÊý¾Ý²»Ó¦¸Ã´¦ÓÚÏàÁÚλÖã¬Òò´Ë²»Ó¦ÓɱàÒëÆ÷ĬÈÏ·ÖÅ䱸·ÝÊý¾ÝλÖ㬶øÓ¦¸ÃÓɳÌÐòÔ±Ö¸¶¨ÇøÓò´æ´¢¡£¿ÉÒÔ½«RAM·ÖΪ3¸öÇøÓò£¬µÚÒ»¸öÇøÓò±£´æÔÂ룬µÚ¶þ¸öÇøÓò±£´æ·´Â룬µÚÈý¸öÇøÓò±£´æÒì»òÂë£¬ÇøÓòÖ®¼äÔ¤ÁôÒ»¶¨Á¿µÄ¡°¿Õ°×¡±RAM×÷Ϊ¸ôÀë¡£¿ÉÒÔʹÓñàÒëÆ÷µÄ¡°·ÖÉ¢¼ÓÔØ¡±»úÖÆ½«±äÁ¿·Ö±ð´æ´¢ÔÚÕâÐ©ÇøÓò¡£ÐèÒª½øÐжÁȡʱ£¬Í¬Ê±¶Á³ö3·ÝÊý¾Ý²¢½øÐбí¾ö£¬È¡ÖÁÉÙÓÐÁ½¸öÏàͬµÄÄǸöÖµ¡£
3.2 ·ÇÒ×ʧÐÔ´æ´¢Æ÷µÄÊý¾Ý´æ´¢
·ÇÒ×ʧÐÔ´æ´¢Æ÷°üÀ¨µ«²»ÏÞÓÚFlash¡¢EEPROM¡¢Ìúµç¡£½ö½ö½«Ð´Èë·ÇÒ×ʧÐÔ´æ´¢Æ÷ÖеÄÊý¾ÝÔÙ¶Á³öУÑéÊDz»¹»µÄ¡£Ç¿¸ÉÈÅÇé¿öÏ¿ÉÄܵ¼Ö·ÇÒ×ʧÐÔ´æ´¢Æ÷ÄÚµÄÊý¾Ý´íÎó£¬ÔÚд·ÇÒ×ʧÐÔ´æ´¢Æ÷µÄÆÚ¼äϵͳµôµç½«µ¼ÖÂÊý¾Ý¶ªÊ§£¬Òò¸ÉÈŵ¼Ö³ÌÐòÅܷɵ½Ð´·ÇÒ×ʧÐÔ´æ´¢Æ÷º¯ÊýÖУ¬½«µ¼ÖÂÊý¾Ý´æ´¢ÎÉÂÒ¡£Ò»ÖÖ¿É¿¿µÄ°ì·¨Êǽ«·ÇÒ×ʧÐÔ´æ´¢Æ÷·Ö³É¶à¸öÇø£¬Ã¿¸öÊý¾Ý¶¼½«°´ÕÕ²»Í¬µÄÐÎʽдÈëµ½ÕâЩ·ÖÇøÖУ¬ÐèÒª½øÐжÁȡʱ£¬Í¬Ê±¶Á³ö¶à·ÝÊý¾Ý²¢½øÐбí¾ö£¬È¡ÏàͬÊýÄ¿½Ï¶àµÄÄǸöÖµ¡£
¶ÔÓÚÒò¸ÉÈŵ¼Ö³ÌÐòÅܷɵ½Ð´·ÇÒ×ʧÐÔ´æ´¢Æ÷º¯Êý£¬»¹Ó¦¸ÃÅäºÏÈí¼þËøÒÔ¼°ÑϸñµÄÈë¿Ú¼ìÑ飬µ¥µ¥ÒÀ¿¿Ð´Êý¾Ýµ½¶à¸öÇøÊDz»¹»µÄÒ²ÊDz»Ã÷Öǵģ¬Ó¦¸ÃÔÚÔ´Í·½øÐÐ×è½Ø¡£
3.3 Èí¼þËø
Èí¼þËø¿ÉÒÔʵÏÖµ«²»¾ÖÏÞÓÚ»·»·Ïà¿Û¡£¶ÔÓÚ³õʼ»¯ÐòÁлòÕßÓÐÒ»¶¨ÏȺó˳ÐòµÄº¯Êýµ÷Óã¬ÎªÁ˱£Ö¤µ÷ÓÃ˳Ðò»òÕßÈ·±£Ã¿¸öº¯Êý¶¼±»µ÷Óã¬ÎÒÃÇ¿ÉÒÔʹÓû·»·Ïà¿Û£¬ÊµÖÊÉÏÕâÒ²ÊÇÒ»ÖÖÈí¼þËø¡£´ËÍâ¶ÔÓÚһЩ°²È«¹Ø¼ü´úÂëÓï¾ä£¨ÊÇÓï¾ä£¬¶ø²»ÊǺ¯Êý£©£¬¿ÉÒÔ¸øËüÃÇÉèÖÃÈí¼þËø£¬Ö»ÓгÖÓÐÌØ¶¨Ô¿³×µÄ£¬²Å¿ÉÒÔ·ÃÎÊÕâЩ¹Ø¼ü´úÂë¡£±ÈÈ磬ÏòFlashдһ¸öÊý¾Ý£¬ÎÒÃÇ»áÅжÏÊý¾ÝÊÇ·ñºÏ·¨¡¢Ð´ÈëµÄµØÖ·ÊÇ·ñºÏ·¨£¬¼ÆËãҪдÈëµÄÉÈÇø¡£Ö®ºóµ÷ÓÃдFlash×Ó³ÌÐò£¬ÔÚÕâ¸ö×Ó³ÌÐòÖУ¬ÅжÏÉÈÇøµØÖ·ÊÇ·ñºÏ·¨¡¢Êý¾Ý³¤¶ÈÊÇ·ñºÏ·¨£¬Ö®ºó¾ÍÒª½«Êý¾ÝдÈëFlash¡£ÓÉÓÚдFlashÓï¾äÊǰ²È«¹Ø¼ü´úÂ룬ËùÒÔ³ÌÐò¸øÕâЩÓï¾äÉÏËø£º±ØÐë¾ßÓÐÕýÈ·µÄÔ¿³×²Å¿ÉÒÔдFlash¡£ÕâÑù¼´Ê¹ÊdzÌÐòÅܷɵ½Ð´Flash×Ó³ÌÐò£¬Ò²ÄÜ´ó´ó½µµÍÎóдµÄ·çÏÕ¡£
3.4 ͨÐÅÊý¾ÝµÄ¼ì´í
ͨѶÏßÉϵÄÊý¾ÝÎóÂëÏà¶ÔÑÏÖØ£¬Í¨Ñ¶ÏßÔ½³¤£¬Ëù´¦µÄ»·¾³Ô½¶ñÁÓ£¬ÎóÂë»áÔ½ÑÏÖØ¡£Í¨Ñ¶Êý¾Ý³ýÁË´«Í³µÄÓ²¼þÆæÅ¼Ð£ÑéÍ⣬»¹Ó¦¸ÃÔö¼ÓÈí¼þCRCУÑé¡£³¬¹ý16×Ö½ÚµÄÊý¾ÝÓ¦ÖÁÉÙʹÓÃCRC16¡£ÔÚͨѶ¹ý³ÌÖУ¬Èç¹û¼ì²âµ½·¢ÉúÁËÊý¾Ý´íÎó£¬ÔòÒªÇóÖØÐ·¢Ë͵±Ç°Ö¡Êý¾Ý¡£
3.5 ¿ª¹ØÁ¿ÊäÈëµÄ¼ì²â¡¢È·ÈÏ
¿ª¹ØÁ¿ÈÝÒ×Êܵ½¼âÂö³å¸ÉÈÅ£¬Èç¹û²»½øÐÐÂ˳ý£¬¿ÉÄÜ»áÔì³ÉÎó¶¯×÷¡£Ò»°ãÇé¿öÏ£¬ÐèÒª¶Ô¿ª¹ØÁ¿ÊäÈëÐźŽøÐжà´Î²ÉÑù£¬²¢½øÐÐÂß¼ÅжÏÖ±µ½È·ÈÏÐźÅÎÞÎóΪֹ¡£¶à´Î²ÉÑùÖ®¼äÐèÒªÓÐÒ»¶¨Ê±¼ä¼ä¸ô£¬¾ßÌå¸ú¿ª¹ØÁ¿µÄ×î´óÇл»ÆµÂÊÓйأ¬Ò»°ã²»Ð¡ÓÚ1ms¡£
3.6 ¿ª¹ØÁ¿Êä³ö
¿ª¹ØÐźżòµ¥µÄÒ»´ÎÊä³öÊDz»°²È«µÄ£¬¸ÉÈÅÐźſÉÄÜ»á·×ª¿ª¹ØÁ¿Êä³öµÄ״̬¡£²ÉÈ¡ÖØ¸´Ë¢ÐÂÊä³ö¿ÉÒÔÓÐЧ·ÀÖ¹µçƽµÄ·×ª¡£
3.7 ³õʼ»¯ÐÅÏ¢µÄ±£´æÓë»Ö¸´
΢´¦ÀíÆ÷µÄ¼Ä´æÆ÷ÖµÒ²¿ÉÄÜ»áÒòÍâ½ç¸ÉÈŶø¸Ä±ä£¬ÍâÉè³õʼ»¯ÖµÐèÒªÔڼĴæÆ÷Öг¤ÆÚ±£´æ£¬×îÈÝÒ×±»ÆÆ»µ¡£ÓÉÓÚFlashÖеÄÊý¾ÝÏà¶Ô²»Ò×±»ÆÆ»µ£¬¿ÉÒÔ½«³õʼ»¯ÐÅÏ¢Ô¤ÏÈдÈëFlash£¬´ý³ÌÐò¿ÕÏÐʱ±È½ÏÓë³õʼ»¯Ïà¹ØµÄ¼Ä´æÆ÷ÖµÊÇ·ñ±»¸ü¸Ä£¬Èç¹û·¢ÏÖ·Ç·¨¸ü¸ÄÔòʹÓÃFlashÖеÄÖµ½øÐлָ´¡£
3.8 ÏÝÚå
¶ÔÓÚ8051Äں˵¥Æ¬»ú£¬ÓÉÓÚûÓÐÏàÓ¦µÄÓ²¼þÖ§³Ö£¬¿ÉÒÔÓô¿Èí¼þÉèÖÃÈí¼þÏÝÚ壬ÓÃÀ´À¹½ØÒ»Ð©³ÌÐòÅÜ·É¡£¶ÔÓÚARM7»òÕßCortex-MϵÁе¥Æ¬»ú£¬Ó²¼þÒѾÄÚ½¨Á˶àÖÖÒì³££¬Èí¼þÐèÒª¸ù¾ÝÓ²¼þÒì³£À´±àдÏÝÚå³ÌÐò£¬ÓÃÀ´¿ìËÙ¶¨Î»ÉõÖÁ»Ö¸´´íÎó¡£
3.9 whileÑ»·
ÓÐʱºò³ÌÐòÔ±»áʹÓÃwhile(!flag);Óï¾äÀ´µÈ´ý±êÖ¾flag¸Ä±ä£¬±ÈÈç´®¿Ú·¢ËÍʱÓÃÀ´µÈ´ýÒ»×Ö½ÚÊý¾Ý·¢ËÍÍê³É¡£ÕâÑùµÄ´úÂëʱ´æÔÚ·çÏյģ¬Èç¹ûÒòΪijЩÔÒò±ê־λһֱ²»¸Ä±äÔò»áÔì³ÉϵͳËÀ»ú¡£Á¼ºÃÈßÓàµÄ³ÌÐòÊÇÉèÖÃÒ»¸ö³¬Ê±¶¨Ê±Æ÷£¬³¬¹ýÒ»¶¨Ê±¼äºó£¬Ç¿ÖƳÌÐòÍ˳öwhileÑ»·¡£
2003Äê8ÔÂ11ÈÕ·¢ÉúµÄW32.Blaster.WormÈ䳿ʼþµ¼ÖÂÈ«Çò¾¼ÃËðʧ¸ß´ï5ÒÚÃÀÔª£¬Õâ¸ö©¶´ÊÇÀûÓÃÁËWindows·Ö²¼Ê½×é¼þ¶ÔÏóÄ£Ð͵ÄÔ¶³Ì¹ý³Ìµ÷ÓýӿÚÖеÄÒ»¸öÂ߼ȱÏÝ£ºÔÚµ÷ÓÃGetMachineName()º¯Êýʱ£¬Ñ»·Ö»ÉèÖÃÁËÒ»¸ö²»³ä·ÖµÄ½áÊøÌõ¼þ¡£
Ô´úÂë¼ò»¯ÈçÏÂËùʾ£º
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ HRESULT GetMachineName ( WCHAR *pwszPath, WCHARwszMachineName[MAX_COMPUTTERNAME_LENGTH_FQDN+1]) { WCHAR *pwszServerName = wszMachineName; WCHAR *pwszTemp = pwszPath + 2; while ( *pwszTemp != L¡¯\\¡¯ ) /* Õâ¾ä´úÂëÑ»·½áÊøÌõ¼þ²»³ä·Ö */ *pwszServerName++= *pwszTemp++; /*¡ */ } |
΢Èí·¢²¼µÄ°²È«²¹¶¡MS03-026½â¾öÁËÕâ¸öÎÊÌ⣬ΪGetMachineName()º¯ÊýÉèÖÃÁ˳ä·ÖÖÕÖ¹Ìõ¼þ¡£Ò»¸ö½â¾ö´úÂë¼ò»¯ÈçÏÂËùʾ£¨²¢·Ç΢Èí²¹¶¡´úÂ룩£º
[cpp] view plain copy print?ÔÚCODEÉϲ鿴´úÂëÆ¬ÅÉÉúµ½ÎҵĴúÂëÆ¬ HRESULT GetMachineName( WCHAR *pwszPath, WCHARwszMachineName [MAX_COMPUTTERNAME_LENGTH_FQDN+1]) { WCHAR *pwszServerName = wszMachineName; WCHAR *pwszTemp = pwszPath + 2; WCHAR *end_addr = pwszServerName +MAX_COMPUTTERNAME_LENGTH_FQDN£» while (£¨*pwszTemp != L¡¯\\¡¯ ) && (*pwszTemp != L¡¯\0¡¯) && (pwszServerName<end_addr)) /*³ä·ÖÖÕÖ¹Ìõ¼þ*/ *pwszServerName++= *pwszTemp++; /*¡ */ } |
3.10 ϵͳ×Ô¼ì
¶ÔCPU¡¢RAM¡¢Flash¡¢Íⲿµôµç±£´æ´æ´¢Æ÷ÒÔ¼°ÆäËûÏß·×Լ졣
|