![]() |
|
||||||||||||||
| . ÍøÕ¾Ê×Ò³ . ÐÂÎÅ . ÐÂÆ· . ·½°¸ . ר·Ã . »î¶¯ . DSP . EDA . ÆÀ²âÊÒ . ¼¼ÊõÎÄ¿â . »áÔ±Çø . ÉÌ³Ç . ·þÎñµ¼º½ . Óʹº . ×ÊÔ´ . | ||
|
||
|
|||||
| ¦ÌC/OS IIÕë¶ÔTMS320C32µÄÒÆÖ² | |||||
×÷Õߣº»¥ÁªÍø ÎÄÕÂÀ´Ô´£º±¾Õ¾Ô´´ µã»÷Êý£º ¸üÐÂʱ¼ä£º2007-1-22 ![]() |
|||||
|
¹Ø¼ü´Ê: ǶÈëʽ²Ù×÷ϵͳ£»mC/OS-II£» DSP£»ÒÆÖ² ǶÈëʽ²Ù×÷ϵͳmC/OS IIÊÇÒ»¸ö¿ÉÒÆÖ²¿É²Ã¼ô¡¢Õ¼ÏÈʽ¶àÈÎÎñOS¡£´ó²¿·ÖÔ´´úÂëÓÃANSI CÓïÑÔ±àд£¬Ö»ÓкÜÉÙµÄÒ»²¿·ÖÓûã±àÓïÑÔ±àд£¬Ê¹ÒÆÖ²¹¤×÷¼ò»¯¡£ ÏÂÃæ½éÉÜÈçºÎ½«mC/OS-IIÒÆÖ²µ½TIµÄ¸¡µãDSPоƬTMS320C32ÉÏ¡£ TMS320C32 DSPоƬ½éÉÜ TMS320C3xÊÇTI¹«Ë¾µÄ¸¡µãDSPоƬ¡£TMS320C32ÊÇÆäÖеÄÒ»¿î£¬Äܹ¤×÷ÔÚ60MHzµÄʱÖÓÆµÂÊÏ£¬Ö¸ÁîÔËÐÐËÙ¶È´ïµ½60 MFLOPS£¬ÊÇÐԼ۱Ⱥܸߵĸ¡µã´¦ÀíÆ÷£¬ÓÐ׏㷺µÄÓ¦ÓᣠTMS320C32оƬµÄ×é³É£º¸¡µãCPU¡¢512×Ö½ÚRAM¡¢2¸öDMAͨµÀ¡¢1¸ö´®¿Ú¡¢2¸ö¶¨Ê±Æ÷¡¢¹Ì»¯Òýµ¼³ÌÐò£¬ÁíÍ⻹ÓÐÈçϵÄͨÓüĴæÆ÷£º8¸ö40bitµÄ¼Ä´æÆ÷(R0~R7),¿ÉÒÔÓÃÀ´´æ·Å32bitµÄÕûÊý£¬Í¬Ê±Ò²¿ÉÒÔÓÃÀ´´æ·Å40bitµÄÀ©Õ¹¾«¶ÈµÄ¸¡µãÊý£»8¸ö32bitµÄ¸¨Öú¼Ä´æÆ÷(AR0~AR7)£¬ËüÃǵÄÖ÷Òª×÷ÓÃÊÇ´æ´¢µØÖ·¡¢²ÎÓë¸÷ÖÖģʽµÄѰַµÈ£¬µ±È»Ò²¿ÉÒÔ×÷Ϊһ°ãµÄ¼Ä´æÆ÷À´Ê¹Óã»×´Ì¬¼Ä´æÆ÷ST(º¬È«¾ÖÖжÏʹÄÜλ)¡¢¶ÑÕ»¼Ä´æÆ÷SP¡¢ÖжϱêÖ¾¼Ä´æÆ÷IF¡¢ÖжÏʹÄܼĴæÆ÷IE¡¢I/O±êÖ¾¼Ä´æÆ÷IOF¡¢Êý¾ÝÒ³Ö¸Õë¼Ä´æÆ÷DP(ÿҳÈÝÁ¿Îª64K)¡¢Ë÷Òý¼Ä´æÆ÷IR0¡¢IR1¡¢¿é¼Ä´æÆ÷BK¡¢Öظ´Ö´ÐмĴæÆ÷RS(¿éÆðʼµØÖ·)¡¢RE(¿éÖÕÖ¹µØÖ·)¡¢RC(ÖØ¸´´ÎÊý)¡£ ҪʵÏÖmC/OS-IIÏòTMS320C32µÄÒÆÖ²£¬ÐèÒªC3xµÄC±àÒëÆ÷Ö§³Ö£¬·ñÔòÎÞ´ÓÏÂÊÖ¡£ÎÒÃÇʹÓõÄÊÇTI¹«Ë¾µÄC±àÒëÆ÷Coder Composer V4.10.36¡£Õâ¸öC±àÒëÆ÷ÔÊÐíǶÈëÐлã±à£¬ÁíÍ⻹¾ßÓÐÇ¿´óµÄÓÅ»¯C±àÒëµÄ¹¦ÄÜ¡£ ÒÆÖ²ÖÐËùÐèÐ޸ĵÄÎļþ ºÍCPUÏà¹ØµÄÎļþÖ÷ÒªÓÐËĸö£ºCÓïÑÔÎļþOS_CPU_C32.C¡¢INCLUDES.HÍ·Îļþ¡¢Í·ÎļþOS_CPU_C32.HºÍ»ã±àÎļþOS_CPU_C32.ASM£¬ÎÒÃǵÄÖ÷ÒªÒÆÖ²¹¤×÷¾ÍÊÇÕë¶ÔÕâЩÎļþ×öһЩ±ä¶¯¡£ OS_CPU_C32.H OS_CPU_C32.H°üÀ¨typedef¡¢££define¶¨ÒåµÄCPUÏà¹ØÐÅÏ¢ÈçÏ£º #ifndef __OS_CPU_H__ #define __OS_CPU_H__ typedef unsigned char BOOLEAN£»/*²¼¶ûÁ¿*/ typedef unsigned char INT8U£»/* 8λÎÞ·ûºÅÊý*/ typedef signed char INT8S£» /* 8λÓзûºÅÊý*/ typedef unsigned int INT16U£»/* 16λÎÞ·ûºÅÊý*/ typedef signed int INT16S£» /* 16λÓзûºÅÊý*/ typedef unsigned long INT32U£»/* 32λÎÞ·ûºÅÊý*/ typedef signed long INT32S£» /* 32λÓзûºÅÊý*/ typedef float FP32£»/* 32λµ¥¾«¶È¸¡µãÊý */ typedef long double FP40; /*40λÀ©Õ¹¾«¶È¸¡µãÊý*/ typedef unsigned int OS_STK; /*¶ÑÕ»Èë¿Ú¿í¶Èλ32λ*/ #define OS_STK_GROWTH 0 /*¶ÑÕ»Óɵ͵ØÖ·Ïò¸ßµØÖ·Ôö³¤*/ #define OS_CRITICAL_METHOD 1 #if OS_CRITICAL_METHOD == 1 /*·½·¨Ò»*/ #define OS_ENTER_CRITICAL() asm (" AND 0DFFFH,ST ") /*¹ØÈ«¾ÖÖжÏ,½øÈëÁÙ½çÇø*/ #define OS_EXIT_CRITICAL() asm (" OR 02000H,ST ") /*¿ªÈ«¾ÖÖжÏ,Í˳öÁÙ½çÇø*/ #endif #if OS_CRITICAL_METHOD == 2 /*·½·¨¶þ*/ /*±£´æÖжϽûֹ״̬µ½¶ÑÕ»£¬¹ØÈ«¾ÖÖжÏ,½øÈëÁÙ½çÇø*/ #define OS_ENTER_CRITICAL() { asm(" PUSH ST")£» asm(" AND 0DFFFH,ST")£» } #define OS_EXIT_CRITICAL() asm("POP ST") /* »Ö¸´ÖжϽûֹ״̬*/ #endif #define OS_TASK_SW() asm("TRAP 27") /*ÓÃÓÚÈÎÎñÇл»µÄÈíÖжÏ*/ Êý¾ÝÀàÐÍ ÓÉÓÚ²»Í¬µÄ´¦ÀíÆ÷Óв»Í¬µÄ×Ö³¤£¬ËùÒÔmC/OS-IIµÄÒÆÖ²°üÀ¨ÁËһϵÁеÄÊý¾ÝÀàÐ͵͍Ò壬ÒÔÈ·±£Æä¿ÉÒÆÖ²ÐÔ¡£ÕâÀïÎÒÃǶ¨ÒåһЩC32ÒÔ¼°Code Composer¶¼ÄÜʶ±ð¡¢´¦ÀíµÄÊý¾ÝÀàÐÍ¡£ C32±¾ÖÊÉÏÖ»ÓÐ4ÖÖÊý¾ÝÀàÐÍ£º32λµÄÎÞ·ûºÅÕûÊý£º0_4294967295£»32λµÄÓзûºÅÕûÊý£º-2147483648_2147483647£»32λµÄ¸¡µãµ¥¾«¶È¸¡µãÊý£º5.877472e-39_3.4028235e38£»40λµÄÀ©Õ¹½ø¶È¸¡µãÊý5.87747175e-39_3.4028236684e38£»ÎÒÃÇÉÏÃæ¶¨ÒåµÄ8¡¢16λÊýʵ¼ÊÉ϶¼ÊÇ32λµÄ¡£ÁíÍâC32ÖУ¬¶ÑÕ»¶¼Êǰ´32λÊý¾ÝÀàÐͽøÐвÙ×÷µÄ£¬ËùÒÔ¶ÑÕ»Êý¾ÝÀàÐÍOS_STKÉêÃ÷Ϊ32λÎÞ·ûºÅÕûÊý£» ´úÂëµÄÁÙ½çÇø mC/OS-IIÔÚ½øÈëϵͳÁÙ½ç´úÂëÇøÖ®Ç°Òª¹ØÖжϣ¬±ÜÃâÁÙ½çÇø´úÂëÊܶàÈÎÎñ»òÖжϷþÎñ³ÌÐòµÄÆÆ»µ£¬µÈµ½ÁÙ½çÇø´úÂëÖ´ÐÐÍê±ÏÖ®ºó£¬¸ÃÔõô´¦ÀíÄØ£¿ÓÐÁ½ÖÖ·½°¸¿ÉÒÔ¹©Ñ¡Ôñ£º1)²»¹Ü¹ØÖжÏǰÖжÏʹÄÜÇé¿öÊÇʲôÑù×Ó£¬Ò»ÂÉ¿ªÖжϣ»2)»Ö¸´¹ØÖжÏǰÖжÏʹÄÜÇé¿ö£¬´ÓÒ»¶¨³Ì¶ÈÉϱ£Ö¤ÈÎÎñÖ´Ðл·¾³µÄÍêÕûÐÔ¡£ C32ÖУ¬×´Ì¬¼Ä´æÆ÷STµÄµÚ13λÊÇÈ«¾ÖÖжÏʹÄÜλGIE°Ñ¸ÃλÖÃ0£¬ÄÇô²»¹ÜʲôÖж϶¼²»È¥±»ÏìÓ¦£¬Ö±µ½ÁÙ½çÇø´úÂëÖ´ÐÐÍê±ÏΪֹ¡£(×¢£ºC32ûÓв»¿ÉÆÁ±ÎµÄÖжÏNMI£¬¶ÔÓÚ±ðµÄоƬÀ´Ëµ£¬Èç¹ûÓÐNMIµÄ»°£¬´¦Àí°ì·¨¾ÍÊÇÔÚÕâ¸öÖжϷþÎñ³ÌÐòISRÖжÔSTÖеÄGIEλ½øÐÐÅжϣ¬Èç¹ûÖÃ0£¬ÄÇôÕâ¸öISR¼òµ¥ÏìÓ¦Ò»ÏÂÕâ¸öÖжϣ¬´ó²¿·Ö´¦Àí¹¤×÷·Åµ½GIEÖÃ1ºóÂíÉÏÈ¥Ö´ÐÐ)¡£ºêOS_ENTER_CRITICAL()°ÑGIEλÖÃ0¶ø¹Ø±ÕËùÓÐÖжϡ£ ¶ÑÕ»Ôö³¤·½Ïò C32´¦ÀíÆ÷µÄ¶ÑÕ»ÊÇÓɵ͵ØÖ·Ïò¸ßµØÖ·µÝÔö£¬ËùÒÔOS_STK_GROWTHÓ¦¸ÃÉèÖÃΪ1£» ½øÈëÈÎÎñÇл»º¯ÊýOS_TASK_SW()µÄ¶¨Òå mC/OS-IIÖУ¬½øÈëÈÎÎñÇл»ÊÇÓú¯ÊýOS_TASK_SW()À´ÊµÏֵġ£Õâ¸öº¯Êýͨ¹ýÈíÖжÏÄ£ÄâÁËÒ»´ÎÖжϹý³Ì£¬ÔÚÕâ¸öÖжϷþÎñ³ÌÐòISRÖÐʵÏÖÈÎÎñµÄÇл»£¬Çл»µÄ¾ßÌåʵÏÖÔÚ½éÉÜÈÎÎñÇл»º¯ÊýOSCtxSw()ʱÏêϸ²ûÊö¡£C32¹²ÓÐ28¸öÈíÖжϿɹ©Ê¹Óã¬Í¨¹ýÖ´Ðлã±àÖ¸Áî TRAP 0¡¢TRAP 1¡¡TRAP27À´²úÉúÈíÖжϣ¬Ò²³ÆÎªTRAPÏÝÚåµ÷Óá£ÕâÀÎÒÃÇÑ¡Ôñ±àºÅΪ27µÄÈíÖжÏ×÷Ϊ½øÈëÈÎÎñÇл»µÄÖжϣº #define OS_TASK_SW() asm("TRAP 27") »¹Òª×¢ÒâµÄÒ»µãÊÇÕâ¸öÖжϷþÎñ³ÌÐòµÄÈë¿Ú±ØÐëÖ¸Ïòº¯ÊýOSCtxSw()¡£ INCLUDES.HÎļþ INCLUDES.HÊÇÖ÷ÒªµÄÍ·Îļþ£¬ÔÚ´ó¶àÊý.CÎļþµÄ¿ªÊ¼¶¼°üº¬INCLUDES.HÎļþ¡£²»Í¬´¦ÀíÆ÷¡¢²»Í¬±àÒëÆ÷¡¢²»Í¬¿âÎļþ£¬ÐèÒªÐÞ¸ÄINCLUDES.HÎļþ£¬É¾³ý²»Ê¹ÓõÄÍ·Îļþ£¬Ìí¼Ó×Ô¼ºµÄÍ·Îļþ¡£¶øÇÒ£¬Í·ÎļþÖ®¼äÓаüº¬¹ØÏµ¡¢Ìõ¼þ±àÒëµÄ£¬Ò»¶¨ÒªÅźÃËûÃÇÖ®¼äµÄÏȺó˳Ðò¡££¬INCLUDES.HÎļþÐÞ¸ÄÈçÏ£º #ifndef __INCLUDES_H__ #define __INCLUDES_H__ #include "OS_CFG.H" #include "OS_CPU.H" #include "mCOS_II.H" #include "C32.H" #endif ÆäÖÐC32.HÎļþ°üº¬ÁË4¸öÍ·Îļþ£º #include "Timerdef.H" #include "SerialPort.H" #include "Dma.H" #include "Bus.H" ·Ö±ð¶ÔC32µÄ¶¨Ê±Æ÷¡¢´®¿Ú¡¢DMAͨµÀ¡¢×ÜÏß±à³ÌÓõ½µÄÊý¾Ý½á¹¹½øÐж¨Òå¡£ OS_CPU_C32.ASMÎļþ ±¾À´£¬Õâ¸ö»ã±àÎļþÀïÃæÒªÊµÏÖ4¸öº¯Êý£º¶àÈÎÎñÆô¶¯º¯ÊýÖе÷ÓõÄOSStartHighRdy()¡¢ÖжÏÈÎÎñÇл»º¯ÊýOSIntCtxSw()¡¢ÈÎÎñÇл»º¯ÊýOSCtxSw()¡¢Ê±ÖÓ½ÚÅÄ·þÎñº¯ÊýOSTickISR()£»µ«ÊÇÕâÀïֻʵÏÖºóÁ½¸öº¯Êý¡£Ç°Á½¸öº¯ÊýÔÚOS_CPU_C32.CÖÐʵÏÖ¡£ ÈÎÎñÇл»º¯Êý£ºOSCtxSw() ¸Ãº¯ÊýÓÉÈÎÎñÇл»º¯ÊýOS_TASK_SW()½øÈ룬ÓëÖжϳÌÐòÖе÷ÓõÄOSIntCtxSw()²»Í¬¡£mC/OS-IIÖУ¬Èç¹ûÈÎÎñÖ´ÐÐÁËij¸öº¯Êý£¬Æä½á¹û¸Ä±äÁ˵±Ç°ÈÎÎñµÄ״̬(ÈçOSTaskSuspend()¡¢OSTimeDly())¡¢»òÕßÊǸıäÁ˱ðµÄÈÎÎñµÄ״̬(OSTaskResume()¡¢OSTimeDlyResume())¶¼ÒªÒýÆðеÄÈÎÎñµ÷¶È£ºOSSched()£»ÔÚÈÎÎñµ÷¶Èº¯ÊýÕÒ³öÐÂÈÎÎñ½«Æä¿ØÖÆ¿éµØÖ··Åµ½OSTCBHigRdyºó£¬Ö´ÐÐOS_TASK_SW()¡£ÈÎÎñÇл»Á÷³Ì£º1)Ó²¼þ½øÈëÖжϴ¦Àí£ºÈ«¾ÖÖжÏʹÄÜλÖÃ0¡¢·µ»ØµØÖ·Ñ¹Õ»¡£2)¼Ä´æÆ÷ֵѹÈ뵱ǰÈÎÎñ¶ÑÕ»£»3)Ð޸ĵ±Ç°ÈÎÎñ¿ØÖÆ¿éÖ¸ÕëOSTCBCurºÍµ±Ç°ÈÎÎñÓÅÏȼ¶OSPrioCur£»4)»Ö¸´ÈÎÎñ¶ÑÕ»ÖеÄÖµµ½¼Ä´æÆ÷ÖУ»5)Ö´Ðе±Ç°ÈÎÎñ£¬ÓÉRETIÖ¸ÁîÍê³É¡£ ʱÖÓ½ÚÅĺ¯Êý£ºOSTickISR() mC/OS-IIÖУ¬Ê±ÖÓ½ÚÅÄÖжÏÊÇÒ»¸ö·Ç³£ÖØÒªµÄÖжϣ¬ÒòΪÕû¸ö²Ù×÷ϵͳµÄ»î¶¯¶¼Êܵ½ËüµÄ¼¤Àø¡£ OSTickISR()µÄÖ´ÐÐÁ÷³Ì£º1)Ó²¼þ½øÈëÖжϴ¦Àí£¬Í¬ÉÏ£»2)±£»¤ÉÏÏÂÎÄ»·¾³£»3)µ÷ÓÃOSIntEnter()£¬¼Ç¼ÖжÏǶÌײãÊý£»4)µ÷ÓÃOSTimeTick()£¬¼ì²é´¦Àí¸÷¸öÈÎÎñµÄÑÓʱ£¬²¢¸ù¾ÝÇé¿öÐ޸ľÍÐ÷ÈÎÎñ±í£»5)µ÷ÓÃOSIntExit()£¬¼ì²é¾ÍÐ÷ÈÎÎñ±í£¬¿´ÊÇ·ñÓбȵ±Ç°ÈÎÎñÓÅÏȼ¶¸ü¸ßµÄÈÎÎñ¾ÍÐ÷£¬Èç¹ûÓУ¬Ôò½øÐе÷¶È£»Èç¹ûûÓУ¬OSIntExit()·µ»Ø²¢»Ö¸´2)Ëù±£´æµÄÉÏÏÂÎÄ»·¾³£¬²¢Ö´ÐÐRETI»Øµ½±»ÖжϵÄÄǸöÈÎÎñÀï¼ÌÐøÔËÐУ»Èç¹ûÓУ¬ÄÇôOSIntExit()¾Í²»·µ»Øµ½ÕâÀ¾ßÌåµÄÇé¿öºóÃæ½éÉÜOSIntExit()ʱ¾ßÌå²ûÊö¡£ OS_CPU_C32.CÎļþ Õâ¸öÎļþÀÖ÷ҪʵÏÖ3¸öº¯Êý£º¶ÑÕ»³õʼ»¯º¯ÊýOSTaskInit()¡¢ÖжÏÈÎÎñÇл»º¯ÊýOSIntCtxSw()¡¢¶àÈÎÎñÆô¶¯º¯ÊýÖе÷ÓõÄOSStartHighRdy()£¬ÁíÍ⻹ÓÐ5¸öÀ©Õ¹Íâ¹Òº¯Êý£º void OSTaskCreateHook(OS_TCB ptcb){} /*ÈÎÎñ´´½¨À©Õ¹Íâ¹Òº¯Êý*/ void OSTaskSwHook(void){} /*ÈÎÎñÇл»À©Õ¹Íâ¹Òº¯Êý*/ void OSTaskDelHook(OS_TCB *ptcb){} /*ÈÎÎñɾ³ýÀ©Õ¹Íâ¹Òº¯Êý*/ void OSTaskStatHook(void){} /*ͳ¼ÆÈÎÎñÀ©Õ¹Íâ¹Òº¯Êý*/ void OSTimeTickHook(void){} /*ʱÖÓ½ÚÅÄ´´½¨À©Õ¹Íâ¹Òº¯Êý*/ Õ⼸¸öº¯ÊýÎÒÃÇÕâÀï¶¼´¦ÀíΪ¿Õº¯Êý£¬¶øÇÒ»¹¿ÉÒÔͨ¹ýÔÚÎļþOS_CFG.HÖÐÉèÖÃOS_CPU_HOOKS_ENΪ0¶ø²»Ê¹ÓÃÕâЩº¯Êý¡£ÎÒÃÇÖ÷ÒªÀ´ÌÖÂÛǰÈý¸öº¯Êý£º ¶ÑÕ»³õʼ»¯º¯ÊýOSTaskInit() ¶ÑÕ»³õʼ»¯º¯ÊýOSTaskInit()ÊÇÓÉÈÎÎñ´´½¨º¯ÊýOSTaskCreate()»òOSTaskCreateExt()À´µ÷Óã¬ÓÃÀ´³õʼ»¯ÈÎÎñ¶ÑÕ»¡£³õʼ»¯ºóµÄ¶ÑÕ»±£´æ×ÅÈÎÎñµÚÒ»´ÎÖ´ÐÐʱµÄÉÏÏÂÎÄ»·¾³£¬ËüºÍÖжϺóµÄ¶ÑÕ»ÉñËÆ£¡Õâ¸öº¯Êý×î¹Ø¼üµÄÁ½¸ö²ÎÊý¾ÍÊÇÈÎÎñµÄÆðʼµØÖ·void(* task)(void *pd)ºÍÈÎÎñʹÓöÑÕ»µÄÕ»¶¥Ö¸Õëvoid *ptos£»ÐèҪעÒâµÄÊÇ£¬ÈÎÎñµÚÒ»´ÎÖ´ÐÐʱµÄijЩȫ¾Ö¼Ä´æÆ÷µÄÖµÓÐÌØÊâÒªÇó£º1)״̬¼Ä´æÆ÷STµÄ³õʼֵ±ØÐë±£Ö¤ÖжÏÈ«¾ÖʹÄÜλGIEΪ1£¬´Ó¶ø±£Ö¤Ê±ÖÓ½ÚÅÄÖжϲ»»á³¤Ê±¼ä±»ÆÁ±Î£¬ÕâÀïÎÒÑ¡Ôñ³õֵΪ0x2000£»2)Ò³Ö¸Õë¼Ä´æÆ÷DPµÄ³õʼֵ£ºÈç¹ûÄãÑ¡ÔñSmall-Memoryģʽ½øÐбàÒëʱ£¬ÄÇôËüµÄ³õʼֵӦ¸ÃºÍ½¨Á¢C»·¾³Ê±¶ÔDPµÄ³õʼ»¯ÖµÒ»Ñù£»·ñÔò¾Í²»Òª¶ÔÕâ¸öDP¼Ä´æÆ÷½øÐÐÈκα£»¤´¦Àí£¬ÕâÑùÒ²¿ÉÒԵ쬲»¹ýÕâÑùµÄ»°£¬±ðµÄº¯ÊýÒ²¾ÍÒª×öÏàÓ¦µÄ¸Ä¶¯ÁË£»Èç¹ûÑ¡ÔñÁËLarge-MemoryģʽµÄ»°£¬ÄÇôÕâ¸öÖµµÄ³õʼ»¯¾Í¿ÉÒÔ²»½øÐÐÁË£¬ÒòΪ±àÒëϵͳÔÚ±àÒëʱ»á×Ô¶¯²åÈë¸üÐÂDPµÄÖ¸ÁîµÄ£» ÖжÏÈÎÎñ¼¶Çл»º¯ÊýOSIntCtxSw() mC/OS-IIÖУ¬ÖжϵIJúÉú¿ÉÄÜ»áÒýÆðÈÎÎñµÄÇл»£¬ÔÚÖжϷþÎñ³ÌÐòµÄ×îºó»áµ÷ÓÃOSIntExit()¼ì²éÈÎÎñ¾ÍÐ÷״̬¡£Èç¹ûÐèÒª½øÐÐÈÎÎñÇл»£¬½«µ÷ÓÃOSIntCtxSw()¡£ËùÒÔOSIntCtxSw()ÓÖ³ÆÎªÖжϼ¶µÄÈÎÎñÇл»º¯Êý¡£ÐèҪעÒâµÄÊÇ£¬ÈκÎÖжϷþÎñ³ÌÐòISRÇ°Ãæ¶¼ÒªÏñʱÖÓ½ÚÅĺ¯Êý£ºOSTickISR()Á÷³ÌµÄµÚ2²½ÄÇÑù±£´æÉÏÏÂÎÄ»·¾³¡£OSIntCtxSw()ºÍOSCtxSw()µÄºó°ë²¿·Ö¼¸ºõÏàͬ£¬²»Í¬Ö®´¦ÊÇ£º¶Ôµ±Ç°ÈÎÎñµÄ¶ÑÕ»Ö¸Õë½øÐе÷Õû£¡Æä´úÂëÈçÏ£º asm(" SUBI 5,SP ")£» asm(" LDI @_OSTCBCur,AR0 ")£» asm(" STI SP,*AR0 ")£» ÕâÀïÎÒÃǰѶÑÕ»Ö¸ÕëSP¼õÈ¥5£¬¾ÍÊǵ÷ÕûµÄ½á¹û¡£ ÏÂÃæÎÒÃÇÀ´·ÖÎöÒ»ÏÂÕâ¸ö¡°5¡±ÊÇÔõôµÃÀ´µÄ(ÎÒÃÇÕë¶ÔʱÖÓ½ÚÅÄÖжÏISRÀ´½øÐÐ˵Ã÷)£º ÈÎÎñµ÷Óú¯ÊýOSIntExit()֮ǰʱ£¬µ±Ç°ÈÎÎñ¶ÑÕ»µÄÇé¿öÈçͼ1Ëùʾ£»µ÷ÓÃOSIntExitº¯Êýºó£¬µ±Ç°ÈÎÎñ¶ÑÕ»µÄÇé¿öÈçͼ2Ëùʾ£¬ÎªÊ²Ã´»áÕâÑùÄØ£¿ÎÒÃÇ¿ÉÒÔ¿´¿´OSIntExit()º¯Êý±àÒëºóµÄ»ã±àÎļþ¾ÍÃ÷°×ÁË£¬Õâ¸öº¯ÊýÈë¿ÚµÄµØ·½ÓÐÈçϼ¸ÌõÓï¾ä£º _OSIntExit: push fp ldiu sp,fp push ar4 È»ºó¸Ãº¯ÊýÓÖµ÷ÓÃÖжÏÇл»º¯ÊýOSIntCtxSw()£¬Õâʱµ±Ç°ÈÎÎñ¶ÑÕ»µÄµÄÇé¿öÈçͼ3Ëùʾ£»OSIntCtxSw()±àÒëºóµÄ»ã±àÎļþÈë¿ÚµÄµØ·½ÓÐÈçϼ¸ÌõÓï¾ä£º _OSIntCtxSw: push fp Óɴ˿ɼû£¬µ±±ðµÄÈÎÎñÐèÒªµ÷¶Èʱ£¬µ±Ç°ÈÎÎñÐèÒª°Ñ×Ô¼ºµÄ¶ÑÕ»Ö¸ÕëSPµ÷Õûµ½µ÷ÓÃOSIntExit()֮ǰµÄÖµ£¬´ÓͼÉÏ¿ÉÒÔ¿´³öÖ»Òª°Ñµ±Ç°ÈÎÎñµÄ¶ÑÕ»Ö¸ÕëµÄÖµ¼õÈ¥¡°5¡±±ã¿É¡£ ¶àÈÎÎñÆô¶¯º¯ÊýÖе÷ÓõÄOSStartHighRdy() Õâ¸öº¯ÊýÖ»ÔÚ¶àÈÎÎñÆô¶¯º¯ÊýÖе÷ÓÃÒ»´Î£¬Ö÷ÒªÓÃÀ´°Ñ¶àÈÎÎñÆô¶¯Ê±ÓÅÏȼ¶×î¸ßµÄ¾ÍÐ÷ÈÎÎñµÄÉÏÏÂÎÄ»·¾³´Ó¶ÑÕ»»Ö¸´¹ýÀ´¡£mC/OS-IIϵͳÆô¶¯Ê±ÖÁÉÙ´´½¨ÁËÒ»¸öÈÎÎñ__¿ÕÏÐÈÎÎñ£¬Êµ¼ÊÓ¦Óõ±È»»¹Òª´´½¨±ðµÄÓû§ÈÎÎñ¡£OSStart()Ê×ÏÈ´ÓÕâЩÈÎÎñÖвéÕÒ³öÓÅÏȼ¶×î¸ßµÄ¾ÍÐ÷ÈÎÎñ£¬²¢°ÑËüµÄÈÎÎñ¿ØÖÆ¿éµÄµØÖ·¸³¸øOSTCBHighRdy£¬È»ºóµ÷ÓÃOSStartHighRdy()À´ÔËÐÐOSTCBHighRdyÖ¸ÏòµÄÄǸöÈÎÎñ¿ØÖÆ¿éËù¶ÔÓ¦µÄÈÎÎñ¡£ÆäÁ÷³ÌÊÇ£º1)¸Ãº¯ÊýµÄ·µ»ØµØÖ·Ñ¹Èë¶ÑÕ»£¬×¢Ò⣬ÕâÀïÌáµ½µÄ¶ÑÕ»ÊÇmC/OS-IIϵͳʹÓõĶÑÕ»£¬¶øÓëÆäËûÈκÎÈÎÎñʹÓõĶÑջûÓÐÈκιØÏµ£¬¶øÇÒÕâ¸öµØÖ·Ñ¹²»Ñ¹Õ»ÒâÒåÒѾ²»´ó£¬ÒòΪ²»¿ÉÄÜÔÙ´Ó·µ»ØÕâÀï·µ»Ø»ØÈ¥£»2)±äÁ¿OSRunning¸³ÖµÎªTrue£¬±êÖ¾¶àÈÎÎñÒѾÆô¶¯£»3)´ÓÈÎÎñ³õʼ»¯¹ýµÄ¶ÑÕ»Öлָ´ÉÏÏÂÎÄ»·¾³£¬´úÂëºÍÉÏÃæµÄÀ×ͬ£»4)Ö´ÐÐRETIÖ¸ÁîÔËÐÐÕâ¸öÈÎÎñ£» Á½µã²¹³ä˵Ã÷ ±àÒëÆ÷µÄ±àÒëÑ¡Ïî ÔÚÒÆÖ²¹ý³ÌÖУ¬³ýÁËÒªÊìϤmC/OS-IIÄÚºËÔÀíºÍÄ¿±êоƬ֮Í⣬»¹ÒªÊìϤC±àÒëÆ÷Ìṩ±àÒëÑ¡ÏîµÄʹÓá£Ê¹Óò»µ±£¬»á¸øÒÆÖ²´øÀ´´óÂé·³¡£ÉÏÃæÔÚ½éÉܶÑÕ»³õʼ»¯º¯ÊýÒ²Ìá¼°µ½ÓйØDP¼Ä´æÆ÷µÄ´¦ÀíÎÊÌâÉÏ£¬¾ÍÊÇÉæ¼°µ½±àÒëÑ¡ÏîµÄÑ¡Ôñ£ºÊÇÑ¡ÓÃSmall-Memory»¹ÊÇLarge-Memoryģʽ£¬Õâ¸öÈ¡¾öÓÚ±àÒëÑ¡Ïî-mbµÄ´ò¿ªºÍ¹Ø±Õ¡£ ÖжϺ¯ÊýµÄ±àд ÔÚ·ÖÎöº¯ÊýOSIntCtxSw()ʱ£¬ÎÒÃÇÌáµ½·ÖÎöµÄ½á¹ûÊÇÕë¶ÔʱÖÓÖжϷþÎñº¯ÊýµÃ³öµÄ¡£´ó¼ÒÓ¦¸Ã×¢Òâµ½Õâ¸öº¯ÊýÊÇ»ã±àÓïÑÔдµÄ£¬ÄÇôÎÒÃÇд±ðµÄÖжϴ¦Àí³ÌÐòʱ£¬Èç¹ûÓÃCÓïÑÔÀ´Ð´µÄ»°£¬Òª²»Òª×¢ÒâÐ©Ê²Ã´ÄØ£¿»Ø´ðÊǿ϶¨µÄ¡£ÒòΪ±àÒëÆ÷ÔÚ´¦ÀíCÓïÑÔдµÄÖжϷþÎñº¯Êýʱ»á×÷³öÒ»Ð©ÌØÊâµÄ´¦Àí£ºÔÚÕâ¸öISRÈë¿Ú´¦²åÈëѹջָÁ°Ñ²¿·ÖÈ«¾Ö¼Ä´æÆ÷µÄֵѹÈë¶ÑÕ»£¬¾ßÌåÄÄЩ£¬Òòº¯ÊýµÄ²»Í¬¶øÓÐËù²»Í¬¡£Õâ¾Í¸ÉÈÅÁËÎÒÃDZ£´æÉÏÏÂÎÄ»·¾³µÄ¹¤×÷£¬Èç¹û²»½øÐд¦Àí£¬ÈÎÎñµ÷¶Èʱ»á³öÏÖÄÑÒÔÏëÏóµÄÎÊÌâ¡£½â¾öÕâ¸öÎÊÌâµÄ°ì·¨¾ÍÊÇÒªÈÃC±àÒëÆ÷ÈÏΪÕâ¸öÖжϷþÎñº¯ÊýÊÇÒ»°ãµÄº¯Êý£¬ÄÇôËü¾Í²»»áÔÚº¯ÊýÈë¿Ú´¦²åÈëһϵÁеÄѹջָÁî¡£C±àÒëÆ÷Code Composer¹æ¶¨£¬·²ÊǺ¯ÊýÃûΪc_intnm(ÆäÖÐn¡¢mÊÇСÓÚ9ÕýÕûÊý)µÄº¯Êý¶¼ÊÇÖжϺ¯Êý£¬ÔÚ±àÒëÕâЩº¯Êýʱ¶¼×÷³öÌØÊâµÄ´¦Àí£¬Îª´Ë£¬ÎÒÃDZÜÃâΪÖжϴ¦Àíº¯ÊýÈ¡ÕâÑùµÄÃû×־ͿÉÒÔÁË¡£ µ«ÊÇ£¬±àÒëÔÚ´¦ÀíÒ»°ãº¯Êýʱ»¹ÊÇÒª×öÒ»¶¨µÄ´¦ÀíµÄ£¬Æ©È磺 push fp ldiu sp,fp push ar4 Ϊ´Ë£¬ÎÒÃÇ×Ðϸ·ÖÎö±àÒëÆ÷±àÒëÉú³ÉµÄ»ã±à´úÂ룬²¢¶Ô¶ÑÕ»×÷ÏàÓ¦µÄµ÷Õû¡£È»ºóÔÚº¯Êý½áÊøµÄµØ·½Ç¶Èëasm(" RETI")£»Óï¾ä½áÊø¡£ÕâÑùÖжϳÌÐò¾Í¿ÉÒÔÕýÈ·Ö´ÐС£ ËüµÄ¿ò¼ÜÈçÏ£º void Int0ISR(void) { asm(" SUBI N,SP") /*Õâ¸öNµÄÖµÒª¿´¾ßÌåµÄ³ÌÐòÀ´¶¨£¬Ò»°ãµÈÓÚ1»ò2*/ ÿÿÿÿ asm(" RETI") /*ÓÃ×Ô¼ºµÄ·µ»ØÖ¸Áî·µ»Ø*/ } ½áÓï ÔÚÒÆÖ²ºÍÔËÐеÄmC/OS-II¹ý³ÌÖУ¬Ò²Ðí»¹»áÓÐеÄÎÊÌâ³öÏÖ£¬Óöµ½ÎÊÌâʱҪ×Ðϸ·ÖÎö£¬·ÖÎö¶ÑÕ»µÄʹÓá¢ÖжϵÄÓ°Ï죬·ÖÎö±àÒëÆ÷Éú³ÉµÄ»ã±à´úÂ룬¾Í¿ÉÒÔ½â¾öÕâЩÎÊÌ⣬´Ó¶øÊµÏÖmC/OS-IIµÄ¿É¿¿ÔËÐС£¡ö ²Î¿¼ÎÄÏ× 1. ¡®mC/OS-II¡ª¡ªÔ´Â빫¿ªµÄʵʱǶÈëʽ²Ù×÷ϵͳ¡¯,ÉÛ±´±´Ò룬ÖйúµçÁ¦³ö°æÉç 2001. 2. ¡®TMS320C3x/4x Optimizing C Compiler User¡¯s Guide¡¯ TEXAS INSTRUMENTS. 3. ¡®µ¥Æ¬»úÓëǶÈëʽϵͳӦÓá¯ÔÓÖ¾£¬2001 NO.12. |
|||||
| »¶Óµã»÷½øÈ룺TIµÂÖÝÖÐÎÄÍø (¹úÄÚΨһÕë¶ÔTIÓ¦ÓõÄÖÐÎļ¼ÊõÍøÕ¾) ÎÄÕ¼È룺admin ÔðÈα༣ºadmin | |||||
| ¡¾·¢±íÆÀÂÛ¡¿¡¾¼ÓÈëÊղء¿¡¾¸æËߺÃÓÑ¡¿¡¾´òÓ¡´ËÎÄ¡¿¡¾¹Ø±Õ´°¿Ú¡¿ | |||||
| ×îÐÂÈȵã | ×îÐÂÍÆ¼ö | Ïà¹ØÎÄÕ | ||
| ûÓÐÏà¹ØÎÄÕ |
| ¡¡¡¡ÍøÓÑÆÀÂÛ£º£¨Ö»ÏÔʾ×îÐÂ10Ìõ¡£ÆÀÂÛÄÚÈÝÖ»´ú±íÍøÓѹ۵㣬Óë±¾Õ¾Á¢³¡Î޹أ¡£© |
| | ÉèΪÊ×Ò³ | ¼ÓÈëÊÕ²Ø | ÁªÏµÕ¾³¤ | ÓÑÇéÁ´½Ó | °æÈ¨ÉêÃ÷ | ÍøÕ¾¹«¸æ | ¹ÜÀíµÇ¼ | | |||
|
|