📄 read.me
字号:
uC/OS, The Real-Time Kernel
Companion Diskette
uC/OS Version 1.11
READ ME FILE
----------------------------- REPORTING PROBLEMS -----------------------------
If you find a problem (i.e. bug) in uC/OS, do not hesitate to report the
problem to either:
1) The publisher:
Miller Freeman, Inc. (R&D Books)
1601 West 23rd Street, Suite 200
Lawrence, Kansas 66046
(913) 841-1631
(913) 841-2624 (FAX)
INTERNET: rdorders@rdpub.com
WEB : http://www.rdbooks.com
2) Through CompuServe:
My CompuServe address is 72644,3724
3) Through the INTERNET:
My INTERNET address is 72644.3724@compuserve.com or,
Jean_Labrosse@compuserve.com
4) By writing to me:
Jean J. Labrosse
9540 N.W. 9th Court
Plantation, FL 33324
U.S.A.
5) By calling me (after 8PM Eastern time):
(954) 472-5094
(954) 472-7779, FAX
Make sure that the problem you are reporting is in uC/OS and not your
application. If you in fact discover a bug in uC/OS, call the publisher and
see if they are shipping the same version of the code that you are using.
If you are using an older version, you should first get the lastest
version from the publisher. Most likely, the bug has been found by someone
else and has been corrected. In this case, you can obtain an upgrade by
contacting the publisher (see SOFTWARE UPGRADES).
If you have the same version as the publisher then you may have uncovered
a problem. I will do my best to correct the problem and get an answer back
to you as quickly as possible. If you found a problem with uC/OS, you will
get a FREE upgrade.
/*$PAGE*/
------------------------------ SOFTWARE UPGRADES -----------------------------
As you can see, I have been trying to support uC/OS. When bugs are found,
I do my best to correct them. It is virtually impossible to notify everybody
that purchased the code (i.e. the diskette) to tell them that a new version is
available. You should occasionally check with the publisher to see what
version they are shipping. The cost to upgrade will be less than the price you
paid for the original diskette. You will, however, have to send back your
original diskette to the publisher to get the upgrade price.
I will not be upgrading the publisher everytime I add new features to
uC/OS. However, I will upgrade the publisher whenever a bug is discovered and
fixed.
If you find a bug in the most recent release, you will get a FREE upgrade.
I would highly suggest that you resist changing the STYLE of the code
unless you don't mind spending many hours doing so everytime you upgrade.
/*$PAGE*/
--------------------- FEQUENTLY ASKED QUESTIONS / PROBLEMS -------------------
1) My computer/processor 'hangs' when I run uC/OS!
An executable for uC/OS is provided on the diskette. If uC/OS still hangs
with the executable provided on the floppy, try to contact me. If uC/OS
does not hang with the executable provided on the floppy then you need to
look at 'OSIntCtxSw' (see pages 62, 63 and 67 in the book) which is
processor specific. The very first instruction in 'OSIntCtxSw' may need
some adjustment, i.e. ADD SP,6. You will notice that for the SMALL memory
model, the constant is 6 while for the LARGE model, it is 10! If you use
another processor, compiler or memory model, you may need to adjust the
constant.
2) Where should I enable the 'tick' interrupt ?
You should enable the tick interrupt AFTER you have started uC/OS in a
'startup' task as shown in the example code. This way, the OS is in a
state ready to accept interrupts and can thus process interrupts.
3) The executable on the floppy works fine but when I compile with Borland
C++ V3.0, the program crashes ?
uC/OS was actually compiled with V3.1 and not V3.0. You may want to get
that version of the compiler (or higher). I actually have uC/OS running
with V4.51. In any event, try looking at item 1).
4) Does uC/OS work with Microsoft C/C++ ?
Yes, you will have to adjust the SP offset constant (see item 1)) and
disable stack checking. Others have used the Microsoft compiler without
too many problems.
/*$PAGE*/
5) Are there other ports available for uC/OS ?
Yes. uC/OS has been ported to a large number of processors. See 6) for
ports available from chip vendors.
You can contact me to obtain the port you are interrested in.
/*$PAGE*/
6) uC/OS ports available from microprocessor/microcontroller manufacturers?
a) Philips Semiconductors, Inc.
Processor : XA
Description : The Philips Semiconductors XA (eXtended Architecture)
family of 16-bit microcontrollers provides an upward
compatibility path for 80C51 users who need higher
performance or more than 64K of program/data memory.
The high-performance Philips XA supports the bit-oriented
operations of the 80C51 while incorporating support for
multitasking operating systems such as uC/OS and high-
level languages such as C. Existing 80C51 code can be
translated to run on the XA. The speed of the XA, at
least 10 to 100 times greater than the 80C51, gives
designers an easy path to truly high performance embedded
control.
App. Note : You may also want to get a copy of AN-711, an application
note I wrote for Philips describing how uC/OS was ported
to the XA.
FTP Site : ftp://ftp.ibsystems.com/pub/philips-mcu/bbs/xa/rtos
Filename : UCOS_XA.EXE
BBS : 1-800-451-6644
1-408-991-2406
31-40-2721102
b) VLSI Technology, Inc.
Processor : ARM
Description : The ARM is a 32-bit RISC processor.
Contact : Art Sobel
408-434-7671
art.sobel@sanjose.vlsi.com
FTP Site : ftp.vlsi.com
Login : armsw
Password : JStart
Instructions: cd outpoing
bin
get uCOS.tar.gz
bye
/*$PAGE*/
----------------------------- uC/OS RELEASE NOTES ----------------------------
December 9, 1997: V1.11
-----------------------
1) Removed two lines in IX86L_A.ASM, function OSStartHighRdy, because the
code didn't do anything. This was reported by Mr Mike Hostetler of
BITWORKS.
2) Added code to save the SS register in EX1L.C. This ommission was
reported by Mr Mike Hostetler of BITWORKS.
3) Added a way for OSTaskDelReq() to notify its caller whether a task has
been deleted or not. OSTaskDelReq() now returns OS_TASK_NOT_EXIST if the
requested task has been deleted and OS_NO_ERR if the task is still active.
This suggestion was provided by Mr Mike Hostetler of BITWORKS.
4) In ALL processor versions, OSTaskCreate() MUST be changed as follows. The
code prevents other tasks from creating another task at the same priority,
at the same time. This situation was very unlikely to happen because your
application should not have been doing this in the first place anyway.
This condition was reported by Mr. Alain Chebrou.
UBYTE OSTaskCreate(.....)
{
??? *stk;
UBYTE err;
OS_ENTER_CRITICAL();
if (OSTCBPrioTbl[p] == (OS_TCB *)0) {
OSTCBPrioTbl[p] = (OS_TCB *)1; <<< ADD this code!
OS_EXIT_CRITICAL();
.
.
.
if (err == OS_NO_ERR) {
if (OSRunning) {
OSSched();
}
} else { <<< ADD this code!
OSTCBPrioTbl[p] = (OS_TCB *)0; <<< ADD this code!
}
}
.
.
}
July 18, 1997: V1.10
--------------------
1) The local variable 'cnt' in the function OSSemAccept() should have been
declared UWORD instead of WORD. This has now been corrected.
2) I significantly improved the performance of the test code by writing
directly to video RAM of the PC. This assumes that you have a VGA adapter
on your PC (almost everybody does by now!). If you have a monochrome
adapter and the .EXE supplied on the floppy doesn't work then, you may
want to try to change the constant 0xB800 to 0xB000 in the display
functions (i.e. see TEST.C).
3) Wrapped all the code associated with SEMAPHORES, MAILBOXES and QUEUES with
OS_SEM_EN, OS_MBOX_EN, and OS_Q_EN, respectively.
4) Added comments to the code.
5) A bug was discovered by Mr Leor Weinstein of PantaSoft. The function
OSTimeDlyResume() has an error in the first assignment to ptcb as follows:
ptcb = (OS_TCB *)&OSTCBPrioTbl[prio];
should be:
ptcb = (OS_TCB *)OSTCBPrioTbl[prio];
same without '&'.
6) Mr Leor Weinstein also suggested that some code and variables be
conditionally compiled in order to save memory. This has been done.
7) Mr Daniel Wisehart suggested that the PSW of 80x86 processors be
initialized to 0x0202 instead of 0x0200 as per required by Intel.
8) Mr J. Picard suggested that the order of the MOV instruction for 80x86
processors w/r to loading and storing the SS:SP registers in the large
model be changed. Thus, the following code has been changed from:
MOV SP,ES:[BX]
MOV SS,SS:[BX+2]
to:
MOV SS,SS[BX+2]
MOV SP,SS[BX]
June 21, 1996: V1.09
--------------------
1) The configuration #defines found in UCOS.H have now been removed from this
file and moved to a new file called OS_CFG.H which is assumed to be
application specific. Also, all processor specific #defines must now be
placed in the processor's .H file. I thus intend to have OS_CFG.H contain
all PRODUCT specific #defines while the processor's .H file will contain
NON-PRODUCT specific #defines and macros (i.e. processor specific code).
2) Mr. Uri Sabadosh reported a problem with OSMboxPend() and OSQPend(). A
race condition exist in the following scenario. There are two tasks, 8
and 9. Task 9 PENDs on mailbox 'Mbox' with a timeout. The ticker readies
task 9 because the timeout has elapsed but, before task 9 gets a chance to
run, task 8 (higher priority) POSTs a message into 'Mbox'. At that point,
task 9 has timed out waiting for the message but, the message has been
placed in task's 9 OS_TCB. When task 9 got to execute it checked for a
timeout instead of checking for a message first. In this scenario, the
message was lost! The problem has been corrected.
3) I added the test files for the LARGE model of the Intel 80x86. You will
find these files in the \SOFTWARE\UCOS\EX1_X86L directory.
July 21, 1995: V1.08
--------------------
1) The following changes have been implemented to support futur enhancements
to uC/OS and to correct a bug. The overall functionality of uC/OS has
otherwise not been changed in this version from V1.07.
2) V1.08 corrects a bug reported by Mr Gene Chouiniere on 6/9/95. The bug
occurs when a task pends on a queue or a mailbox with a timeout and is
subsequently suspended by another task. If OSTimeTick() decrements the
timeout to 0 before the suspension is removed the task is not made
ready-to-run by OSTaskResume() and the task thus 'hangs'. The correction
was to make OSTimeTick() leave 1 tick if the task is suspended. The task
will be made ready-to-run on the next tick following the removal of the
suspension.
3) Changed 'far' to 'OS_FAR'. This allows the keyword 'far' to be used in a
different context than the one assumed by Intel for the x86 processors.
4) Added the #define OS_IDLE_TASK_STK_TOP (see UCOS.H) which is used to
define the index into OSTaskIdleStk[] where the top of stack starts.
This has been done to support processors that have stacks starting at low
memory and which grows upwards as opposed to downwards.
OS_IDLE_TASK_STK_TOP is used in OSInit() to initialize the idle task
stack.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -