¡õ ·±ÌåÖÐÎÄ
¡õ ¸ß¼¶ËÑË÷
 
Ê×Ò³ | µç×Ó¼¼ÊõÓ¦Óà | ÐÐÒµ×îж¯Ì¬ | ÐÐÒµ×îвúÆ· | Èí¼þ×ÊÁÏÏÂÔØ | µç·ͼֽÐÀÉÍ | ²©¿ÍÎÄÕ¾«Ñ¡ | µç×Ó¾«Æ·ÂÛ̳ | µç×Ó¼¼ÊõÌù°É

µ±Ç°Î»ÖãºÊ×Ò³ >> µç×Ó¼¼ÊõÓ¦Óà >> ÆäËû-------Ó¦Óà >> ¦ÌC/OS IIÕë¶ÔTMS320C32µÄÒÆÖ²
¦ÌC/OS IIÕë¶ÔTMS320C32µÄÒÆÖ²
×÷ÕߣºÇ®Ó   À´Ô´£ºµç×Ó²úÆ·ÊÀ½ç ·¢±íʱ¼ä£º2007-02-14  ×ֺţº´ó ÖРС
Õª Òª: ǶÈëʽ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.

£¡×¢Ò⣺Èç¹ûÄú·¢ÏÖ´ËÎÄÕ³öÏÖÓ°ÏìÄúµÄÔĶÁµÄ×´¿ö£¬Çë´Óä¯ÀÀÆ÷µØÖ·À¸Àï¸´ÖÆ±¾ÎĵÄÁ´½Óµ½ÁôÑÔ±¾±¨¸æ¸øÕ¾³¤½â¾ö£¡
  • ÉÏһƪ£º ËÄ¿ª¹Ø½µÑ¹-ÉýѹÐÍ¿ØÖÆÆ÷²ÉÓõ¥¸öµç¸ÐÆ÷ʵÏÖÁ˼«¸ßµÄЧÂÊ
  • ÏÂһƪ£º IBM²ÉÓÃ×Ô³ÉÐβÄÁϾøÔµ оƬÌáËÙÈý·ÖÖ®Ò»

  • >> ÁªÏµÎÒÃÇÇë¸øÎÒÃÇÁôÑÔ¡¤ÁôÑÔ±¾
    ±¾Õ¾ËùÓÐÌṩµÄÐÅÏ¢Èí¼þ×ÊÁϾùÀ´×ÔÍøÂç,°æÈ¨¼°Öø×÷Ȩ¹éÔ­×÷ÕßËùÓÐ,Èç¹ûÎÞÒâÖÐÇÖ·¸ÁËÄúµÄÏà¹ØÈ¨Àû»ò´¥¼°·¨ÂÉ·¨¹æ,Çë¸øÎÒÃÇÁôÑÔ, ÎÒÃǽ«ÔÚ24СʱÄÚɾ³ý¡£
      ÕãICP±¸05071687ºÅ  µç×Ó¼¼Êõ¾«Æ·Íø