RTX-51CONF-TNY.A51

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

RTX-51TINYHardware-Timer;==========================;;WiththefollowingEQUstatementstheinitializationoftheRTX-51TINY;Hardware-Timercanbedefined(RTX-51TINYusesthe8051Timer0for;controllingRTX-51softwaretimers).;;Definetheregisterbankusedforthetimerinterrupt.INT_REGBANKEQU1;defaultisRegisterbank1;;DefineHardware-Timerticktimein8051machinecycles.INT_CLOCKEQU10000;defaultis10000cycles;;DefineRound-RobinTimeoutinHardware-Timerticks.TIMESHARINGEQU5;defaultis5Hardware-Timerticks.;;0disablesRound-RobinTaskSwitching;;LongUserInterruptRoutines:setto1ifyourapplicationcontains;userinterruptfunctionsthatmaytakelongerthanahardwaretimer;intervalforexecution.LONG_USR_INTREQU0;0userinterruptsexecutefast.;;1userinterruptstakelongexecutiontimes.使用Timer0,提供定时中断。LONG_USR_INTR的作用(引子使用手册):TheLONG_USR_INTRconfigurationoptionmaybesettoavalueof1ifyourapplicationcontainsaninterruptfunctionthatexecuteslongerthantheRTX51TinySystemClockTimerInterval.Yourapplicationmayrequirethisoptionifitspendsmostofitstimeexecutinghigh-priorityinterruptroutines.恩,好像是说:如果我的中断处理时间超过了os的定时时间,那么我的中断处理会被os定时中断打断,那么就会有麻烦。;------------------------------------------------------------------------------;;USERCODEFOR8051HARDWARETIMERINTERRUPT;===========================================;;Thefollowingmacrodefinesthecodeexecutedonahardwaretimerinterrupt.;;Defineinstructionsexecutedonahardwaretimerinterrupt.HW_TIMER_CODEMACRO;EmptyMacrobydefaultRETIENDM这个东西手册说的很清楚:HW_TIMER_CODEisamacrothatinstructscodetoexecuteattheendoftheRTX51TinyTimerTickInterrupt.;------------------------------------------------------------------------------;;CODEBANKINGSUPPORT;====================;;ThefollowingEQUstatementcontrolsthecodebankingsupportforRTX51TINY.;;EnableordisablecodebankingsupportCODE_BANKINGEQU0;0(default)applicationusesnocodebanking;;1applicationusescodebanking我想我可以先不管这个。;------------------------------------------------------------------------------;;RTX-51TINYStackSpace;=======================;;ThefollowingEQUstatementsdefinesthesizeoftheinternalRAMused;forstackareaandtheminimumfreespaceonthestack.Amacrodefines;thecodeexecutedwhenthereisthereisnotenoughfreestackonthe;CPUstack.;;DefinethehighestRAMaddressusedforCPUstackRAMTOPEQU0FFH;defaultisaddress(256-1);FREE_STACKEQU20;defaultis20bytesfreespaceonstack;;thevalue0disablesstackchecking;STACK_ERRORMACROCLREA;disableinterruptsSJMP$;endlessloopifstackspaceisexhaustedENDM每个任务20字节的堆栈空间。这些堆栈在128字节的片内ram中。;------------------------------------------------------------------------------;;8051CPUIDLECODE;==================;;Many8051devicesprovideanIDLEMODEthatreducespowerconsumptionand;EMC.Thefollowingmacrodefinesthecodeexecutedwhenthereisno;readytaskinthesystem.ThecodemustsettheCPUintoanIDLEMODE;thatstopsinstructionexecutionuntilan8051hardwareinterruptoccurs.;;DisableorEnableCPU_IDLECODECPU_IDLE_CODEEQU0;0CPU_IDLEMACROisnotinserted;1CPU_IDLEMACROisexecutedPCONDATA087H;PowerControlSFRonmost8051devices;StopCPUexecutionuntilhardwareinterrupt;executedwhenthereisno;activetaskinthesystem.CPU_IDLEMACROORLPCON,#1;set8051CPUtoIDLEENDM空闲任务。;SFRSymbolsPSWDATA0D0HACCDATA0E0HBDATA0F0HSPDATA81HDPLDATA82HDPHDATA83HTCONDATA88HTMODDATA89HTL0DATA8AHTL1DATA8BHTH0DATA8CHTH1DATA8DHIEDATA0A8H;TCONTF1BIT8FHTR1BIT8EHTF0BIT8DHTR0BIT8CHIE1BIT8BHIT1BIT8AHIE0BIT89HIT0BIT88H;IEEABIT0AFHESBIT0ACHET1BIT0ABHEX1BIT0AAHET0BIT0A9HEX0BIT0A8H定义sfr和bit。;CheckConfigurationValuesNAME?RTX51_TINY_KERNALPUBLIC?RTX_CURRENTTASK;当前任务指针PUBLIC?RTX_RAMTOP;ram的边界PUBLICos_switch_task;调度函数PUBLIC?RTX?SET_ISR;???EXTRNNUMBER(?RTX_MAXTASKN);maxTaskNumber?RTX_RAMTOPEQURAMTOP?RTX_CLOCKEQU-INT_CLOCK?RTX_REGISTERBANKEQUINT_REGBANK*8DSEGAT?RTX_REGISTERBANK;这个绝对地址正好是8(如果INT_REGBANK=1,由此可知INT_REGBANK就是一个寄存器组的选择子)DS2;temporaryspace预留的2字节对应R0和R1?RTX_SAVEACC:DS1;R2saveaccEQUR2;foraccessininterruptserviceroutine?RTX_SAVEPSW:DS1;R3savepswEQUR3;foraccessininterruptserviceroutine?RTX_CURRENTTASK:DS1;R4currenttaskEQUR4;foraccessininterruptserviceroutine;这里定义的?RTX_SAVEACC,?RTX_SAVEPSW,?RTX_CURRENTTASK都是绝对地址形式!他们对应第INT_REGBANK组寄存器的R2,R3,R4IF(TIMESHARING0)?RTX_ROBINTIME:DS1robintimeEQUR5;foraccessininterruptserviceroutineENDIF;R5用来放时间片的长度IF(CODE_BANKING0);不理他EXTRNDATA(?B_CURRENTBANK)EXTRNCODE(?B_RESTORE_BANK)ENDIF下面是至关重要的3张表:任务代码表,任务堆栈表,任务状态表;------------------------------------------------;TableofTaskEntryPointers;------------------------------------------------PUBLIC?RTX_TASKENTRY?RTX?TASKENT?SSEGMENTCODERSEG?RTX?TASKENT?S?RTX_TASKENTRY:DS2;任务代码指针2字节;------------------------------------------------;TableofStackPointersforeachtask;------------------------------------------------PUBLIC?RTX_TASKSP?RTX?TASKSP?SSEGMENTIDATARSEG?RTX?TASKSP?S?RTX_TASKSP:DS1;任务堆栈的栈底指针1字节;------------------------------------------------;TableofTaskTimer/StatePointers;------------------------------------------------PUBLIC?RTX_TASKSTATUS?RTX?TASKSTATE?SSEGMENTIDATARSEG?RTX?TASKSTATE?S?RTX_TASKSTATUS:TimerVal:DS1;TaskTimer(SoftwareTimerforeachtask)TaskState:DS1;TaskStatus(stateofeachTask);DefinitionsforBitsinTaskState;TaskState.0=Wai

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功