void PC_DOSSaveReturn (void)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
PC_ExitFlag = FALSE; /*还不想退出到 DOS 环境 */
OSTickDOSCtr = 1; /*初始化 DOS tick 计数器*/
PC_TickISR = PC_VectGet(VECT_TICK); /*取得 MS-DOS's tick 向量并保存在PC_TickISR*/
PC_VectSet(VECT_DOS_CHAIN, PC_TickISR); /*存 MS-DOS's tick 到0x81号中断向量处*/
setjmp(PC_JumpBuf); /*设定恢复点,PC_JumpBuf 保存此时的上下文*/
if (PC_ExitFlag == TRUE) { /*是否要返回 DOS */
OS_ENTER_CRITICAL();
PC_SetTickRate(18); /*恢复 DOS 默认的节拍频率18.2 Hz*/
OS_EXIT_CRITICAL();
PC_VectSet(VECT_TICK, PC_TickISR); /*还原 DOS's tick 向量*/
PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /*清屏*/
exit(0); /* Return to DOS */
}
}
void PC_DOSReturn (void)
{
PC_ExitFlag = TRUE; /*要返回 DOS 了*/
longjmp(PC_JumpBuf, 1); /*跳回还原点处(由 segjmp 指定)*/
}
int setjmp( jmp_buf envbuf ); |
void longjmp( jmp_buf envbuf, int status ); |
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) | Powered by Discuz! X3.2 |