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

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

?? tx_efs.c

?? ThreadX優秀的硬實時操作系統.This Express Start Guide is designed to help you install and use ThreadX for the
?? C
?? 第 1 頁 / 共 2 頁
字號:
                TX_RESTORE

                /* Return successful status.  */
                return(TX_SUCCESS);
            }
        }

        /* Otherwise, the event flag requests of multiple threads must be 
           examined.  */

        /* Setup thread pointer, keep a local copy of the head pointer.  */
        suspended_list =  group_ptr -> tx_event_flags_suspension_list;
        thread_ptr =      suspended_list;

        /* Clear the suspended list head pointer to thwart manipulation of
           the list in ISR's while we are processing here.  */
        group_ptr -> tx_event_flags_suspension_list =  TX_NULL;
        
        /* Setup the satisfied thread pointers.  */
        satisfied_list =  TX_NULL;
        last_satisfied =  TX_NULL;

        /* Setup the suspended count.  */      
        suspended_count =  group_ptr -> tx_event_flags_suspended_count;

        /* Pickup the current event flags.  */
        current_event_flags =  group_ptr -> tx_event_flags_current;

        /* Disable preemption while we process the suspended list.  */
        _tx_thread_preempt_disable++;

        /* Loop to examine all of the suspended threads. */
        do 
        {

            /* Restore interrupts temporarily.  */
            TX_RESTORE

            /* Disable interrupts again.  */
            TX_DISABLE

            /* Determine if we need to reset the search.  */
            if (group_ptr -> tx_event_flags_reset_search)
            {

                /* Clear the reset search flag.  */
                group_ptr -> tx_event_flags_reset_search =  0;

                /* Move the thread pointer to the beginning of the search list.  */
                thread_ptr =  suspended_list;

                /* Reset the suspended count.  */      
                suspended_count =  group_ptr -> tx_event_flags_suspended_count;

				/* Update the current events with any new ones that might
				   have been set in a nested set events call from an ISR.  */
				current_event_flags =  current_event_flags | group_ptr -> tx_event_flags_current;

                /* Determine if we need to get out of this loop.  */
                if (!thread_ptr)
                    break;
            }

            /* Pickup this thread's suspension get option.  */
            get_option =  thread_ptr -> tx_suspend_option;

            /* Determine if this thread's get event flag request has been met.  */
            if (get_option & TX_EVENT_FLAGS_AND_MASK)
            {

                /* All flags must be present to satisfy request.  */
                if ((current_event_flags & thread_ptr -> tx_suspend_info) == 
                                                thread_ptr -> tx_suspend_info)
    
                    /* Yes, all the events are present.  */
                    status =  TX_SUCCESS;
                else

                    /* No, not all the events are present.  */
                    status =  TX_NO_EVENTS;
            }
            else
            {

                /* Any of the events will satisfy the request.  */
                if (current_event_flags & thread_ptr -> tx_suspend_info)

                    /* Yes, one or more of the requested events are set.  */
                    status =  TX_SUCCESS;
                else
    
                    /* No, none of the events are currently set.  */
                    status =  TX_NO_EVENTS;
            }
                
            /* Save next thread pointer.  */
            next_thread_ptr =  thread_ptr -> tx_suspended_next;

            /* Now determine if the request can be satisfied immediately.  */
            if (status == TX_SUCCESS)
            {

                /* Yes, this request can be handled now.  */

                /* Return the actual event flags that satisfied the request.  */
                *((ULONG *) thread_ptr -> tx_additional_suspend_info) =  current_event_flags;

                /* Determine whether or not clearing needs to take place.  */
                if (get_option & TX_EVENT_FLAGS_CLEAR_MASK)

                    /* Yes, clear the flags that satisfied this request.  */
                    group_ptr -> tx_event_flags_current =
                        group_ptr -> tx_event_flags_current & ~(thread_ptr -> tx_suspend_info);
            
                /* We need to remove the thread from the suspension list and place it in the
                   expired list.  */

               /* See if this is the only suspended thread on the list.  */
                if (thread_ptr == thread_ptr -> tx_suspended_next)
                {

                    /* Yes, the only suspended thread.  */

                    /* Update the head pointer.  */
                    suspended_list =  TX_NULL;
                }
                else
                {

                    /* At least one more thread is on the same expiration list.  */

                    /* Update the list head pointer, if removing the head of the
                       list.  */
                    if (suspended_list == thread_ptr)
                        suspended_list =  thread_ptr -> tx_suspended_next;

                    /* Update the links of the adjacent threads.  */
                    (thread_ptr -> tx_suspended_next) -> tx_suspended_previous =  
                                                    thread_ptr -> tx_suspended_previous;
                    (thread_ptr -> tx_suspended_previous) -> tx_suspended_next =
                                                    thread_ptr -> tx_suspended_next;
                } 
                
                /* Decrement the suspension count.  */
                group_ptr -> tx_event_flags_suspended_count--;

                /* Prepare for resumption of the first thread.  */

                /* Clear cleanup routine to avoid timeout.  */
                thread_ptr -> tx_suspend_cleanup =  TX_NULL;

                /* Put return status into the thread control block.  */
                thread_ptr -> tx_suspend_status =  TX_SUCCESS;        

                /* Place this thread on the expired list.  */
                if (!satisfied_list)
                {

                    /* First thread on the satisfied list.  */
                    satisfied_list =  thread_ptr;
                    last_satisfied =  thread_ptr;
    
                    /* Setup intial next pointer.  */
                    thread_ptr -> tx_suspended_next =  TX_NULL;
                }
                else
                {

                    /* Not the first thread on the satisfied list.  */
                
                    /* Link it up at the end.  */
                    last_satisfied -> tx_suspended_next =  thread_ptr;
                    thread_ptr -> tx_suspended_next =      TX_NULL;
                    last_satisfied =                       thread_ptr;
                }
            }

            /* Copy next thread pointer to working thread ptr.  */
            thread_ptr =  next_thread_ptr;

        } while (--suspended_count);

        /* Setup the group's suspension list head again.  */
        group_ptr -> tx_event_flags_suspension_list =  suspended_list;

        /* Restore interrupts.  */
        TX_RESTORE

        /* Walk through the satisfied list, setup initial thread pointer. */
        thread_ptr =  satisfied_list;
        while(thread_ptr)
        {
    
            /* Get next pointer first.  */
            next_thread_ptr =  thread_ptr -> tx_suspended_next;

            /* Deactivate the timeout timer if necessary.  */
            if (thread_ptr -> tx_thread_timer.tx_list_head)
            {

                /* Deactivate the thread's timeout timer.  */
                _tx_timer_deactivate(&(thread_ptr -> tx_thread_timer));
            }
            else
            {

                /* Clear the remaining time to ensure timer doesn't get activated.  */
                thread_ptr -> tx_thread_timer.tx_remaining_ticks =  0;
            }

            /* Disable interrupts.  */
            TX_DISABLE

            /* Disable preemption again.  */
            _tx_thread_preempt_disable++;

            /* Restore interrupt posture.  */
            TX_RESTORE

            /* Resume the thread.  */
            _tx_thread_resume(thread_ptr);

            /* Move next thread to current.  */
            thread_ptr =  next_thread_ptr;
        }

        /* Disable interrupts.  */
        TX_DISABLE

        /* Release thread preemption disable.  */
        _tx_thread_preempt_disable--;

        /* Restore interrupts.  */
        TX_RESTORE

        /* Now determine if preemption is required.  */
		if ((_tx_thread_current_ptr != _tx_thread_execute_ptr) && (_tx_thread_system_state == 0))
		{

            /* Preemption is required, transfer control back to 
               system.  */
            _tx_thread_system_return();
        }
    }
    else
    {

        /* Determine if we need to set the reset search field.  */
        if (group_ptr -> tx_event_flags_suspended_count)
            
            /* We interrupted a search of an event flag group suspension
               list.  Make sure we reset the search.  */
            group_ptr -> tx_event_flags_reset_search++;

        /* Restore interrupts.  */
        TX_RESTORE
    }

    /* Return completion status.  */
    return(TX_SUCCESS);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区不卡在线观看| 久久精品视频免费观看| 一区二区三区在线观看视频 | 在线观看免费成人| 夜夜精品视频一区二区| 7878成人国产在线观看| 日产国产高清一区二区三区 | 精品国产免费人成在线观看| 黄一区二区三区| 国产欧美日韩另类视频免费观看 | 蜜桃一区二区三区在线| 亚洲精品一区二区三区蜜桃下载 | 日韩国产精品久久| 日韩美一区二区三区| 国产成人av电影免费在线观看| 中文字幕av一区二区三区高| 日本高清免费不卡视频| 日本欧美在线观看| 国产丝袜在线精品| 欧美日韩一区中文字幕| 激情综合亚洲精品| 亚洲精品一卡二卡| 日韩欧美www| 99精品视频一区| 秋霞午夜av一区二区三区| 久久精品人人做| 欧美午夜精品电影| 国产福利精品一区| 亚洲一区欧美一区| 久久久国际精品| 欧美三级视频在线观看| 国产成人综合网站| 偷拍与自拍一区| 国产欧美日产一区| 91精品国产综合久久精品| 成人av中文字幕| 人人爽香蕉精品| 一区二区三区在线免费| 国产亚洲精品超碰| 欧美另类久久久品| 北条麻妃一区二区三区| 麻豆精品一区二区| 亚洲自拍偷拍av| 国产精品电影一区二区三区| 日韩三级在线观看| 欧美日韩在线三级| 99综合电影在线视频| 久久精品国产精品亚洲红杏| 一区二区免费在线播放| 国产精品久久99| 久久久久国产精品厨房| 在线不卡中文字幕播放| 色综合婷婷久久| 99精品黄色片免费大全| 裸体健美xxxx欧美裸体表演| 亚洲欧洲成人精品av97| 2023国产精品| 日韩女优视频免费观看| 欧美老女人第四色| 在线日韩av片| 91亚洲精品乱码久久久久久蜜桃| 国产一区二区导航在线播放| 日本网站在线观看一区二区三区| 亚洲综合色噜噜狠狠| 1000部国产精品成人观看| 国产精品网站在线| 国产亚洲精品aa| 国产亚洲欧洲997久久综合| 久久综合色天天久久综合图片| 欧美一区二区三区性视频| 精品视频一区二区不卡| 欧美日韩亚洲国产综合| 欧美综合一区二区| 欧美伊人久久久久久久久影院| 91美女在线看| 欧美性感一区二区三区| 欧美无人高清视频在线观看| 欧美在线免费播放| 欧美日韩国产综合一区二区| 欧美专区日韩专区| 欧美区一区二区三区| 欧美另类z0zxhd电影| 日韩一区二区三区视频在线观看| 欧美一级生活片| 久久先锋影音av鲁色资源| 久久精品人人爽人人爽| ㊣最新国产の精品bt伙计久久| 中文字幕日本不卡| 一区二区三区日韩精品| 天天操天天综合网| 美腿丝袜亚洲色图| 国产精品1024| 91丝袜国产在线播放| 欧美午夜电影在线播放| 91精品国产91久久久久久最新毛片| 欧美大片在线观看一区| 国产三级一区二区三区| 亚洲色图制服丝袜| 五月天激情小说综合| 激情成人午夜视频| av在线不卡免费看| 在线观看成人免费视频| 日韩一级高清毛片| 国产精品久久久久久久久动漫| 亚洲另类一区二区| 久久99精品一区二区三区| 粉嫩av亚洲一区二区图片| 在线视频综合导航| 日韩一区二区不卡| 亚洲欧洲99久久| 日本女优在线视频一区二区| 国产精品18久久久久久久久久久久| 成人免费视频caoporn| 欧美日韩在线精品一区二区三区激情| 91精品国产免费| 亚洲视频一区二区在线| 蜜桃精品视频在线| 91亚洲精品久久久蜜桃网站| 日韩三级中文字幕| 亚洲精品视频在线观看免费| 老司机精品视频导航| 91色在线porny| 欧美mv和日韩mv国产网站| 亚洲欧美福利一区二区| 久久99国产乱子伦精品免费| 色婷婷综合五月| 久久久久久久久久久久电影| 亚洲电影视频在线| 成人免费视频一区二区| 日韩久久精品一区| 亚洲一区二区三区爽爽爽爽爽 | 国产伦精一区二区三区| 在线视频一区二区三区| 国产精品五月天| 精品中文字幕一区二区| 精品视频999| 亚洲人成亚洲人成在线观看图片| 经典三级一区二区| 欧美日韩国产综合草草| 亚洲视频一区在线观看| 国产成人精品亚洲日本在线桃色 | 精品国产电影一区二区| 亚洲午夜久久久久| 91丨国产丨九色丨pron| 欧美激情在线看| 久久99精品久久久久久| 在线91免费看| 亚洲午夜激情网站| 色999日韩国产欧美一区二区| 国产午夜亚洲精品不卡| 久久精品久久精品| 337p亚洲精品色噜噜| 亚洲高清免费观看高清完整版在线观看| jlzzjlzz亚洲日本少妇| 欧美国产日韩精品免费观看| 狠狠色丁香久久婷婷综合丁香| 69久久99精品久久久久婷婷 | 日韩 欧美一区二区三区| 欧美性色aⅴ视频一区日韩精品| 亚洲视频香蕉人妖| 91蝌蚪porny成人天涯| 亚洲视频狠狠干| 91在线免费看| 一区二区三区中文字幕精品精品| 99精品国产99久久久久久白柏 | 日韩欧美国产小视频| 日本欧洲一区二区| 欧美电视剧在线看免费| 久久国产精品免费| 久久一区二区视频| 国产精品系列在线播放| 欧美国产日韩a欧美在线观看| 成人免费观看av| 日韩理论片一区二区| 51精品秘密在线观看| 日本欧美在线观看| 337p粉嫩大胆噜噜噜噜噜91av| 久久99九九99精品| 久久久久高清精品| 99精品在线观看视频| 亚洲一区日韩精品中文字幕| 91麻豆精品国产自产在线观看一区| 免费欧美在线视频| 国产亚洲综合在线| 色综合久久综合网97色综合| 亚洲国产日韩一区二区| 日韩一区二区在线看| 国产精品一二三四五| 亚洲三级小视频| 欧美一二三四在线| 国产91在线观看丝袜| 亚洲精选在线视频| 日韩午夜在线观看| 东方aⅴ免费观看久久av| 亚洲一区二区美女| 日韩欧美在线影院| 成人黄色一级视频| 国产视频在线观看一区二区三区| 美女免费视频一区二区| 国产精品家庭影院|