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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? history.txt

?? 基于OMAP1510的Nucleus移植代碼
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
        }
        
In TCC_Reset_Task since we are doing a complete reset we need to ensure that 
tc_su_mode is 0 since the task will be started in user mode.  TCC_Task_Shell
can not return and therefore left the task in supervisor mode when the task 
completed. If we were to not re-initialize this field the task would become 
locked in user mode and API would fail.

#if (NU_SUPERV_USER_MODE == 1)
        task -> tc_su_mode = 0;
#endif

**********************************************************************************
Version 1.13                                                      October 31, 2000
**********************************************************************************

This update contains bug fixes and enhancements. The following is a description of
the fixed bugs:

- TCCE.C (2 fixes)  TCCE_Task_Sleep, TCCE_Suspend_Service

SYMPTOM: Compiler warning

SOLUTION:

In file tcce.c, line 887, this warning is generated:

"tcce.c", line 887: Warning: odd unsigned comparison with 0: '<='
tcce.c: 1 warning, 0 errors, 0 serious errors

The original line is :

    /* If parameter is negative or zero, return */
    if (ticks <= 0)
        return;


This was changed to:

    /* If parameter is zero, return */
    if (ticks == 0)
        return;

as this parameter is an unsigned and can never be less than zero.


SYMPTOM: If the task state is terminated or finished when NU_Suspend_Task 
is called we returned NU_SUCCESS (with error checking enabled). We should 
return a failure code.  Note that no action is taken, the task is not moved 
to a pure suspended state via the call.

SOLUTION:

In tcce.c, TCCE_Suspend_Service, we added the following check:

 if ((task->tc_status == NU_FINISHED) || (task->tc_status == NU_TERMINATED))

             /* Can't suspend a task in a finished or terminated state */
             status =  NU_INVALID_SUSPEND;

*****************************************************************************

- DM_EXTR.H  DMC_Established_Memory_Pools, DMC_Memory_Pool_Information,
             DMC_Memory_Pool_Pointers
- SM_EXTR.H  SMC_Established_Memory_Pools, SMC_Memory_Pool_Information,
             SMC_Memory_Pool_Pointers

SYMPTOM: Compiler warnings

SOLUTION: Replaced the DMC and SMC leading characters to DMF and SMF 
respectively.


/* Information retrieval functions.  */

UNSIGNED        DMC_Established_Memory_Pools(VOID);
STATUS          DMC_Memory_Pool_Information(NU_MEMORY_POOL *pool_ptr, 
                  CHAR *name, VOID **start_address, UNSIGNED *pool_size,
                  UNSIGNED *min_allocation, UNSIGNED *available,
                  OPTION *suspend_type, UNSIGNED *tasks_waiting, 
                  NU_TASK **first_task);
UNSIGNED        DMC_Memory_Pool_Pointers(NU_MEMORY_POOL **pointer_list, 
                                                UNSIGNED maximum_pointers)

The function names were wrong.  They should be DMF_Established_Memory_Pools(),
etc, ie so we replaced DMC_ with DMF_. Same for SMC_ changed to SMF_.

*****************************************************************************

- HIC.C  HIC_Make_History_Entry

SYMPTOM: Exception due to no current active thread at time of function call.

SOLUTION:

In HIC.C (Generic) the function HIC_Make_History_Entry has the macro 
TCT_Get_Current_Protect(). This can be invoked before there is a current 
thread. This will cause an exception in MNT as well as any port having 
either MMU support or no physical memory at location 0 + protect offset.

This code:

/* Pickup current protection.  */
    save_protect =  TCT_Get_Current_Protect();

was changed as follows to fix this problem, assuring we are not in 
initialization before calling TCT_Get_Current_Protect:

/* If we are not in initialization, get the current protection state */
    if (INC_Initialize_State !=  INC_END_INITIALIZE)

        /* Pickup current protection.  */
        save_protect =  TCT_Get_Current_Protect();

    else
        /* we are in initialization, just clear save_protect */
        save_protect = 0; 

*****************************************************************************

- TMSE.C  TMSE_Create_Timer

SYMPTOM: Timer doesn't expire for an exceptionally long time period.

SOLUTION:

If NU_Create_Timer() sets a timer to expire in 0 ticks, it does not in fact 
expire until 2^32 ticks have occurred, due to in the routine
TMT_Timer_Interrupt, the value of the count-down timer is decremented before
it is tested against zero.

We added this check to TMSE_Create_Timer to determine if a parameter of 0 
is used and return an error code:

     else if (initial_time == 0) 
    
        /* Invalid time value.  */
        status =  NU_INVALID_OPERATION;

*****************************************************************************

- PICE.C  PICE_Receive_From_Pipe, PICE_Send_To Pipe,
          PISE_Broadcast_To_Pipe, PISE_Send_To_Front_Of_Pipe, 
- QUCE.C  QUCE_Send_To_Queue, QUCE_Receive_From_Queue
          QUSE_Broadcast_To_Queue, QUSE_Send_To_Front_Of_Queue


SYMPTOM: Memory gets corrupted as we can overwrite an area the size of the
largest INT value, in bytes.

SOLUTION:

We added this check:

else if (size == 0)
    
        /* Indicate that the message size is invalid.  */
        status =  NU_INVALID_SIZE;

as we do not allow 0-sized messages to be sent/received from 
pipes or queues.

*****************************************************************************

- TCI.C

SYMPTOM: None, just legacy code that needed removing.

SOLUTION:

In tci.c:

extern VOID            *TCD_Protect_Thread

This was legacy code, not used and was removed.

*****************************************************************************

- TMC.C  TMC_Start_Timer

SYMPTOM: System could crash. An overflow occurs and the timer will never
return.

SOLUTION:

In the file TMC.C, line 417:

   if (!TMD_Active_List_Busy)
   {
      /* Calculate the elapsed amount of time from the last timer
         request.  */
      elapsed =  TMD_Timer_Start -  TMT_Read_Timer();

      /* Adjust the first entry in the timer list and the timer
         start value accordingly.  */
      TMD_Timer_Start =  TMD_Timer_Start - elapsed;
      list_ptr -> tm_remaining_time =
                      list_ptr -> tm_remaining_time - elapsed;
   }

When the variable "elapsed" is greater than "tm_remaining_time" an overflow
occurs and the timer will never return.

Corrected the code as follows:

if (!TMD_Active_List_Busy)
{
   /* Calculate the elapsed amount of time from the last timer request.  */

   elapsed =  TMD_Timer_Start -  TMT_Read_Timer();

   /* Adjust the first entry in the timer list and the timer
      start value accordingly.  */
   TMD_Timer_Start =  TMD_Timer_Start - elapsed;
      
   /* Make sure the remaining time is never below zero! */
   if (list_ptr -> tm_remaining_time > elapsed)
   {
      list_ptr -> tm_remaining_time = list_ptr -> tm_remaining_time - elapsed;
   }
   else
   {
      list_ptr -> tm_remaining_time = 0;
   }
}

*****************************************************************************

- TCC.C  TCC_Task_Timeout

SYMPTOM: Task never wakes after signal sent to it. When you activate a 
signal the target tasks' current state is placed in tc_saved_status and 
tc_status is made NU_READY. When the signal handler finishes the 
tc_saved_status is placed back int tc_status restoring the task state. 
When the NU_Sleep() expires tc_status is made NU_READY. 

Unfortunately this means that when the signal handler finishes the saved 
sleep state is restored and the task never wakes.

SOLUTION:

Instead of blindly passing tc_status to resume task, a test must be made 
to see if the task has a signal active. If a signal is active then 
tc_saved_status should be passed to resume task.

Replace

    /* Pickup the suspension protection saved-off when the task was 
       suspended.  */
    suspend_protect =  task -> tc_suspend_protect;
     task_status =      task -> tc_status;  

with

    /* Pickup the suspension protection saved-off when the task was 
       suspended.  */
    suspend_protect =  task -> tc_suspend_protect;
    
    /* Is a signal handler currently running?*/ 
    if (task -> tc_signal_active)

        /* Use the saved status for current task status */
        task_status =      task -> tc_saved_status;
    else

        /* Just use the current task status */     
        task_status =      task -> tc_status;  

*****************************************************************************

- TC_DEFS.H

SYMPTOM: Compiler warning

SOLUTION:

#define         TC_MAX_GROUPS           TC_PRIORITIES/8

was changed to:

#define         TC_MAX_GROUPS           (TC_PRIORITIES/8)

*****************************************************************************

- *i.c

SYMPTOM: Compiler warnings

SOLUTION:

All the initialization code modules (eg tmi.c) omit to #include the 
relevant prototypes (eg #include "tm_extr.h") and thus provoke warnings 
when you ask the compiler to check that all functions definitions have a 
corresponding declaration.  (In general Nucleus conforms to this coding 
convention, except for the initialization modules.)

All *.i.c files now #include the _defs.h and _extr.h files for that 
component.

*****************************************************************************
- TCS.C  TCS_Change_Time_Slice

SYMPTOM: If a call to NU_Change_Time_Slice is made dynamically and the
task was not created with a time slice, the time slice is set for that task
but no task switches occur due to the new time slice.


SOLUTION: Added the following "system notification" so PLUS is aware
the task has a defined time slice:

task -> tc_time_slice =      time_slice;
task -> tc_cur_time_slice =  time_slice;

/* Bug fix. Let the system know we have started a new time slice */
TMD_Time_Slice_State = TM_ACTIVE;


/* Release protection of information.  */
TCT_Unprotect();

****************************************************************************

The sole enhancement to this release is we added a new function. In tmf.c, 
the new function TMF_Get_Remaining_Time(NU_TIMER *timer_ptr) returns the 
remaining time before expiration for the specified timer. Please see the 
Nucleus PLUS Reference Manual and Internal Manual for a more full 
description of this function.

*****************************************************************************
Nucleus PLUS generic version 1.13a was created on 04/10/01 by Chris Sheppard and
contains the following changes:

This release of the Nucleus PLUS kernel has been instrumented for Nucleus 
ProView.  For more information about Nucleus ProView, consult an ATI sales 
representative.

The following files that had the macros changed from RTVIEW_PROF to 
INCLUDE_PROVIEW are: 
tms.c, tmc.c, tcs.c, tcc.c, pis.c, pic.c, ioc.c, sms.c, smc.c, 
hi_defs.h, qus.c, quc.c, mbs.c, evc.c, dmc.c, mbc.c, pmc.c.


*****************************************************************************

- CSC.C 

Added checks for use of inline functions to avoid ARM Tools errors.

*****************************************************************************

TCC.C  (3 fixes) TCC_Register_LISR 

SYMPTOM: Users can't register a LISR for the last interrupt source because 
the check (vector >= NU_MAX_VECTORS) erroneously reports it as an invalid 
vector number.

SOLUTION: Changed the conditional to read (vector > NU_MAX_VECTORS).


SYMPTOM: While searching the TCD_LISR_Pointers list the last entry is
ignored. 

SOLUTION: Changed the following code:

while ((TCD_LISR_Pointers[index] != NU_NULL) && (index < NU_MAX_LISRS))
   
   index++;
                
   /* Determine if an empty slot was found.  */
   if (index < NU_MAX_LISRS)

to

while ((TCD_LISR_Pointers[index] != NU_NULL) && (index <= NU_MAX_LISRS))
   
   index++;
                
   /* Determine if an empty slot was found.  */
   if (index <= NU_MAX_LISRS)

*****************************************************************************

TCD.C

Changed 

VOID    (*TCD_LISR_Pointers[NU_MAX_LISRS])(INT vector);

to

VOID    (*TCD_LISR_Pointers[NU_MAX_LISRS+1])(INT vector);

as the index to search this list is set to 1 before the search.

****************************************************************************

MBS.C  MBS_Broadcast_To_Mailbox

SYMPTOM:  The list of tasks suspended waiting on a mailbox may get corrupted
during a NU_Broadcast_To_Mailbox call.

SOLUTION: Added a new local variable, MB_SUSPEND *next_suspend_ptr; to
hold a pointer to the next task on the suspend list.

The old code looked like:

   /* Wakeup each task waiting.  */
   preempt =  preempt |
              TCC_Resume_Task((NU_TASK *) suspend_ptr -> mb_suspended_task,
                                                        NU_MAILBOX_SUSPEND);

   /* Move the suspend pointer along to the next block. */
   suspend_ptr =  (MB_SUSPEND *) suspend_ptr -> mb_suspend_link.cs_next;

} while (suspend_ptr != suspend_head);
  

This was changed to save off the suspend pointer BEFORE we do the 
Resume_Task and then

   /* Move the suspend pointer along to the next block. */
   next_suspend_ptr =  (MB_SUSPEND *) suspend_ptr -> mb_suspend_link.cs_next;

   /* Wakeup each task waiting.  */
   preempt =  preempt |
              TCC_Resume_Task((NU_TASK *) suspend_ptr -> mb_suspended_task,
                                                        NU_MAILBOX_SUSPEND);
   suspend_ptr = next_suspend_ptr;             

} while (suspend_ptr != suspend_head);

*****************************************************************************

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一卡2卡三卡4卡5免费| 欧美不卡一区二区三区四区| 国产传媒欧美日韩成人| 五月天久久比比资源色| 亚洲欧美一区二区三区久本道91| 精品国免费一区二区三区| 欧美精选午夜久久久乱码6080| 在线观看亚洲a| 欧美性猛交一区二区三区精品| 91在线观看地址| 色婷婷av一区| 欧美日韩在线播放一区| 欧美色图激情小说| 欧美一区二区福利在线| 精品不卡在线视频| 国产精品久久久久久亚洲毛片| 亚洲.国产.中文慕字在线| 国产精品免费aⅴ片在线观看| 中文字幕免费不卡| 成人欧美一区二区三区白人| 亚洲精品久久嫩草网站秘色| 成人免费精品视频| 久久久久久久久久久久久久久99 | 国产欧美日韩久久| 久久精品国产99国产| 欧美久久一区二区| 亚洲成人精品影院| 欧美剧情电影在线观看完整版免费励志电影| 国产精品二三区| 国产91精品精华液一区二区三区| 精品久久人人做人人爱| 久久国产精品无码网站| 日韩欧美中文字幕精品| 美女在线视频一区| 精品国产sm最大网站| 国产成人av一区二区三区在线观看| 精品国产123| 国产黑丝在线一区二区三区| 国产日韩影视精品| 色婷婷av一区二区三区软件| 日韩精品亚洲专区| 亚洲午夜激情av| 欧美性一二三区| 久久精品国产亚洲5555| 国产精品免费观看视频| 欧美精品精品一区| 韩国毛片一区二区三区| 国产午夜精品久久久久久免费视| 91天堂素人约啪| 日本aⅴ精品一区二区三区| 国产欧美一区二区三区在线看蜜臀| 一本色道综合亚洲| 美女视频免费一区| 中文字幕一区二区不卡| 欧美精品日韩一本| 高清国产一区二区| 午夜精彩视频在线观看不卡| 欧美国产激情二区三区| 欧美一卡二卡在线| 91麻豆国产在线观看| 国产综合一区二区| 视频一区欧美精品| 亚洲色图清纯唯美| 国产欧美一区二区精品性色| 欧美性色黄大片手机版| 不卡的电视剧免费网站有什么| 成人一道本在线| 理论片日本一区| 日韩中文字幕区一区有砖一区| 国产精品二三区| 国产色产综合色产在线视频| 日韩午夜电影在线观看| 欧美亚洲愉拍一区二区| av不卡免费在线观看| 东方aⅴ免费观看久久av| 精品一区二区久久久| 婷婷国产v国产偷v亚洲高清| 亚洲综合视频网| 亚洲综合网站在线观看| 一区二区在线观看av| 亚洲欧美日韩一区二区| 国产精品国产三级国产aⅴ无密码| 国产亚洲精品aa| 国产午夜精品一区二区| 国产精品欧美久久久久一区二区| 久久久久久夜精品精品免费| 精品久久久久香蕉网| 日韩午夜中文字幕| 久久夜色精品国产噜噜av| 欧美mv日韩mv亚洲| 精品国产91洋老外米糕| 国产欧美日韩精品a在线观看| 国产日韩视频一区二区三区| 中文字幕在线不卡视频| 亚洲欧美日韩在线不卡| 亚洲成人免费看| 日韩成人午夜精品| 国产精品一区一区| 久久尤物电影视频在线观看| 久久久久久久久一| 亚洲视频资源在线| 亚洲国产综合91精品麻豆| 免费成人在线观看视频| 国产精品一品视频| 国产精品入口麻豆九色| 午夜欧美大尺度福利影院在线看| 三级影片在线观看欧美日韩一区二区| 精品一区二区久久久| 色综合视频在线观看| 日韩视频免费观看高清完整版 | 国产二区国产一区在线观看| 99精品视频一区二区三区| 欧美日韩国产精品自在自线| 久久色.com| 亚洲国产精品久久不卡毛片 | 亚洲一二三四在线| 国产精品123| 亚洲综合免费观看高清完整版| 国产美女精品在线| 777a∨成人精品桃花网| 国产精品久久久久一区| 蜜桃av噜噜一区| 欧美色综合影院| 亚洲欧洲精品一区二区三区| 久久精品国产99久久6| 欧洲一区在线观看| 国产精品女人毛片| 国产综合色视频| 精品国产一区二区三区忘忧草| 亚洲国产精品麻豆| 91成人在线观看喷潮| ●精品国产综合乱码久久久久| 国产一区二区中文字幕| 日韩美女一区二区三区四区| 99精品欧美一区二区蜜桃免费| 2021久久国产精品不只是精品| 人人爽香蕉精品| 日韩欧美中文字幕一区| 理论电影国产精品| 欧美成人猛片aaaaaaa| 久久精品国产秦先生| 日韩美一区二区三区| 久久电影网电视剧免费观看| 一区二区三区在线播放| 日本高清不卡一区| 亚洲不卡av一区二区三区| 欧美影院一区二区| 丝袜亚洲另类欧美| 精品国产电影一区二区 | 欧美电影在哪看比较好| 婷婷久久综合九色综合绿巨人| 欧美群妇大交群中文字幕| 另类小说色综合网站| 国产精品美日韩| 欧美日韩一本到| 国产在线乱码一区二区三区| 国产精品成人免费在线| 亚洲日本中文字幕区| 在线播放视频一区| 国产在线精品一区二区不卡了| 国产精品国产自产拍在线| 色悠久久久久综合欧美99| 蜜桃精品视频在线| 亚洲日韩欧美一区二区在线| 欧美一区二区在线不卡| 东方aⅴ免费观看久久av| 亚洲国产精品麻豆| 欧美精彩视频一区二区三区| 欧美在线影院一区二区| 国产成人小视频| 免费观看在线色综合| 1000精品久久久久久久久| 欧美一区中文字幕| 99麻豆久久久国产精品免费优播| 日韩经典中文字幕一区| 自拍偷拍亚洲综合| 久久久精品黄色| 日韩精品综合一本久道在线视频| 91色.com| www.成人在线| 日韩欧美国产综合一区| eeuss影院一区二区三区 | 日本高清不卡aⅴ免费网站| 国产精品一区二区不卡| 轻轻草成人在线| 午夜精品福利在线| 一区二区三区精品视频| 国产精品狼人久久影院观看方式| 精品欧美一区二区久久| 欧美情侣在线播放| 欧美色爱综合网| 欧美色欧美亚洲另类二区| 91污在线观看| 99久久精品国产毛片| gogo大胆日本视频一区| 豆国产96在线|亚洲| 成人美女在线视频| 9l国产精品久久久久麻豆| 成人av中文字幕| jvid福利写真一区二区三区|