d72bd9b133
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@1101 42af7a65-404d-4744-a932-0658087f49c3
569 lines
22 KiB
Plaintext
569 lines
22 KiB
Plaintext
NuttX TODO List (Last updated July 31, 2008)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
(7) Task/Scheduler (sched/)
|
|
(1) Dynamic loader (N/A)
|
|
(2) Memory Managment (mm/)
|
|
(1) Signals (sched/, arch/)
|
|
(1) pthreads (sched/)
|
|
(1) C++ Support
|
|
(12) Network (net/, netutils/)
|
|
(1) USB (drivers/usbdev)
|
|
(3) Libraries (lib/)
|
|
(5) File system/Generic drivers (fs/, drivers/)
|
|
(1) Pascal add-on (pcode/)
|
|
(2) Documentation (Documentation/)
|
|
(3) Build system
|
|
(2) NuttShell (NSH) (examples/nsh)
|
|
(1) Other Applications & Tests (examples/)
|
|
(0) ARM (arch/arm/)
|
|
(1) ARM/C5471 (arch/arm/src/c5471/)
|
|
(1) ARM/DM320 (arch/arm/src/dm320/)
|
|
(5) ARM/LPC214x (arch/arm/src/lpc214x/)
|
|
(4) pjrc-8052 / MCS51 (arch/pjrc-8051/)
|
|
(7) z80/z8 (arch/z80/)
|
|
(8) z16 (arch/z16/)
|
|
|
|
o Task/Scheduler (sched/)
|
|
^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Description: When a tasks exits, shouldn't all of its child pthreads also be
|
|
terminated?
|
|
Status: Open
|
|
Priority: Medium, required for good emulation of process/pthread model.
|
|
|
|
Description: atexit() supports registration of one function called on exit().
|
|
Should task_delete() also cause atexit() function to be called?
|
|
Status: Open
|
|
Priority: Low, task_delete() is non-standard and its behavior is
|
|
unspecified.
|
|
|
|
Description: Implement sys/mman.h and functions
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: Implement sys/wait.h and functions. Consider implementing wait,
|
|
waitpid, waitid. At present, a parent has no information about
|
|
child tasks.
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: Implement priority inheritance
|
|
Status: Open
|
|
Priority: Medium, this is a good feature for realtime systems.
|
|
|
|
Description: Several APIs do not set errno. Need to review all APIs.
|
|
Status: Open
|
|
Priority: Medium, required for standard compliance (but makes the
|
|
code bigger)
|
|
|
|
Description: socket descriptors are not cloned as are file descriptors
|
|
by task_create().
|
|
Status: Open
|
|
Priority: Medium-to-High
|
|
|
|
o Dynamic Loader
|
|
^^^^^^^^^^^^^^
|
|
|
|
Description: At some point in the future, I intend to port the XFLAT
|
|
dynamic loader into NuttX (see http://xflat.sourceforge.net/).
|
|
That would allow NuttX to dynamically load and link
|
|
external code in a mounted filesystem.
|
|
Status: Open
|
|
Priority: Low, Nice feature and I might do it someday
|
|
|
|
o Memory Managment (mm/)
|
|
^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Description: Add an option to free all memory allocated by a task when the
|
|
task exits. This is probably not be worth the overhead for a
|
|
deeply embedded system.
|
|
Status: Open
|
|
Priority: Medium/Low, a good feature to prevent memory leaks but would
|
|
have negative impact on memory usage and code size.
|
|
|
|
Description: Current logic adapts size_t for 16-bit address machines vs.
|
|
32-bit address machines. But a small memory option should also
|
|
be provided so that the small offset option can be used with
|
|
32-bit machines that have small RAM memories (like the lpc2148)
|
|
Status: Open
|
|
Priority: High, a good feature enhancement.
|
|
|
|
o Signals (sched/, arch/)
|
|
^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Description: 'Standard' signals and signal actions are not supported.
|
|
(e.g., SIGINT, SIGCHLD, SIGSEGV, etc).
|
|
Status: Open
|
|
Priority: Low, required by standards but not so critical for an
|
|
embedded system.
|
|
|
|
o pthreads (sched/)
|
|
^^^^^^^^^^^^^^^^^
|
|
|
|
Description: pthread_cancel(): Should implement cancellation points and
|
|
pthread_testcancel()
|
|
Status: Open
|
|
Priority: Low, probably not that useful
|
|
|
|
o C++ Support
|
|
^^^^^^^^^^^
|
|
|
|
Description: Need to call static constructors
|
|
Status: Open
|
|
Priority: Low, depends on toolchain. Call to gcc's built-in static
|
|
constructor logic will probably have to be performed by
|
|
user logic in user_start().
|
|
|
|
o Network (net/, netutils/)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Description: Several of the netutils/ apps are untested. These include
|
|
uIP's netutils/smtp, dhcpd, resolv, webclient. Only minimal
|
|
testing of the others has been performed.
|
|
Status: Open
|
|
Priority: Medium, Important but not core NuttX functionality
|
|
|
|
Description: Should implement SOCK_RAW, SOCK_PACKET
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: uIP polling issues / Multiple network interface support:
|
|
(1) Current logic will not support multiple ethernet drivers.
|
|
Each driver should poll on TCP connections connect on the
|
|
network supported by the driver; UDP polling should respond
|
|
with TX data only if the UDP packet is intended for the
|
|
the network supported by the driver.
|
|
(2) If there were multiple drivers, polling would occur at
|
|
double the rate. Fix by using bound IP address in TCP
|
|
connection (lipaddr) and verifying that it is in the subnet
|
|
served by the driver.
|
|
Status: Open
|
|
Priority: Medium, The feature is not important, but it is important
|
|
for NuttX to resolve the architectural issues.
|
|
|
|
Description: Sendoto() and multiple network interface support:
|
|
When polled, would have to assure that the destination IP
|
|
is on the subnet served by the polling driver.
|
|
Status: Open
|
|
Priority: Medium, The feature is not important, but it is important
|
|
for NuttX to resolve the architectural issues.
|
|
|
|
Description: IPv6 support is incomplete. Adam Dunkels has recently announced
|
|
IPv6 support for uIP (currently only as part of Contiki). Those
|
|
changes need to be ported to NuttX.
|
|
Status: Open
|
|
Priority: Medium
|
|
|
|
Description: Incoming UDP broadcast should only be accepted if listening on
|
|
INADDR_ANY(?)
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: Read-ahead buffers capture incoming TCP data when no user
|
|
thread is recv-ing the data. Should add some driver call to
|
|
support throttling; when there is no listener for new data, the
|
|
driver should be throttled. Perhaps the driver should disable
|
|
RX interrupts when throttled and re-anable on each poll time.
|
|
recvfrom would, of course, have to un-throttle.
|
|
Status: Open
|
|
Priority: Medium
|
|
|
|
Description: Need to standardize collection of statistics from network
|
|
drivers. examples/nsh ifconfig command should present
|
|
statistics.
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: Outgoing packets are dropped and overwritten by ARP packets
|
|
if the destination IP has not been mapped to a MAC. Could
|
|
improve send() performance by explicitly performing ARP before
|
|
sending the packet.
|
|
Status: Open
|
|
Priority: Medium
|
|
|
|
Description: Port PPP support from http://contiki.cvs.sourceforge.net/contiki/contiki-2.x/backyard/core/net/ppp/
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: At present, there cannot be two concurrent active TCP send
|
|
operations in progress. This is because the uIP ACK logic will
|
|
support only one transfer at a time. The solution is simple:
|
|
A mutex will be needed to make sure that each send that is
|
|
started is able to be the exclusive sender until all of the
|
|
data to be sent has been ACKed.
|
|
Status: Open. There is some temporary logic to examples/nsh that does
|
|
this same fix and that temporary logic should be removed when
|
|
send() is fixed.
|
|
Priority: Medium-Low. This is an important issue for applications that
|
|
send on the same TCP socket from multiple threads.
|
|
|
|
Description: Some application-level interface to the ICMP logic is needed
|
|
to support ping from the target.
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
o USB (drivers/usbdev)
|
|
^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Description: The USB bulk storage class driver configuration (examples/usbstorage)
|
|
does not work reliably when debug is disabled (CONFIG_DEBUG+CONFIG_DEBUG_VERBOSE
|
|
+CONFIG_DEBUG_USB). Race conditions are suspected (probably in the NXP LPC214x
|
|
USB controller driver).
|
|
Status: Open
|
|
Priority: High
|
|
|
|
o Libraries (lib/)
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
Description: sscanf() and lib_vsprintf() do not support floating point
|
|
values.
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: The definition of environ in stdlib.h is bogus and will not
|
|
work as it should. This is because the underlying
|
|
representation of the environment is not an arry of pointers.
|
|
Status: Open
|
|
Priority: Medium
|
|
|
|
o File system / Generic drivers (fs/, drivers/)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Description: Implement chmod(), truncate().
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: FAT: long file names
|
|
Status: Open
|
|
Priority: Medium
|
|
|
|
Description: The CAN driver is untested. Add a test for the CAN driver.
|
|
Status: Open
|
|
Priority: Medium
|
|
|
|
Description: There is no way to remove a FIFO or PIPE created in the
|
|
psuedo filesystem. Once created, they persist indefinitely
|
|
and cannot be unlinked. This is actually a more generic
|
|
issue: unlink does not work for anything in the psuedo-
|
|
filesystem.
|
|
Status: Open, but partially resolved: pipe buffer is at least freed
|
|
when there are not open references to the pipe/FIFO.
|
|
Priority: Medium
|
|
|
|
Description: The ROMFS file system does not verify checksums on either
|
|
volume header on on the individual files.
|
|
Status: Open
|
|
Priority: Low. I have mixed feelings about if NuttX should pay a
|
|
performance penalty for better data integrity.
|
|
|
|
Description: FAT: FAT32 is untested -- because I don't have any large
|
|
enough devices yet to support a FAT32 FS.
|
|
Status: Open
|
|
Priority: Medium
|
|
|
|
o Pascal Add-On (pcode/)
|
|
^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Description: Need APIs to verify execution of P-Code from memory buffer.
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: Loader and object format may be too large for some small
|
|
memory systems. Consider ways to reduce memory footprint.
|
|
Status: Open
|
|
Priority: Medium
|
|
|
|
o Documentation (Documentation/)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Description: Document driver/ logic
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: Document C-library APIs
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
o Build system
|
|
^^^^^^^^^^^^
|
|
|
|
Description: Some names under arch are still incorrect. These should be
|
|
processor architecture names: pjrc-8051 should be 805x
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: configs/pjrc-8051 should be configs/pjrc-87c52
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: Dependencies do not work correctly under configs/<board>/src
|
|
(same as arch/<arch>/src/board). Seems to be worse using SDCC.
|
|
Status: Open
|
|
Priority: Medium (maybe higher for z80 target)
|
|
|
|
o NuttShell (NSH) (examples/nsh)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Description: When the telnetd front end is received, each TCP packet
|
|
received causes a prompt (nsh >) to be presented. The
|
|
prompt should only be presented when the user enters a
|
|
carriage return.
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: Here are some commands that would be good to have in NSH:
|
|
ping
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
o Other Applications & Tests (examples/)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Description: The redirection test (part of examples/pipe) terminates
|
|
incorrectly on the Cywgin-based simulation platform (but works
|
|
fine on the Linux-based simulation platform).
|
|
|
|
o ARM (arch/arm/)
|
|
^^^^^^^^^^^^^^^
|
|
|
|
o ARM/C5471 (arch/arm/src/c5471/)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Description: UART re-configuration is untested and conditionally compiled out.
|
|
Status: Open
|
|
Priority: Medium. ttyS1 is not configured, but not used; ttyS0 is configured
|
|
by the bootloader
|
|
|
|
o ARM/DM320 (arch/arm/src/dm320/)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Description: config/ntos-dm320: It seems that when a lot of debug statements
|
|
are added, the system no longer boots. This is suspected to be
|
|
a stack problem: Making the stack bigger or removing arrays on
|
|
the stack seems to fix the problem (might also be the
|
|
bootloader overwriting memory)
|
|
Status: Open
|
|
Priority: Medium
|
|
|
|
Description: A USB device controller driver was added but has never been tested.
|
|
Status: Open
|
|
Priority: Medium
|
|
|
|
o ARM/LPC214x (arch/arm/src/lpc214x/)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Description: Should use Vector Interrupts
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: USB DMA not fully implemented. Partial logic is in place but it is
|
|
fragmentary and bogus.
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: USB Serial Driver reports wrong error when opened before the
|
|
USB is connected (reports EBADF instead of ENOTCONN)
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: The USB bulk storage class driver configuration (examples/usbstorage)
|
|
does not work reliably when debug is disabled (CONFIG_DEBUG+CONFIG_DEBUG_VERBOSE
|
|
+CONFIG_DEBUG_USB). Race conditions are suspected (probably in the NXP LPC214x
|
|
USB controller driver).
|
|
Status: Open
|
|
Priority: High
|
|
|
|
Description: At present the SPI driver is polled. Should it be interrupt driven?
|
|
Status: Open
|
|
Priority: Medium
|
|
|
|
o pjrc-8052 / MCS51 (arch/pjrc-8051/)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Description: Current status:
|
|
- Basic OS task management seems OK
|
|
- Fails when interrupts enabled. The stack pointer is around
|
|
0x6e before the failure occurs. It looks like some issue
|
|
when the stack pointer moves from the directly to indirectly
|
|
addressable region (0x80 boundary).
|
|
- Work on the 8052 is temporarily on hold
|
|
Status: Open
|
|
Priority: Low, 8051 is a tough platform because of the tiny stack.
|
|
|
|
Description: Use timer 0 as system timer. Timer 2 is needed for second UART.
|
|
Logic is implemented, but there needs to be a system
|
|
configuration to change the ticks-per-second value to match the
|
|
timer interrupt rate
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: During build, there are several integer overflows reported:
|
|
sched/gmtime_r.c aroud lines 184 and 185
|
|
sched/clock_initialize.c at line 107
|
|
sched/pthread_create.c at 330
|
|
examples/ostest/barrier.c around lines 53 and 74
|
|
examples/ostest/sighand.c at 225 and 244
|
|
driver/serial.c in usleep calls around 347 and 354
|
|
Status: Open
|
|
Priority: Medium
|
|
|
|
Description Global data is not being initialized. Logic like that of SDCCs
|
|
crt0*.s needs to be incorporated into the system boot logic
|
|
Status: Open
|
|
Priority: Low -- only because there as so many other issues with 8051
|
|
|
|
o z80/z8 (arch/z80)
|
|
^^^^^^^^^^^^^^^^^^
|
|
|
|
Description: The SDCC version the same problems with interger overflow during
|
|
compilation as described for pjrc-8051. At typical cause is code like
|
|
usleep(500*1000) which exceeds the range of a 16-bit integer
|
|
Status: See pjrc-8051
|
|
Priority: See pjrc-8051
|
|
|
|
Description: The simulated Z80 serial console (configs/z80sim/src/z80_serial.c +
|
|
driver/serial.c) does not work. This is because there are
|
|
no interrupts in the simulation so there is never any serial
|
|
traffic.
|
|
Status: Open
|
|
Priority: Low -- the simulated console is not critical path and the designs
|
|
to solve the problem are complex.
|
|
|
|
Description: ZDS-II Librarian complains that the source for the .obj file
|
|
is not in the library.
|
|
Status: Open
|
|
Priority: Low, thought to be cosmetic. I think this is a consequence of
|
|
replacing vs. inserting the library.
|
|
|
|
Description: The ZDS-II compiler (version 4.10.1) fails with an internal error
|
|
while compiler mm/mm_initialize. This has been reported as
|
|
incident 81509.
|
|
|
|
I have found the following workaround that I use to build for the
|
|
time being:
|
|
|
|
--- mm/mm_initialize.c.SAVE 2008-02-13 08:06:46.833857700 -0600
|
|
+++ mm/mm_initialize.c 2008-02-13 08:07:26.367608900 -0600
|
|
@@ -94,8 +94,11 @@
|
|
{
|
|
int i;
|
|
|
|
+#if 0 /* DO NOT CHECK IN */
|
|
CHECK_ALLOCNODE_SIZE;
|
|
CHECK_FREENODE_SIZE;
|
|
+#endif
|
|
|
|
/* Set up global variables */
|
|
|
|
Status: Open
|
|
Priority: High
|
|
|
|
Description: Add support for prioritized ez8 interrupts. Currently logic supports
|
|
only nominal interrupt priority.
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: The z8Encore! port has only been verified on the ZDS-II instruction
|
|
set simulator.
|
|
Status: Open
|
|
Priority: Medium
|
|
|
|
Description: Upgrade to the ZDS-II Z8Encore! 4.11.0 toolchain
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
|
|
o z16 (arch/z16)
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
Description: ZDS-II Librarian complains that the source for the .obj file
|
|
is not in the library.
|
|
Status: Open
|
|
Priority: Low, thought to be cosmetic. I think this is a consequence of
|
|
replacing vs. inserting the library.
|
|
|
|
Description: When the interrupt-driven serial driver is used, the system
|
|
hangs. This is because of TX ready (TRDE) interrupts that
|
|
get lost while interrupts are disabled. The existing
|
|
serial driver appears to be limited to hardware with a
|
|
latching, level-sensitive TX ready interrupt.
|
|
Status: Open
|
|
Priority: Medium. A polled, write-only serial driver is used in the
|
|
interim for system testing.
|
|
|
|
Description: The system delays do not appear to be correct with the
|
|
examples/ostest/timedmqueue.c test.
|
|
Status: Open
|
|
Priority: Medium-High
|
|
|
|
Description: At present, the z16f port does not run properly when CONFIG_DEBUG
|
|
is disabled: The obvious symptom is that there is no printf()
|
|
output. I have isolated with problem to errors in optimization.
|
|
With -reduceopt on the command line, I can get the printf output.
|
|
However, there are still errors in the compiled code -- specifically
|
|
in sched/timer_create.c.
|
|
|
|
I have submitted a bug report to ZiLOG for this (support incident
|
|
81400). You can see the status of the bug report (and lots more
|
|
technical detail) here:
|
|
http://support.zilog.com/support/incident/incident_support.asp?iIncidentId=81400&iSiteId=1&chLanguageCode=ENG
|
|
|
|
Summary of ZiLOG analysis: "This is a ZNEO compiler problem. ... [a] workaround
|
|
is to replace:
|
|
if ( !timerid || (clockid != 0) )
|
|
By:
|
|
if ((clockid != 0) || !timerid)"
|
|
|
|
Status: Open
|
|
Priority: Medium-High
|
|
|
|
Description: The pascal add-on does not work with the z16f (that is
|
|
configuration z16f2800100zcog/pashello). This appears to be
|
|
another ZDS-II error: when executing the instruction
|
|
SYSIO 0, WRITESTR a large case statement is executed. This
|
|
involves a call into the ZiLOG runtime library to __uwcase().
|
|
__uwcase is passed a pointer to a structure containing jump
|
|
information. The cause of the failure appears to be that
|
|
the referenced switch data is bad.
|
|
This is submited as ZiLOG support incident 81459.
|
|
|
|
Summary of ZiLOG analysis: "This is a ZNEO run time library problem.
|
|
One workaround is to replace the line 58 in uwcase.asm
|
|
|
|
From:
|
|
ADD R9,#4 ; Skip handler
|
|
To:
|
|
ADD R9,#2 ; Skip handler
|
|
|
|
And add uwcase.asm to the project.
|
|
|
|
If the customer does not want to modify uwcase.asm then the other
|
|
workaround is to add a dummy case and make it same as default:
|
|
|
|
case 0x8000:
|
|
default:
|
|
|
|
This will make sure that uwcase is not called but ulcase is called."
|
|
Status: Open. Due to licensing issues, I cannot include the modified
|
|
uwcase in the NuttX code base.
|
|
Priority: Medium
|
|
|
|
Description: Add support to maintain SPOV in context switching. This
|
|
improvement will provide protection against stack overflow
|
|
and make a safer system solution.
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: Add support for prioritized interrupts. Currently logic supports
|
|
only nominal interrupt priority.
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
Description: Upgrade to the ZDS-II ZNEO 4.11.1 toolchain
|
|
Status: Open
|
|
Priority: Low
|
|
|
|
|
|
|