亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? os_cpu_c.c

?? 此源碼為UCOS在WIN32環境下的移植版本
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
*********************************************************************************************************
*                                                uC/OS-II
*                                The Real-Time Kernel (by Jean J. Labrosse)
*
*                                             WIN32 PORT
*
*                          (c) Copyright 2004-... Werner.Zimmermann@fht-esslingen.de
*                                           All Rights Reserved
*
* File : OS_CPU_C.C
* By   : Werner Zimmermann
*
* Changes:  1.40 Fixed a bug in OS_log(), thanks to Hu JW. 13 Jul 2004
*	    1.50 Substituted DWORD by INT32U, BOOL by BOOLEAN
*	    1.60 Changes in the PC_Elapsed... functions in the Cygwin and Linux port. Use direct reads 
*		 for the Pentium time stamp counter. No change in the Visual C++ port.
*           1.70 Changes to OSScheduleThread for detecting tasks deleted by OSTaskDel in the WIN32 port. 
*                Suggested by Hu JW.
*	    2.00 Modifications in the Linux port, no changes in the WIN32 ports, 18 Mar 2005
*	    2.10 Include paths modified to work with uCOS-II 2.70
*           3.00 Modifications to work with uCOS-II 2.80, 30 May 2006, OSTimeTickCallback removed,
*		 made OSTaskIdleHook() and OSTaskCreateHook() instead of OSTCBInitHook() user callable.
*
*********************************************************************************************************
*/
#define OS_PORT_VERSION 300					//Version number of the uCOS-II WIN32 port

/*
*********************************************************************************************************
   Includes
*********************************************************************************************************
*/
#define _WIN32_WINNT  0x0400
#include    <windows.h>
#include    <winbase.h>
#include    <mmsystem.h>

#include    <stdio.h>
#include    <stdlib.h>

#if (OS_VERSION <= 270)
#include    "os_cpu.h"
#include    "os_cfg.h"
#include    "ucos_ii.h"
#else
#include    "ucos_ii.h"
#endif
/*
*********************************************************************************************************
   Global variables
*********************************************************************************************************
*/
HANDLE  hScheduleEvent, hScheduleThread;			//Scheduler thread variables
HANDLE  hTaskThread[OS_LOWEST_PRIO + 2];			//Map uCOS tasks to WIN32 threads
INT8S   taskSuspended[OS_LOWEST_PRIO + 2];			//Suspend status of mapped tasks/threads

#define NINTERRUPTS 8						//Number of interrupt events (DO NOT CHANGE)
HANDLE  hInterruptEvent[NINTERRUPTS], hInterruptThread;		//Interrupt handling thread variables
void (*interruptTable[NINTERRUPTS])();
BOOLEAN virtualInterruptFlag=TRUE;
INT32U   interruptThreadId = 0;

CRITICAL_SECTION criticalSection;				//Used to protect critical sections

BOOLEAN idleTrigger = TRUE;					//Trigger a message, when the idle task is
								//invoked (used for debugging purposes)

#define NLOG	16						//Log last scheduled tasks (used for
INT16U taskLog[NLOG];						//... debugging purposes)

/*
*********************************************************************************************************
   Port-specific functions
*********************************************************************************************************
*/

// DBGPRINT ******************************************************************
// Debug output
void DBGPRINT(INT32U debugLevel, const char *fmt,...)
{   va_list argptr;
    FILE *fd;

    if ((debugLevel & DEBUGLEVEL) == 0)				//Debug output selection
        return;
    if (DEBUGLEVEL < 0x10000000UL)                              //Screen output (does influence real-time performance!)
    {   va_start(argptr, fmt);
        vprintf(fmt, argptr);
        va_end(argptr);
    } else                                                      //File output (does influence real-time performance!)
    {   va_start(argptr, fmt);
        if ((fd = fopen("ucos.log","a+"))!=NULL)
        {   vfprintf(fd, fmt, argptr);
            fclose(fd);
        }
        va_end(argptr);
    }
}


// OSLog *********************************************************************
// Log the last NLOG scheduled tasks in taskLog (with taskLog[0] = last task)
void OSLog(INT16U prio)
{   int i;

    for (i=NLOG-1; i > 0; i--)					//Shift the previous logged values by one
        taskLog[i]=taskLog[i-1];
    taskLog[0]=prio;						//Log the last one into taskLog[0]
}

// OSPortVersion *************************************************************
// Return the version number of the uCOS-II WIN32 port
INT16U OSPortVersion(void)
{    return OS_PORT_VERSION;
}

BOOLEAN CtrlBreakHandler(INT32U ctrl)
{   if (ctrl==CTRL_C_EVENT)					//Handler if CTRL-C is pressed
    {	printf("---Exiting OSPrioCur=%u-------------\n", OSPrioCur);	//---Display current task priority
    } else if (ctrl==CTRL_BREAK_EVENT)				//Handler if CTRL-BREAK is pressed
    {	printf("---Exiting OSPrioCur=%u-------------\n", OSPrioCur);	//---Display current task priority and exit
 	exit(0);
    }
    return TRUE;
}


// OSEnableInterruptFlag ****************************************************
// Enable the interrupt flag
void OSEnableInterruptFlag(void)
{
    if (virtualInterruptFlag==FALSE)				//If the timer interrupt previously was disabled,
    {   virtualInterruptFlag=TRUE;
        if (GetCurrentThreadId()!=interruptThreadId)
            ResumeThread(hInterruptThread);			//... resume the interrupt thread
    }
    DBGPRINT(0x00000080, ">>> ODEnableInterruptFlag %2d\n", virtualInterruptFlag);
}

// OSDisableInterruptFlag ****************************************************
// Disable the Interrupt Flag
void OSDisableInterruptFlag(void)
{   
    if (virtualInterruptFlag==TRUE)				//If the timer interrupt previously was enabled,
    {   if (GetCurrentThreadId()!=interruptThreadId)		//... suspend the interrupt thread ...
            SuspendThread(hInterruptThread);
        virtualInterruptFlag=FALSE;
    }
    DBGPRINT(0x00000080, ">>> OSDisableInterrupts   %2d\n", virtualInterruptFlag);
}

void OSDummyISR(void)
{   MessageBox(NULL, "Got unsupported interrupt", "uCOS-II WIN32", MB_OK | MB_SETFOREGROUND | MB_ICONERROR);
}

// OSScheduleThread ***********************************************************
// Start tasks, triggered by hScheduleEvent
void OSScheduleThread(INT32U param)
{   char temp[256];
    INT16U oldPrio, nextPrio;

    DBGPRINT(0x00000001, "*** OSScheduleThread First Call\n");

    while (1)
    {   if (WaitForSingleObject(hScheduleEvent, OS_SCHEDULER_TIMEOUT) == WAIT_TIMEOUT)	//Wait for a scheduler event (with timeout)
        {   sprintf(temp, "ERROR: Scheduler timed out in OSScheduleThread  %u --> %u   IF=%u  <-%u<%u<%u<%u<%u<%u<%u<%u<-\n",
                                                OSPrioCur, OSPrioHighRdy, virtualInterruptFlag,
                                                taskLog[0], taskLog[1], taskLog[2], taskLog[3],
                                                taskLog[4], taskLog[5], taskLog[6], taskLog[7]
                                                );
            DBGPRINT(0x00000040, temp);
            MessageBox(NULL, temp, "UCOS-II WIN32", MB_OK | MB_SETFOREGROUND | MB_ICONERROR);	//In case of timeout, display an error message ...
            OSRunning=0;

            SetConsoleCtrlHandler((PHANDLER_ROUTINE) CtrlBreakHandler, FALSE);
            return;										//... and exit (will return to OSStartHighRdy())
        }
        OSTaskSwHook();									//Call the task switch hook function
        EnterCriticalSection(&criticalSection);
        oldPrio   = OSPrioCur;
        nextPrio  = OSPrioHighRdy;
        OSTCBCur  = OSTCBHighRdy;							//Now logically switch to the new task
        OSPrioCur = OSPrioHighRdy;

        idleTrigger = TRUE;
        DBGPRINT(0x00000001, "*** OSScheduleThread from %2u to %2u\n", oldPrio, nextPrio);
        
        if (OSTCBPrioTbl[oldPrio] == NULL)						//If a task has been deleted
        {   if (hTaskThread[oldPrio])							//... remove it
            {   TerminateThread(hTaskThread[oldPrio], 0);
            	CloseHandle(hTaskThread[oldPrio]);
            }
            hTaskThread[oldPrio] = NULL;
            taskSuspended[oldPrio]=0;
        } else if (oldPrio != nextPrio && taskSuspended[oldPrio]==0)			//If switching context to a new task ...
        {   SuspendThread(hTaskThread[oldPrio]);					//... suspend the thread associated with the current task
            taskSuspended[oldPrio]++;							//(update suspend counter to avoid multiple suspends of the same task)
        }

        if (taskSuspended[nextPrio])
        {   taskSuspended[nextPrio]--;							//(updates suspend counter to avoid multiple resumes of the same task)
            if (taskSuspended[nextPrio] < 0)
                taskSuspended[nextPrio]=0;
            if (virtualInterruptFlag==FALSE)
                OSEnableInterruptFlag();
            OSLog(nextPrio);
            ResumeThread(hTaskThread[nextPrio]);					//... and resume the thread associated with the new task
        } else
        {   if (virtualInterruptFlag==FALSE)
                OSEnableInterruptFlag();
        }
        LeaveCriticalSection(&criticalSection);
    }
}

// OSInterruptThread **********************************************************
// Time tick interrupt processing
void OSInterruptThread(INT32U param)
{   char temp[256];
    INT32U eventType;

    DBGPRINT(0x00000001, "*** OSInterruptThread First Call\n");

    while (1)
    {   //if (WaitForSingleObject(hInterruptEvent, OS_INTERRUPT_TIMEOUT) == WAIT_TIMEOUT)	//Wait for a timer interrupt event
    	eventType=WaitForMultipleObjects(NINTERRUPTS, hInterruptEvent, FALSE, OS_INTERRUPT_TIMEOUT);
    	if (eventType == WAIT_TIMEOUT)	//Wait for a timer interrupt event
        {   sprintf(temp, "ERROR: Interrupt timed out in OSInterruptThread   IF=%u\n", virtualInterruptFlag);
            DBGPRINT(0x00000040, temp);
            MessageBox(NULL, temp, "UCOS-II WIN32", MB_OK | MB_SETFOREGROUND | MB_ICONERROR);		//In case of timeout, display an error message ...
            OSRunning=0;
            SetConsoleCtrlHandler((PHANDLER_ROUTINE) CtrlBreakHandler, FALSE);
            exit(-1);									//... and exit
        }
        EnterCriticalSection(&criticalSection);
        DBGPRINT(0x00000001, "*** OSInterruptThread\n");
        if (virtualInterruptFlag==FALSE)
            DBGPRINT(0x00000001, "*** virtualInteruptFlag disabled when calling OSInterruptThread XXX %d\n", virtualInterruptFlag);
        DBGPRINT(0x00000001, "--- OSIntEnter\n");
        OSIntEnter();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日本一区二区三区| 4438x亚洲最大成人网| 日本美女视频一区二区| 一区二区久久久久久| 综合在线观看色| 亚洲青青青在线视频| 亚洲免费在线电影| 亚洲精品成a人| 天天综合色天天| 肉肉av福利一精品导航| 奇米综合一区二区三区精品视频| 亚洲成人动漫一区| 久久激情五月婷婷| 国产一区二区精品在线观看| 国产露脸91国语对白| 懂色av一区二区夜夜嗨| av电影在线不卡| 欧美在线小视频| 欧美一级欧美三级| 久久精品免费在线观看| 亚洲色图欧洲色图| 午夜久久久影院| 韩国一区二区三区| www.亚洲激情.com| 欧美疯狂做受xxxx富婆| 精品国产成人系列| 亚洲欧美日韩国产综合| 日本va欧美va欧美va精品| 国产iv一区二区三区| 色婷婷精品大在线视频| 日韩欧美一区二区久久婷婷| 中文字幕乱码亚洲精品一区| 一区二区三区在线观看动漫 | 国产曰批免费观看久久久| 国产精品888| 在线精品亚洲一区二区不卡| 日韩精品影音先锋| 亚洲天堂免费看| 麻豆91精品91久久久的内涵| 成人av网站在线| 日韩一本二本av| 国产精品超碰97尤物18| 美女网站色91| 日本韩国视频一区二区| 2019国产精品| 日韩精品久久理论片| 99久久综合国产精品| 日韩视频免费观看高清完整版| 国产精品卡一卡二卡三| 久久精品理论片| 欧美在线看片a免费观看| 国产视频一区二区在线观看| 午夜日韩在线观看| 色香色香欲天天天影视综合网| 日韩欧美美女一区二区三区| 亚洲精品免费看| 国产成人精品www牛牛影视| 欧美一区二区三区视频免费播放 | 91极品视觉盛宴| 欧美激情一区二区三区全黄| 日韩精品午夜视频| 在线观看免费成人| ...av二区三区久久精品| 国产自产v一区二区三区c| 91精品在线一区二区| 亚洲午夜视频在线观看| 99久久精品免费看国产| 国产日韩v精品一区二区| 国产自产视频一区二区三区| 日韩一区二区精品| 久久精品国产亚洲高清剧情介绍| 欧美亚洲一区二区在线| 亚洲国产一区视频| 在线一区二区三区| 亚洲一二三四在线观看| 91成人免费电影| 亚洲综合激情另类小说区| 91丝袜美腿高跟国产极品老师| 国产精品国产三级国产普通话蜜臀| 国产精品一区二区久激情瑜伽| 精品国产一区久久| 国产麻豆视频一区二区| 国产视频一区二区在线| 风间由美性色一区二区三区| 中文字幕一区二区三区av| 91女人视频在线观看| 亚洲国产精品久久久久秋霞影院| 在线观看国产一区二区| 婷婷国产在线综合| 精品国产91乱码一区二区三区| 激情综合色丁香一区二区| 久久久99久久| eeuss鲁片一区二区三区| 一区二区三区国产| 555www色欧美视频| 国产一区二区中文字幕| 国产精品久久免费看| 色婷婷综合久久久中文一区二区| 亚洲午夜精品网| 精品日韩在线一区| 99久久99久久精品免费看蜜桃| 亚洲欧美日韩电影| 91精品国产综合久久久久久漫画| 激情欧美一区二区| 成人欧美一区二区三区黑人麻豆 | 日韩黄色一级片| 日韩欧美另类在线| av不卡免费电影| 婷婷六月综合网| 中文字幕国产一区二区| 欧美日韩一二三区| 岛国精品在线观看| 亚洲丰满少妇videoshd| 国产日产欧美一区| 欧美日韩免费观看一区三区| 国产精品一区二区在线播放| 一区二区三区在线观看网站| 久久欧美一区二区| 欧美精品色综合| 99久久精品国产导航| 麻豆精品在线播放| 亚洲午夜电影网| 欧美国产综合色视频| 欧美一卡二卡在线观看| 94-欧美-setu| 国产九色精品成人porny| 香蕉成人啪国产精品视频综合网| 国产色91在线| 日韩精品中文字幕在线一区| 欧美性大战久久久久久久| 国产寡妇亲子伦一区二区| 日韩电影在线免费看| 亚洲黄色尤物视频| 1000精品久久久久久久久| 久久久精品欧美丰满| 日韩一区二区影院| 欧美理论片在线| 欧美视频一区二区| 在线国产亚洲欧美| 色88888久久久久久影院按摩| 国产精品性做久久久久久| 美女看a上一区| 麻豆久久久久久久| 日本中文在线一区| 日本不卡中文字幕| 日本视频中文字幕一区二区三区| 亚洲免费av网站| 亚洲精品国产精品乱码不99| 国产精品久久午夜| 国产精品不卡一区二区三区| 国产欧美日韩视频在线观看| 久久你懂得1024| 国产亚洲精品久| 中文字幕久久午夜不卡| 中文乱码免费一区二区| 国产精品亲子伦对白| 国产精品久久久久久亚洲伦| 中文字幕一区二区三区不卡| 日韩伦理免费电影| 亚洲乱码国产乱码精品精98午夜 | 国产成人免费视频网站| 国精品**一区二区三区在线蜜桃| 日本aⅴ免费视频一区二区三区 | 欧美mv日韩mv亚洲| 精品伦理精品一区| 久久精品视频一区| 亚洲日韩欧美一区二区在线| 亚洲欧美日韩久久| 午夜伊人狠狠久久| 精品中文av资源站在线观看| 国产精品中文有码| 99精品久久免费看蜜臀剧情介绍| 97精品国产露脸对白| 欧美日韩国产中文| 欧美va亚洲va在线观看蝴蝶网| 国产婷婷精品av在线| 国产精品久久久久久久久果冻传媒| 亚洲欧美激情一区二区| 午夜精品爽啪视频| 国产精品综合久久| 在线免费观看日本一区| 日韩亚洲欧美高清| 综合色天天鬼久久鬼色| 爽好多水快深点欧美视频| 国产一区二区三区日韩| 99re成人精品视频| 日韩一区二区三区四区五区六区| 日本一区二区三区四区在线视频| 亚洲精品乱码久久久久| 久久99精品久久久久| 91网站最新地址| 欧美精品一区二区久久久| 亚洲私人黄色宅男| 久久精品国产亚洲高清剧情介绍| 99久久综合国产精品| 日韩一级欧美一级| 一区二区三区在线看| 国产精品一二三| 日韩一级大片在线| 一区二区三区精品视频|