⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 read.me

📁 old-ucos-v1.11.zip ucos1.1版本
💻 ME
📖 第 1 页 / 共 2 页
字号:
 5) Added  the  #define  OS_STK_TYPE (see UCOS.H) to define the data type used
    for stacks.  This has been done  because some  processors work better when
    stacks are WORD alligned or LONG alligned as opposed to BYTE alligned.

 6) Added the  #define  OS_EXT (see UCOS.H)  which is used to  declare  GLOBAL
    variables  when  UCOS.C  is  compiled  and  declare the same  variables as
    'extern' for all other compiled files.

 7) 'OSIntNesting' has been declared 'global' instead of 'local'.  This allows
    you to INCREMENT OSIntNesting in your ISR instead of calling OSIntEnter().
    The reason I did this is twofold.  First, some processors (ex. 68HC11) can
    increment a variable using an indivisible instruction (a read-modify-write
    instruction) which  is  considerably  faster  than  calling  OSIntEnter().
    Second,  calling   OSIntEnter()  causes  interrupts  to  be  enabled  upon
    returning from OSIntEnter() which is undesirable for a  processor like the
    68HC11.   For the  68HC11, you MUST  clear  the  interrupt  source  BEFORE
    re-enabling interrupts!

/*$PAGE*/
March 6, 1995: V1.07
--------------------

 1) In  OSTaskDel(),  OSTaskDelSelf() and  OSTaskSuspend() the coded needed to
    check that you had not specified OS_PRIO_SELF in the following code:
        if (prio >= OS_MAX_TASKS)
    because OS_PRIO_SELF is 0xFF and is thus always greater than OS_MAX_TASKS.
    The new code looks like this:
        if (prio >= OS_MAX_TASKS && prio != OS_PRIO_SELF)
    Thanks to Mr George Dinwiddie for reporting this problem.
 2) OSSemCreate()  is now passed a UWORD instead of a WORD.  This allows up to
    65535 events to be  accumulated.  Because semaphores are now UWORDS, there
    is no need for  OSSemCreate() to check  for  cnt >= 0.   OSSemAccept() now
    returns a UWORD instead of a WORD.
 3) The  return  data  type for  OSTaskDelReq()  is now a  UBYTE  instead of a
    BOOLEAN.  If 'prio' is set to OS_PRIO_SELF, OSTaskDelReq() returns:
         OS_NO_ERR       if no task requested that the task delete itself
         OS_TASK_DEL_REQ if a  task requested that the task delete itself
     If 'prio' is set to OS_LO_PRIO, OSTaskDelReq() returns OS_TASK_DEL_IDLE.
     If 'prio' is not set to OS_LO_PRIO or to OS_PRIO_SELF then OSTaskDelReq()
     places a  request  to  the  desired  task to  delete  itself when it gets
     control of the CPU.

/*$PAGE*/
July  1, 1994: V1.06
--------------------

 1) This version  corrects a  problem that was found by   Mr Sai Kolluri  from
    Behring Diagnostics.   The problem occurs during the following sequence of
    events:
        1) A  low  priority  task  executes  and then pends on a  mailbox or a
           queue.
        2) A higher priority task then runs. This higher priority task posts a
           message to either the mailbox or the queue.
        3) Posting makes the lower priority task ready to run.
        4) The higher priority task  then  pends on the  mailbox or the queue.
        5) Because there is something in the queue, the  higher  priority task
           receives the message.
        6) The  higher priority task delays itself (calls OSTimeDly()).
        7) The lower priority task then gets to run because it was made  ready
           by the higher priority task.   However, because the higher priority
           task got  the  message  the  lower  priority  task will get a  NULL
           pointer  (which is not good!).   At  this point, the lower priority
           task could behave eratically.
    This  problem has  been  corrected and in doing so, the  mailbox and queue
    functions became more efficient.

 2) OSTaskChangePrio(),  OSTaskDel(),  OSTaskDelReq() and  OSTaskSuspend() now
    check to make sure that the specified priority is less than 63.


June 10, 1994: V1.05
--------------------

 1) This  version  corrects two bugs that were found by  Mr Tom Campbell  from
    GC Associates.

 2) Specifically, the  semaphore  count  should  not  have  been   decremented
    immediately  because  the  pending  task  could  be  made  ready to run by
    OSTimeDly() and thus, the count would be  incorrectly reduced by 1.   This
    prompted  me  to  rewrite  the  semaphore  management  functions and also,
    integrate   OSEventTaskResume()  in   all  OS???Post()  functions.   Also,
    OSEventCnt is no longer decremented when a task is suspended because there
    is no need to anymore.

 3) As mentionned above, I removed the function OSEventTaskResume().  Instead,
    the  code  from  this  function  has  been   integrated  in   OSSemPost(),
    OSMboxPost() and OSQPost().  This change increases the code size of  uC/OS
    in exchange for improved execution speed.
/*$PAGE*/
May 26, 1994: V1.04
-------------------

 1) This  version  does  not correct  any bugs since none have been  reported.

 2) By specifying  OS_PRIO_SELF  as an argument to  OSTaskDel(),  you can  now
    delete the calling task.  In other words, by making the following function
    call:

        OSTaskDel(OS_PRIO_SELF);

    you basically indicate that you want to delete the calling task.

 3) Added the  function  OSTaskDelReq()  which  allows a  task to request that
    another task deletes itself (see description in the code).

 4) Added  functions to  suspend  and  resume  a  task:   OSTaskSuspend()  and
    OSTaskResume().

 5) Improved the execution  speed of  OSTaskChangePrio() (by ~30%).  Interrupt
    disable  time of OSTaskChangePrio() has also improved: It's now 400 cycles
    (80186 Small Model) instead of 500.

 6) Reduced  the amount of time that  OSTaskDel()  disables interrupts.  Also,
    rescheduling only occurs when the task being  deleted is the current task.
    This avoid a  context switch if the current task is deleting another task.

 7) Modified how uC/OS handles  OSTCBStat.   OSTCBStat now uses bits to define
    whether a task is waiting for a semaphore, a mailbox, a queue or whether a
    task  has  been  suspended.   This  has  been  done  in  order  to support
    OSTaskSuspend() and OSTaskResume().
/*$PAGE*/
July 14, 1993: V1.03
--------------------

 1) This  version  does  not  correct  any bugs since none have been reported.

 2) The EX1 and EX2 directories  have been  renamed to EX1_x86S and  EX2_x86S,
    respectively to  make it clear that the  examples are for the  Intel 80x86
    processors SMALL model.   Note that the examples are for either an   Intel
    80186/88,  80286,  80386 or 80486 (not for an 8086/88).   Also, the  EX1.*
    and  EX2.* files have been  renamed to EX1S.* and EX2S.*, respectively.

 3) Unused code and functionality can now be disabled by setting the following
    #define from 1 to 0 in UCOS.H:
        OS_TASK_CHANGE_PRIO_EN
        OS_TASK_DEL_EN
        OS_SEM_EN
        OS_MBOX_EN
        OS_Q_EN

 4) Added OSTimeDlyResume() to resume a  delayed task.   The delayed task must
    have  been  delayed by  calling  OSTimeDly().  A task waiting for an event
    should not be resumed by calling OSTimeDlyResume() because this would make
    it look  like a  timeout  occurred to the  task  pending for a  SEMAPHORE,
    MAILBOX or QUEUE.

 5) Added  OSTCBCur = OSTCBHighRdy  in  OSStart()  to  reduce  the  amount  of
    assembly language code in the target specific files.

 6) Changed 'p' to 'prio' for consistency in UCOS.C

 7) Added OSSemAccept() which allow you to obtain a  resource  without pending
    the calling  task if the  semaphore count is less than or equal to 0.

 8) OSMboxAccept()  which  allow you to  obtain a  message  from  the  mailbox
    without pending the calling task if the mailbox is empty.

 9) Added OSQAccept() which allow you to obtain a message from a queue without
    pending the calling task if the queue is empty.

10) Added more comments to UCOS.C.

11) Improved OSTCBInit() (code size and speed).

12) Files 80186S.H, 80186S_A.ASM and 80186S_C.C  have been changed to Ix86S.H,
    Ix86S_A.ASM and Ix86S_C.C,  respectively.   This has been done for sake of
    consistency with the large model.   Also, the 'I' indicates that the  code
    is for an Intel  processor.   The 'x' means that the code will work for an
    80186, 80286, 80386 and 80486.  I hope this does not inconvenience you too
    much.

13) Files I186L.H, I186L_A.ASM  and  I186L_C.C  have  been changed to Ix86L.H,
    Ix86L_A.ASM and  Ix86L_C.C, respectively.   This has been done for sake of
    consistency.    Also, the 'I'  indicates  that  the code is  for  an Intel
    processor.    The 'x'  means that the code will work for an  80186, 80286,
    80386 and 80486.   I hope  this does not inconvenience you too much.

14) The  function NewTickISR() has been changed to OSTickISR(). OSTickISR() is
    now  found in Ix86S_A.ASM for the SMALL model and in file Ix86L_A.ASM  for
    the LARGE model.  This reduces the file count by one.
/*$PAGE*/
June 3, 1993: V1.02
-------------------

1) One line was  missing in  the  all  of  the  PEND  functions:  OSSemPend(),
   OSMboxPend() and OSQPend().  The code missing is given below:

       OSTCBCur->OSTCBEventPtr = pevent;

   This  omission  only   affected  the   functions   OSTaskChangePrio()   and
   OSTaskDel(). This has been corrected. Thank you Mr Chris Thorne from COMSAT
   for pointing out this errata.


December 21, 1992: V1.01
------------------------

1) Some computers have problems  running  the two  examples  provided  in  the
   book.  This problem is due to slow video adapters and DOS.  To correct this
   problem,  the  DS  register  must be saved on the  stack during an ISR or a
   context switch.   The following files have been changed accordingly:
       80186S_A.ASM
       80186S_C.C
       TICK.ASM      (In both EX1 and EX2)

2) OSTCBStkPtr  in  OS_TCB (file UCOS.H) is now a 'far'  pointer.   Also,  the
   maximum number of tasks in UCOS.H has been increased to 64.

3) EX1.C Now creates 62  identical  tasks instead of just 10.  This is done to
   better show uC/OS's  capabilities.   On  my 386/16, the CPU usage was close
   to 90%! Note that the high CPU utilization is mostly attributed to DOS call
   to write to the screen and not uC/OS.

4) The source code for the  80186/80188  LARGE  memory model has been included
   and  is  found  in  the  \SOFTWARE\UCOS\80186L  directory.   Note  that the
   performance data is not yet  available.   Note that the  source  files  are
   I186L_A.ASM, I186L_C.C and I186L_C.H.


September 9, 1992: V1.00
------------------------

1) For  future  compatibility,  I  would  recommend  that  you do not use task
   priorities 0..4 and 60..62.   I am reserving these task priorities for such
   things as CPU usage and debug.   Your  application  can  thus have up to 55
   tasks!

2) OSTCBInit() has been changed to reduce the amount of  time  interrupts  are
   disabled.  The functionality is the same.
/*$PAGE*/
------------------------ EMBEDDED SYSTEMS BUILDING BLOCKS --------------------
                      Complete and Ready-to-Use Modules in C

    My new book is availabe from R&D Publications (913-841-1631). This book is
like  a  library  of  portable  modules  specifically  designed  for  embedded
systems.

    The book assumes that you are using  uC/OS  but most  (if not all)  of the
code can be ported to just about any other real-time kernel. The book contains
the following modules:

    1) Keyboard scanning routine
           Scans keyboard matrices from 3x3 to 8x8
               (but can be easily expanded to support larger keyboards)
    2) Multiplexed LED driver
           Controls LED matrices from 2x2 to 8x8
               (but can be easily expanded to support larger arrays)
    3) Character LCD module driver
           Any character LCD module based on the Hitachi HD44780 chip.
    4) Clock/calendar module
           Hours, Minutes, Seconds
           Month, Day, Year
           Time stamps
    5) Timer manager module
           You can have up to 250 countdown timers.
           Each timer has a resolution of 1/10 sec.
           Each timer can timeout after 99 minutes and 59.9 seconds
           When a timer times out, a function can be executed.
    6) Discrete I/O manager
           Manages up to 250 discrete inputs and 250 discrete outputs
           Discrete input channels can:
               - Detect lows,
               - Detect highs,
               - Detect transitions and execute a function
               - Count transitions
                     (low to high or high to low or both)
               - Toggle ON, toggle OFF
           Discrete output channels can:
               - Turn an output ON or OFF
               - Blink an output
    7) Analog I/O manager
           Manages up to 250 analog inputs and 250 analog outputs
           Converts ADC counts to Engineering Units
           Convert Engineering Units to DAC counts
           Each channel can call a linearization function that you
               define.
    8) Asynchronous serial I/O driver
           Provides an interrupt driven driver for COM1 and COM2 on the PC.
           Provides input and output buffering.
           The code can be easily ported to other serial devices.
/*$PAGE*/
    The book also contains a revised chapter on 'Real-Time Concepts' and  also
a chapter discussing fixed-point math.

    The emphasis of this book is  that you  should be  able to  use  the  code
'as is' in your embedded application.   To that effect, a diskette IS included
with the book and contains all the  source code  (mostly in C).   The book and
the diskette cost only $39.95.

    I also give you the execution time of just about every function  (assuming
an Intel 80386 running at 16 MHz) so that you can  forecast the  CPU  usage of
your application.  This is  especially useful if you are designing for the new
Intel 386EX processor.   I also list the  amount of  ROM and RAM  required for
each module.    For  just  about every  function, I also provide the amount of
stack required to allow you to  determine how much stack space each task needs
to allocate.

    This is the only book of its kind. If you write code for embedded systems,
this book is for you.

    If you liked "uC/OS, The Real-Time Kernel", you will love this one!



Thanks for your support,


Jean J. Labrosse

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -