ÍøÕ¾¹«¸æÁбí

  Ã»Óй«¸æ

¼ÓÈëÊÕ²Ø
ÉèΪÊ×Ò³
ÁªÏµÕ¾³¤
ÄúÏÖÔÚµÄλÖ㺠61ICÖйúµç×ÓÔÚÏß >> DSP >> C3000ÎÄÕ >> VC30ϵÁР>> ÎÄÕÂÕýÎÄ
  ¦ÌC/OS IIÕë¶ÔTMS320C32µÄÒÆÖ²    ÈÈ     ¡ï¡ï¡ï ¡¾×ÖÌ壺С ´ó¡¿
¦ÌC/OS IIÕë¶ÔTMS320C32µÄÒÆÖ²
×÷Õߣº»¥ÁªÍø    ÎÄÕÂÀ´Ô´£º±¾Õ¾Ô­´´    µã»÷Êý£º    ¸üÐÂʱ¼ä£º2007-1-22    
Õª  Òª: ǶÈëʽOS-mC/OS-IIÊÇΪÊý²»¶àµÄ¼¸¸öÔ´´úÂ빫¿ªµÄǶÈëʽ²Ù×÷ϵͳ֮һ£¬¶ÔËüµÄѧϰ¡¢·ÖÎöÄܹ»¸øÎÒÃÇ´øÀ´ºÜ¶à¸ÅÄîÉϵÄÁ˽âºÍÉîÈë¡£ÁíÍâmC/OS-II¿ÉÒÔÒÆÖ²µ½ºÜ¶àCPUоƬ£¬±¾ÎĽéÉÜÁ˰ÑmC/OS-IIÒÆÖµµ½TI¹«Ë¾¸¡µãDSPоƬµÄ¹ý³ÌµÄһЩϸ½ÚÎÊÌâ¡£
¹Ø¼ü´Ê: ǶÈëʽ²Ù×÷ϵͳ£»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Ìõ¡£ÆÀÂÛÄÚÈÝÖ»´ú±íÍøÓѹ۵㣬Óë±¾Õ¾Á¢³¡Î޹أ¡£©
    Õ¾³¤£º61IC ÏæICP±¸05002478ºÅ