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

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

?? emos_cpu.c

?? emos是一個新的類似于ucos的內核
?? C
?? 第 1 頁 / 共 2 頁
字號:
* Description: This function is called by the idle task.
* Arguments  : none
* Note(s)    : 1) Interrupts may or may not be ENABLED during this call.
**********************************************************************************************************/
void emosTaskIdleHook (void)
{
}
#endif

void emosStartHighRdy()
{
    DWORD  dwID;

    /*emosInitTrace(100000);*/

    EMOS_ENTER_CRITICAL();

    emosTaskSwHook();
    gEmosRunning = EMOS_TRUE;

    /*This thread is used for Ctx Switch to simulation Hardware Ctx Switch*/
    gEmosCtxSwW32Event  = CreateEvent(NULL,FALSE,FALSE,NULL);
    gEmosCtxSwW32Handle = CreateThread( NULL, 0, emosCtxSwW32, 0, 0, &dwID );

    /*Set the Ctx thread to highest priority*/
    SetPriorityClass(gEmosCtxSwW32Handle,THREAD_PRIORITY_HIGHEST);

    #ifdef SET_AFFINITY_MASK
    if( SetThreadAffinityMask(gEmosCtxSwW32Handle, 1 ) == 0 ) 
    {
        #ifdef EMOS_CPU_TRACE
        EMOS_Printf("Error SetThreadAffinityMask\n");
        #endif
    }
    #endif
    
	SetThreadPriority(gEmosCtxSwW32Handle,THREAD_PRIORITY_TIME_CRITICAL);

    /*This thread is used for Tick Simulation*/
    gEmosTick32Handle = CreateThread( NULL, 0, emosTickW32, 0, 0, &dwID );
    SetPriorityClass(gEmosTick32Handle,THREAD_PRIORITY_HIGHEST);

    #ifdef SET_AFFINITY_MASK
    if( SetThreadAffinityMask(gEmosTick32Handle, 1 ) == 0 ) 
	{
        #ifdef EMOS_CPU_TRACE
        EMOS_Printf("Error: SetThreadAffinityMask\r\n");
        #endif
    }
    #endif

	SetThreadPriority(gEmosTick32Handle,THREAD_PRIORITY_HIGHEST);

   #ifdef WIN_MM_TICK
    timeGetDevCaps(&gEmosTimeCap, sizeof(gEmosTimeCap));

    if( gEmosTimeCap.wPeriodMin < WIN_MM_MIN_RES )
    {
    	gEmosTimeCap.wPeriodMin = WIN_MM_MIN_RES;
    }

    timeBeginPeriod(gEmosTimeCap.wPeriodMin);

    gEmosTickEventHandle = CreateEvent(NULL, FALSE, FALSE, NULL);
    gEmosTickTimer       = timeSetEvent((1000/EMOS_TICKS_PER_SEC),gEmosTimeCap.wPeriodMin,(LPTIMECALLBACK)gEmosTickEventHandle, dwID,TIME_PERIODIC|TIME_CALLBACK_EVENT_SET);
    #endif
    
    /*Begin the highest priority task-thread */ 
    SS_SP = (EMOS_EMU_STK*) gEmosTCBHighRdy->osTCBStkPtr; 
    emosTaskSwHook();
    
    ResumeThread(SS_SP->handle);

    EMOS_EXIT_CRITICAL();

    #if 1
    /*Here waiting for the event?*/
    WaitForSingleObject(gEmosCtxSwW32Handle,INFINITE);
    
    #ifdef WIN_MM_TICK
    timeKillEvent(gEmosTickTimer);
    timeEndPeriod(gEmosTimeCap.wPeriodMin);
    CloseHandle(gEmosTickEventHandle);
    #endif

	CloseHandle(gEmosTick32Handle);
    CloseHandle(gEmosCtxSwW32Event);
    #endif
}

void emosCtxSw()
{
    DWORD n = 0;

    if(!(SS_SP->exit)) 
    {
        n = SuspendThread(SS_SP->handle);
    }
    
    emosTaskSwHook();

    /*OSTrace( OBJ_SW, PT_SW_CTX, gEmosTCBHighRdy, 0, gEmosPrioCur, gEmosPrioHighRdy,0 );*/
    gEmosTCBCur = gEmosTCBHighRdy;
    gEmosPrioCur = gEmosPrioHighRdy;
    SS_SP = (EMOS_EMU_STK*) gEmosTCBHighRdy->osTCBStkPtr;
    ResumeThread(SS_SP->handle);
}

void emosIntCtxSw()
{
    DWORD n = 0;

    if(!(SS_SP->exit)) 
    {
        n = SuspendThread(SS_SP->handle);
    }

    emosTaskSwHook();

    /*OSTrace( OBJ_SW, PT_SW_INT, OSTCBHighRdy, 0, OSPrioCur,OSPrioHighRdy,0 );*/
    gEmosTCBCur = gEmosTCBHighRdy;
    gEmosPrioCur = gEmosPrioHighRdy;
    SS_SP = (EMOS_EMU_STK*) gEmosTCBHighRdy->osTCBStkPtr;
    ResumeThread(SS_SP->handle);
}

void emosTickISR()
{
    emosIntEnter();
    emosTimeTick();
    emosIntExit();
}

/*********************************************************************************************************
* WIN32 TASK - OSCtxSwW32()
* Description: These functions are body of OS multitasking in WIN32.
* Arguments  : lpParameter   is a pointer to special paraleter of the task.
* Note(s)    : 1) Priorities of these tasks are very important.
**********************************************************************************************************/
DWORD WINAPI emosCtxSwW32( LPVOID lpParameter )
{
    EMOS_INIT_CRITICAL();

    while(!gEmosTerminateCtxSwW32)
    {
        if( WAIT_OBJECT_0 == WaitForSingleObject(gEmosCtxSwW32Event,INFINITE) )
        {
            EMOS_ENTER_CRITICAL();
            emosCtxSw();
            EMOS_EXIT_CRITICAL();
        }
    }
    
    return 0;
}

/*********************************************************************************************************
* WIN32 TASK - OSTickW32()
* Description: These functions are body of OS multitasking in WIN32.
* Arguments  : lpParameter   is a pointer to special paraleter of the task.
* Note(s)    : 1) Priorities of these tasks are very important.
**********************************************************************************************************/
DWORD WINAPI emosTickW32( LPVOID lpParameter )
{
    EMOS_INIT_CRITICAL();

    while(!gEmosTerminateTickW32)
    {
        emosTickISR();
        #ifdef WIN_MM_TICK
        if(WaitForSingleObject(gEmosTickEventHandle, 5000) == WAIT_TIMEOUT)
        {
            #ifdef EMOS_CPU_TRACE
            EMOS_Printf("Error MM OSTick Timeout!\n");
            #endif
        }

        ResetEvent(gEmosTickEventHandle);
        #else
        Sleep(1000/EMOS_TICKS_PER_SEC);
        #endif
    }

    return 0;
}

/********************************************************************************************************
* WIN32 TASK - OSTaskW32()
* Description: These functions are body of OS multitasking in WIN32.
* Arguments  : lpParameter   is a pointer to special paraleter of the task.
* Note(s)    : 1) Priorities of these tasks are very important.
**********************************************************************************************************/
DWORD WINAPI emosTaskW32( LPVOID lpParameter )
{
    EMOS_TCB_T*    ptcb;
    EMOS_EMU_STK*  stack;

    ptcb = (EMOS_TCB_T*) lpParameter;
    stack = (EMOS_EMU_STK*) ptcb->osTCBStkPtr;
    
     #ifdef DISABLE_PRIORITY_BOOST
     if( SetThreadPriorityBoost( stack->handle, TRUE ) == 0 )
     {
            #ifdef EMOS_CPU_TRACE
            EMOS_Printf("Error: SetThreadPriorityBoost\n");
            #endif
     }
     #endif

    EMOS_INIT_CRITICAL();

    /*if the task running, it will goes into a while(1) loop,
      if the task return, it will go to the last two declarations*/
    /*EMOS_DBGSTR_VAL(stack->task);*/
    
    stack->task(stack->pData);
    stack->exit = 1;
    emosTaskDel(ptcb->osTCBPrio);

    return 0;
}

/*********************************************************************************************************
* WIN32 TASK - EMOS_SLEEP()
* Description: These functions are body of OS multitasking in WIN32.
* Arguments  : lpParameter   is a pointer to special paraleter of the task.
* Note(s)    : 1) Priorities of these tasks are very important.
**********************************************************************************************************/
void EMOS_SLEEP()
{
    Sleep(1);
}

/*********************************************************************************************************
* WIN32 TASK - EMOS_STOP()
* Description: These functions are body of OS multitasking in WIN32.
* Arguments  : lpParameter   is a pointer to special paraleter of the task.
* Note(s)    : 1) Priorities of these tasks are very important.
**********************************************************************************************************/
void EMOS_STOP()
{
    EMOS_ENTER_CRITICAL();
    ++gEmosTerminateTickW32;
    ++gEmosTerminateCtxSwW32;
    EMOS_TASK_SW();
    EMOS_EXIT_CRITICAL();
    Sleep(1000/EMOS_TICKS_PER_SEC);
}


/*
int EMOS_Printf(char *str, ...)
{
    int  ret;

    va_list marker;

    va_start( marker, str );

    EMOS_ENTER_CRITICAL();
    ret = vprintf( str, marker );
    EMOS_EXIT_CRITICAL();

    va_end( marker );

    return ret;
}
*/





/*MinGW changelist*/
/*
MinGW\include\basetsd.h line-56
typedef unsigned int UINT32;
typedef unsigned int  *PUINT32;

MinGW\include\winnt.h line-83
typedef unsigned long ULONG;
typedef unsigned long *PULONG;
*/


#endif

 /*
 * Please add "$" around "Id" and "Log".
 * $Id$
 * $Log$
 *
 */

 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品中文在线影院| 欧美亚洲国产一区在线观看网站| 日韩毛片在线免费观看| 久久精品夜色噜噜亚洲a∨| 欧美不卡123| 久久只精品国产| 亚洲国产高清不卡| 久久精品水蜜桃av综合天堂| 久久精品人人爽人人爽| 国产日产欧产精品推荐色| 欧美一区二区三区的| 91免费看片在线观看| 色欲综合视频天天天| 91久久线看在观草草青青| 欧美三区在线视频| 在线播放一区二区三区| 欧美成人福利视频| 国产午夜亚洲精品羞羞网站| 国产精品另类一区| 亚洲国产精品久久人人爱蜜臀| 亚洲第一在线综合网站| 久久综合综合久久综合| 国产精品白丝jk黑袜喷水| 97精品电影院| 欧美伦理电影网| 国产亚洲污的网站| 亚洲桃色在线一区| 日韩精品一二区| 国产91精品精华液一区二区三区| 91女人视频在线观看| 91精品国产品国语在线不卡| 26uuu色噜噜精品一区| 亚洲伦在线观看| 久久9热精品视频| 99久久99精品久久久久久| 欧美一区二区三区视频免费| 中文字幕精品在线不卡| 91视频你懂的| 亚洲另类色综合网站| 亚洲电影一级黄| 色婷婷国产精品综合在线观看| 亚洲精品视频在线看| 亚洲午夜日本在线观看| 韩国女主播成人在线| 色婷婷久久综合| 久久久久国产精品免费免费搜索 | 欧美精品一区男女天堂| 亚洲欧美日韩一区二区 | 日本成人中文字幕在线视频| 国内不卡的二区三区中文字幕| 色综合久久久网| 久久久不卡网国产精品一区| 岛国精品在线观看| 91精品国产91热久久久做人人| 色综合久久99| 国产女同性恋一区二区| 国产丶欧美丶日本不卡视频| 色婷婷亚洲综合| 欧美激情资源网| 久久91精品久久久久久秒播| 欧美日韩大陆在线| 亚洲欧美国产三级| av亚洲精华国产精华精| 久久久久高清精品| 激情图区综合网| 日韩免费成人网| 日本亚洲一区二区| 在线综合亚洲欧美在线视频| 一区二区三区在线观看欧美| av影院午夜一区| 国产精品入口麻豆原神| 国产成人午夜电影网| 久久精品欧美一区二区三区不卡| 蜜桃精品视频在线观看| 欧美一区午夜精品| 奇米色一区二区| 日韩视频中午一区| 精品综合免费视频观看| 精品国产乱码久久久久久闺蜜 | 最近日韩中文字幕| 2017欧美狠狠色| 久久精品国产99久久6| 欧美一区二区精品久久911| 三级成人在线视频| 制服丝袜亚洲色图| 蜜桃精品视频在线观看| 久久久久久久久久久99999| 国产一区二区在线视频| 国产午夜三级一区二区三| 国产成人在线色| 中文字幕一区二区三区不卡| 91国产福利在线| 视频在线在亚洲| 精品国产乱码久久久久久1区2区| 国产高清无密码一区二区三区| 日本一二三不卡| 91成人免费在线| 日本亚洲视频在线| 久久精品免费在线观看| 91麻豆国产在线观看| 欧洲av一区二区嗯嗯嗯啊| 欧美日韩免费高清一区色橹橹| 26uuu亚洲综合色| 国产精品影视天天线| 一色桃子久久精品亚洲| 欧美三级日韩在线| 国产精品夜夜嗨| 亚洲一区二区在线观看视频| 91精品啪在线观看国产60岁| 国产精品一二三区在线| 亚洲一区二区不卡免费| 欧美哺乳videos| 色婷婷久久久久swag精品| 美女性感视频久久| 青青草97国产精品免费观看| 久久久无码精品亚洲日韩按摩| 91年精品国产| 久久9热精品视频| 亚洲精品乱码久久久久久黑人| 日韩一区二区三区精品视频 | 久久成人免费电影| 国产精品资源网| 欧美日韩国产美| 成人激情小说网站| 亚洲一区中文日韩| 欧美韩国日本一区| 欧美精品成人一区二区三区四区| 国产永久精品大片wwwapp| 夜夜揉揉日日人人青青一国产精品| 欧美r级电影在线观看| 99热在这里有精品免费| 精品在线亚洲视频| 亚洲成精国产精品女| 综合网在线视频| 久久女同精品一区二区| 欧美一区二区在线免费观看| 91国产免费看| 91蜜桃在线免费视频| 懂色av中文字幕一区二区三区| 蜜臀久久99精品久久久画质超高清 | 日韩综合小视频| 亚洲激情图片小说视频| 中文字幕亚洲视频| 天天操天天色综合| 日韩无一区二区| 在线一区二区三区四区五区 | 亚洲欧美日韩国产综合在线| 久久国产人妖系列| 国产精品久久久久久久久晋中 | 欧美国产激情一区二区三区蜜月| 91精品国产色综合久久不卡电影| 在线亚洲一区二区| 一本久道中文字幕精品亚洲嫩| av亚洲产国偷v产偷v自拍| 国产成人精品1024| 国产成人aaa| 午夜精品福利一区二区三区av| 成人午夜视频福利| 国产精品国产三级国产aⅴ原创 | 日韩理论片网站| **欧美大码日韩| 欧美激情一区在线观看| 国产无遮挡一区二区三区毛片日本| 日韩一级二级三级| 日韩欧美电影在线| 国产亚洲精品福利| 国产日韩欧美电影| 136国产福利精品导航| 最新久久zyz资源站| 一区二区三区四区亚洲| 午夜日韩在线观看| 麻豆91精品91久久久的内涵| 国产一区二区福利视频| 成人精品视频一区二区三区 | 椎名由奈av一区二区三区| 国产综合色在线| 麻豆精品久久精品色综合| 国内成人精品2018免费看| 韩国精品久久久| 国产精品性做久久久久久| 91污在线观看| 欧美一区二区黄| 日本一二三不卡| 午夜精品123| 狠狠狠色丁香婷婷综合激情 | 96av麻豆蜜桃一区二区| 欧美日韩视频在线观看一区二区三区| 欧美精品123区| 国产精品卡一卡二卡三| 午夜久久电影网| 成人美女视频在线看| 欧美三区在线视频| 中文字幕乱码亚洲精品一区| 亚洲电影激情视频网站| 国产成人午夜精品5599 | 美女视频黄免费的久久| 国产真实精品久久二三区| 制服视频三区第一页精品| 欧美国产精品久久| 亚洲国产综合色|