From 48bc42b3a6c1073fdfbcb2f06a7bc2d47441db7f Mon Sep 17 00:00:00 2001
From: patacongo
Date: Wed, 14 Mar 2007 18:58:21 +0000
Subject: [PATCH] Add 8052 IRQ test; Fix places where IDLE task could try to
wait on semaphores
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@61 42af7a65-404d-4744-a932-0658087f49c3
---
Documentation/NuttX.html | 88 +++++++++++++++++++++++++-----
Documentation/codesize-070301.xls | Bin 104448 -> 0 bytes
2 files changed, 74 insertions(+), 14 deletions(-)
delete mode 100644 Documentation/codesize-070301.xls
diff --git a/Documentation/NuttX.html b/Documentation/NuttX.html
index c048fe47225..99753437e5f 100644
--- a/Documentation/NuttX.html
+++ b/Documentation/NuttX.html
@@ -3,12 +3,22 @@
NuttX
-
-
-Under Construction
-
-
-Overview
+
+
+ NuttX RTOS
+ Last Updated: March 14, 2007
+
+ Table of Contents
+
+Overview
+Downloads
+Supported Platforms
+Memory Footprint
+Licensing
+Release History
+Other Documentation
+
+Overview
Goals.
Nuttx is a real timed embedded operating system (RTOS).
@@ -60,7 +70,7 @@
-Downloads
+Downloads
The initial release of NuttX (nuttx-0.1.0) is avalable for download
@@ -68,7 +78,7 @@
website.
-Supported Platforms
+Supported Platforms
- Linux User Mode
@@ -95,7 +105,9 @@
and the SDCC toolchain.
- STATUS: This port will require a few more weeks before it is ready for prime time.
+ STATUS: This port is complete but not stable with timer interrupts enabled.
+ There seems to be some issue when the stack pointer enters into the indirect IRAM
+ address space during interrupt handling.
Other ports
@@ -106,7 +118,7 @@
* A highly modified buildroot
is available that be used to build a NuttX-compatible arm-elf toolchain.
-Memory Footprint
+Memory Footprint
C5471 (Arm7)
The build for this ARM7 target that includes most of the OS features and
@@ -118,11 +130,21 @@ is available that be used to build a NuttX-compatible arm-elf toolchain.
87C52
- A reduced functionality OS test for the 8051 target requires only
- about 18Kb (see spreadsheet for details).
+ A reduced functionality OS test for the 8052 target requires only
+ about 18-19Kb:
+
+Stack starts at: 0x21 (sp set to 0x20) with 223 bytes available.
-Licensing
+Other memory:
+ Name Start End Size Max
+ ---------------- -------- -------- -------- --------
+ PAGED EXT. RAM 0 256
+ EXTERNAL RAM 0x0100 0x02fd 510 7936
+ ROM/EPROM/FLASH 0x2100 0x6e55 19798 24384
+
+
+Licensing
NuttX is available under the highly permissive
BSD license.
@@ -131,7 +153,45 @@ is available that be used to build a NuttX-compatible arm-elf toolchain.
-
Other Documentation
+Release History
+
+
+0.1.0 2007-03-09 Gregory Nutt
+
+ * Initial Release
+ * Support for Linux user mode simulation and TI
+ TMS320C5471 (Arm7) provided
+
+0.1.1 2007-03-14 Gregory Nutt
+
+ * Corrected an error in interrupt level context switching
+ for C5471
+ * Added fgets() and gets() logic; verified c5471 console read.
+ * Corrected error in reading from the C5471 serial port:
+ Improper use of semaphore can cause deadlock.
+ * Fixed an error in the memory cleanup: The idle task
+ cannot take sempahores (because it must always be ready
+ to run).
+ * Tasks can now accept a configurable maximum number of
+ input parameters (argc)
+ * _task_init() was divided into separate functions that
+ require fewer parameters. This was necessary to keep
+ the stack usage down for the 8051/2 (which has only
+ 256 bytes of stack).
+ * Attempts to use C5471 console from interrupt handlers
+ can casue errors. Added a special path for this case.
+ * Refuse calls to sem_wait and sem_trywait from interrupt
+ handlers. This was happening because interrupt handlers
+ were calling printf-like functions.
+ * Added strtok() and strtok_r()
+ * Added a simple shell called nsh (see examples/nsh).
+ * Platform support for 8052 is complete but not stable
+ when the timer interrupt is enabled. Seems to be an
+ issue when SP enters indirect address space.
+ * Documentation updates
+
+
+Other Documentation
User Guide
Porting Guide
diff --git a/Documentation/codesize-070301.xls b/Documentation/codesize-070301.xls
deleted file mode 100644
index 22fed5abf449eff0e028b9f979b3c900c63777ec..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 104448
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