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

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

?? tx_efs.c

?? 該代碼是在單片機MCU中實現多線程的嵌入式操作系統
?? 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一区二区三区免费野_久草精品视频
美国三级日本三级久久99 | 亚洲欧美一区二区三区久本道91| 亚洲国产一区在线观看| 91免费版pro下载短视频| 久久久久久免费毛片精品| 免费看欧美女人艹b| 欧美一区二区视频在线观看2020 | 欧美va在线播放| 免费黄网站欧美| 在线观看91av| 亚洲狠狠丁香婷婷综合久久久| 成人av在线资源| 国产精品网站在线播放| 成人激情免费视频| 亚洲少妇30p| 欧美中文字幕一区二区三区| 亚洲欧美日韩久久精品| 91麻豆精品秘密| 一区二区三区精密机械公司| 91福利在线观看| 日韩影院免费视频| 2023国产精品| 九九视频精品免费| 久久久久久久久久久久久女国产乱 | 国产久卡久卡久卡久卡视频精品| 欧美草草影院在线视频| 加勒比av一区二区| 国产精品国产三级国产aⅴ中文 | 日精品一区二区| 4438x亚洲最大成人网| 国产一区在线看| 精品999久久久| 国产成人午夜视频| 亚洲欧美日韩电影| 欧美二区在线观看| 国产黄色91视频| 一区二区三区欧美| 欧美大片日本大片免费观看| 床上的激情91.| 一区二区国产盗摄色噜噜| 欧美一区二区视频在线观看2022| 国产精品综合二区| 一区二区三区在线观看欧美| 欧美一区二区视频观看视频| 久久精品国产精品亚洲红杏| 国产精品国产三级国产普通话蜜臀| 在线观看91视频| 国产一区二区在线免费观看| 亚洲欧美另类小说视频| 欧美电影免费观看高清完整版| www.亚洲国产| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品伦理在线| 日韩一区二区三免费高清| 成人免费视频免费观看| 伊人夜夜躁av伊人久久| 精品电影一区二区| 91传媒视频在线播放| 九九在线精品视频| 亚洲一区二区三区不卡国产欧美| 欧美日韩高清一区二区不卡| 成人永久免费视频| 日本亚洲天堂网| 最新日韩av在线| 欧美一级搡bbbb搡bbbb| 欧美做爰猛烈大尺度电影无法无天| 狠狠色伊人亚洲综合成人| 亚洲成av人片| 亚洲免费看黄网站| 欧美一区二区三区四区久久| 91久久精品一区二区| 国产精品综合二区| 老司机免费视频一区二区| 亚洲品质自拍视频| 久久久不卡网国产精品二区| 欧美一区二区三区视频在线观看 | 国产白丝网站精品污在线入口| 日韩高清电影一区| 亚洲一区二区三区在线| 久久品道一品道久久精品| 欧美精三区欧美精三区| 色综合天天做天天爱| 成人h精品动漫一区二区三区| 狠狠色狠狠色综合| 国产一区美女在线| 久久国产视频网| 国产乱码精品1区2区3区| 国产原创一区二区| 成人午夜精品在线| 国产精品一区专区| 国产一区在线观看视频| 精品一区二区三区久久| 免费成人小视频| 一区二区三区中文字幕| 亚洲免费在线电影| 亚洲专区一二三| 亚洲国产aⅴ天堂久久| 亚洲一区二区三区中文字幕| 国产精品国产三级国产专播品爱网 | 欧美三级在线视频| 欧美影院一区二区三区| 91精品国产综合久久精品| 2023国产精品自拍| 国产精品电影院| 亚洲国产日韩a在线播放| 久久99久久99精品免视看婷婷| 国产成人精品在线看| 91国产丝袜在线播放| 日韩欧美一二区| 中文字幕一区二区三区精华液| 亚洲综合精品自拍| 国模无码大尺度一区二区三区| 不卡在线视频中文字幕| 欧美图区在线视频| 国产蜜臀av在线一区二区三区| 亚洲欧美激情一区二区| 麻豆久久一区二区| 99这里只有久久精品视频| 在线观看91精品国产麻豆| 欧美激情一区在线观看| 亚洲成人精品在线观看| 国产一区二区免费视频| 91久久久免费一区二区| 精品动漫一区二区三区在线观看| 一区二区三区在线视频免费| 99久精品国产| 欧美成人乱码一区二区三区| 亚洲色图在线播放| 精品一区二区三区的国产在线播放 | 日韩精品资源二区在线| 亚洲欧美日韩成人高清在线一区| 九九九精品视频| 欧美中文字幕不卡| 国产精品麻豆久久久| 久久国产精品区| 欧美三级日本三级少妇99| 国产亚洲综合在线| 精品一区免费av| 欧美日韩免费观看一区三区| 中文字幕一区二区三区色视频| 精品在线观看免费| 4hu四虎永久在线影院成人| 夜夜爽夜夜爽精品视频| 99久久免费国产| 欧美极品少妇xxxxⅹ高跟鞋| 国内精品久久久久影院薰衣草| 3d成人动漫网站| 亚洲va国产天堂va久久en| 99久久精品费精品国产一区二区| 日韩美女在线视频| 日本成人在线网站| 欧美日免费三级在线| 一区二区三区精品视频| 色综合久久中文综合久久牛| 国产精品理伦片| 成人ar影院免费观看视频| 久久婷婷国产综合精品青草| 精品一区二区三区香蕉蜜桃 | 一本色道久久综合狠狠躁的推荐| 欧美激情自拍偷拍| 国产精品一区三区| 国产亚洲福利社区一区| 国精产品一区一区三区mba桃花| 欧美成人艳星乳罩| 蜜臀av一级做a爰片久久| 欧美一区二区三区在线视频| 视频一区视频二区中文字幕| 91麻豆精品国产自产在线| 亚洲国产精品视频| 欧美喷潮久久久xxxxx| 五月天欧美精品| 欧美肥妇free| 久久激情综合网| 久久精品亚洲一区二区三区浴池| 国产精品18久久久久久久久久久久 | 日韩欧美国产一区二区三区| 日韩成人一区二区| 日韩精品一区二区三区老鸭窝| 久久99久久久欧美国产| 国产亚洲污的网站| 成人午夜激情片| 一区二区在线观看视频| 欧美视频完全免费看| 免费成人av资源网| 国产午夜一区二区三区| 91麻豆精品在线观看| 天天影视色香欲综合网老头| 欧美一级爆毛片| 国产精品 欧美精品| 亚洲你懂的在线视频| 4438成人网| 风间由美一区二区av101| 一区二区久久久久| 欧美zozo另类异族| av不卡一区二区三区| 日韩精品每日更新| 久久久激情视频| 欧美三片在线视频观看| 国产中文字幕精品| 婷婷一区二区三区|