aboutsummaryrefslogtreecommitdiff
path: root/nuttx/TODO
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/TODO')
-rw-r--r--nuttx/TODO224
1 files changed, 150 insertions, 74 deletions
diff --git a/nuttx/TODO b/nuttx/TODO
index 6c28bfd43..248d2dafa 100644
--- a/nuttx/TODO
+++ b/nuttx/TODO
@@ -1,4 +1,4 @@
-NuttX TODO List (Last updated November 25, 2012)
+NuttX TODO List (Last updated January 14, 2013)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This file summarizes known NuttX bugs, limitations, inconsistencies with
@@ -6,21 +6,20 @@ standards, things that could be improved, and ideas for enhancements.
nuttx/
- (6) Task/Scheduler (sched/)
- (1) On-demand paging (sched/)
+ (10) Task/Scheduler (sched/)
(1) Memory Managment (mm/)
- (2) Signals (sched/, arch/)
+ (3) Signals (sched/, arch/)
(2) pthreads (sched/)
(2) C++ Support
(6) Binary loaders (binfmt/)
(17) Network (net/, drivers/net)
(4) USB (drivers/usbdev, drivers/usbhost)
- (11) Libraries (libc/, )
+ (12) Libraries (libc/, )
(9) File system/Generic drivers (fs/, drivers/)
(5) Graphics subystem (graphics/)
(1) Pascal add-on (pcode/)
(1) Documentation (Documentation/)
- (8) Build system / Toolchains
+ (7) Build system / Toolchains
(5) Linux/Cywgin simulation (arch/sim)
(6) ARM (arch/arm/)
(1) ARM/C5471 (arch/arm/src/c5471/)
@@ -31,8 +30,8 @@ nuttx/
(2) ARM/LPC313x (arch/arm/src/lpc313x/)
(0) ARM/LPC43x (arch/arm/src/lpc43xx/)
(3) ARM/STR71x (arch/arm/src/str71x/)
- (3) ARM/LM3S6918 (arch/arm/src/lm3s/)
- (4) ARM/STM32 (arch/arm/src/stm32/)
+ (3) ARM/LM3S6918 (arch/arm/src/lm/)
+ (5) ARM/STM32 (arch/arm/src/stm32/)
(3) AVR (arch/avr)
(0) Intel x86 (arch/x86)
(5) 8051 / MCS51 (arch/8051/)
@@ -56,33 +55,9 @@ o Task/Scheduler (sched/)
Title: CHILD PTHREAD TERMINATION
Description: When a tasks exits, shouldn't all of its child pthreads also be
terminated?
- Status: Open
+ Status: Closed. No, this behavior will not be implemented.
Priority: Medium, required for good emulation of process/pthread model.
- Title: MMAN.H
- Description: Implement sys/mman.h and functions
- Status: Open
- Priority: Low
-
- Title: WAIT.H
- Description: Implement sys/wait.h and functions. Consider implementing wait,
- waitpid, waitid. At present, a parent has no information about
- child tasks.
-
- Update: A simple but usable version of waitpid() has been included.
- This version is not compliant with all specifications and can be
- enabled with CONFIG_SCHED_WAITPID.
- Status: Open
- Priority: Low
-
- Title: MISSING ERRNO SETTINGS
- Description: Several APIs do not set errno. Need to review all APIs.
- Update: These are being fixed as they are encountered. There is
- no accounting of how many interfaces have this problem.
- Status: Open
- Priority: Medium, required for standard compliance (but makes the
- code bigger)
-
Title: TICKLESS OS
Description: On a side note, I have thought about a tick-less timer for the OS
for a long time. Basically we could replace the periodic system
@@ -107,18 +82,22 @@ o Task/Scheduler (sched/)
3) sched_process_timeslice(). Then there is round-robin time-slicing.
- Status: Open
+ The primary advantage of a tickless OS is that is would allow for
+ reduce power consumptions. That is because timer interrupts will
+ usually awaken CPUs from reduced power consumption states.
+ Status: Open. There will probably be no tickless OS implementation unless
+ someone gets motivated and drives the change.
Priority: Low
- Title: posix_spawn()
- Description: This would be a good interface to add to NuttX. It is really
- just a re-packaging of the existing, non-standard NuttX exec()
- function.
- Status: Open
- Priority: Medium low.
-
-o On-demand paging (sched/)
- ^^^^^^^^^^^^^^^^^^^^^^^^^
+ Title: pause() NON-COMPLIANCE
+ Description: In the POSIX description of this function is the pause() function
+ will suspend the calling thread until delivery of a signal whose
+ action is either to execute a signal-catching function or to
+ terminate the process. The current implementation only waits for
+ any non-blocked signal to be received. It should only wake up if
+ the signal is delivered to a handler.
+ Status: Open.
+ Priority: Medium Low.
Title: ON-DEMAND PAGE INCOMPLETE
Description: On-demand paging has recently been incorporated into the RTOS.
@@ -130,19 +109,16 @@ o On-demand paging (sched/)
configs/ea3131/pgnsh and locked directories). There are
some limitations of this testing so I still cannot say that
the feature is fully functional.
- Status: Open
+ Status: Open. This has been put on the shelf for some time.
Priority: Medium-Low
-o Other core OS logic
- ^^^^^^^^^^^^^^^^^^^
-
Title: GET_ENVIRON_PTR()
Description: get_environ_ptr() (sched/sched_getenvironptr.c) is not implemented.
The representation of the the environment strings selected for
NutX is not compatible with the operation. Some significant
re-design would be required to implement this funcion and that
effort is thought to be not worth the result.
- Status: Open
+ Status: Open. No change is planned.
Priority: Low -- There is no plan to implement this.
Title: TIMER_GETOVERRUN()
@@ -150,6 +126,91 @@ o Other core OS logic
Status: Open
Priority: Low -- There is no plan to implement this.
+ Title: USER-SPACE WORK QUEUES
+ Description: There has been some use of work queues that has crept into some
+ user code. I am thinking of NxWidgets::CNxTimer. That timer
+ logic was originally implemented (correctly) using POSIX timers,
+ but was re-implemented using timed work.
+
+ The issue is that NxWidgets::CNxTimer is a user-space application
+ but the work queues are an OS internal feature. This will be a
+ problem for KERNEL builds. Hooks and definitions have been added
+ in include/nuttx/wqueue.h to support a user-space work queue, but
+ the corresponding logic has not been implemented.
+
+ The work queue logic will need to be moved from sched/ to libc/wqueue/
+ Status: Open. No work will probably be done until a functional KERNEL build
+ that includes NxWisges::CNxTimer is needed.
+ Priority: Medium Low for now
+
+ Title: INCOMPATIBILITES WITH execv() AND execl()
+ Description: Simplified 'execl()' and 'execv()' functions are provided by
+ NuttX. NuttX does not support processes and hence the concept
+ of overlaying a tasks process image with a new process image
+ does not make any sense. In NuttX, these functions are
+ wrapper functions that:
+
+ 1. Call the non-standard binfmt function 'exec', and then
+ 2. exit(0).
+
+ As a result, the current implementations of 'execl()' and
+ 'execv()' suffer from some incompatibilities, the most
+ serious of these is that the exec'ed task will not have
+ the same task ID as the vfork'ed function. So the parent
+ function cannot know the ID of the exec'ed task.
+ Status: Open
+ Priority: Medium Low for now
+
+ Title: RETAINING TASK EXIT STATUS
+ Description: When a task exists, its exit status should be retained in
+ so data structure until it is reaped (via waitpid(), or
+ similar interface) or until the parent thread exists.
+
+ You would think that this should be a clone of the existing
+ pthread join logic. Howver there is no need for zombies
+ in NuttX so no need to keep the status if the parent has
+ already exit'ed. Other simplifications:
+
+ 1. Keep the array/list of return status in the parent
+ tasks TCB.
+ 2. Use a fixed size array of return status (perhaps the
+ the enire array is allocated so that that is con
+ penalty for tasks that have no childre.
+
+ At present, exit status is not retained. If waitpid()
+ is called after the child task has exit'ed it simpley
+ returns with the ECHLD error. That is not too bad, but
+ does not tell you what the exit status was.
+
+ A work-around is to:
+ 1) Call sched_lock() to disable pre-emption.
+ 2) Start the task (it cannot run because pre-emption is
+ disbled.
+ 3) Call waitpid();
+ 4) Call sched_unlock() to re-enable pre-emption.
+
+ Status: Open
+ Priority: Low
+
+ Title: IMPROVED TASK CONTROL BLOCK STRUCTURE
+ All task resources that are shared amongst threads have
+ their own "break-away", reference-counted structure. The
+ Task Control Block (TCB) of each thread holds a reference
+ to each breakaway structure (see include/nuttx/sched.h).
+ It would be more efficent to have one reference counted
+ structure that holds all of the shared resources.
+
+ These are the current shared structures:
+ - Environment varaibles (struct environ_s)
+ - PIC data space and address environments (struct dspace_s)
+ - File descriptors (struct filelist)
+ - FILE streams (struct streamlist)
+ - Sockets (struct socketlist)
+ Status: Open
+ Priority: Low. This is an enhancement. It would slight reduce
+ memory usage but would also increase coupling. These
+ resources are nicely modular now.
+
o Memory Managment (mm/)
^^^^^^^^^^^^^^^^^^^^^^
@@ -212,7 +273,7 @@ o Memory Managment (mm/)
be required to keep this memory on the correct list (or on
no list at all).
- Status: Open
+ Status: Open. No changes are planned.
Priority: Medium/Low, a good feature to prevent memory leaks but would
have negative impact on memory usage and code size.
@@ -221,8 +282,10 @@ o Signals (sched/, arch/)
Title: STANDARD SIGNALS
Description: 'Standard' signals and signal actions are not supported.
- (e.g., SIGINT, SIGCHLD, SIGSEGV, etc).
- Status: Open
+ (e.g., SIGINT, SIGSEGV, etc).
+
+ Update: SIG_CHLD is support if configured.
+ Status: Open. No changes are planned.
Priority: Low, required by standards but not so critical for an
embedded system.
@@ -234,17 +297,25 @@ o Signals (sched/, arch/)
are required by the POSIX standard.
Priority: Low for now
+ Title: SIGNAL NUMBERING
+ Description: In signal.h, the range of valid signals is listed as 0-31. However,
+ in many interfaces, 0 is not a valid signal number. The valid
+ signal number should be 1-32. The signal set operations would need
+ to map bits appropriately.
+ Status: Open
+ Priority: Low. Even if there are only 31 usable signals, that is still a lot.
+
o pthreads (sched/)
^^^^^^^^^^^^^^^^^
Title: CANCELLATION POINTS
Description: pthread_cancel(): Should implement cancellation points and
pthread_testcancel()
- Status: Open
+ Status: Open. No changes are planned.
Priority: Low, probably not that useful
Title: PTHREAD_PRIO_PROTECT
- Description: Extended pthread_mutexattr_setprotocol() suport PTHREAD_PRIO_PROTECT:
+ Description: Extended pthread_mutexattr_setprotocol() suport PTHREAD_PRIO_PROTECT:
"When a thread owns one or more mutexes initialized with the
PTHREAD_PRIO_PROTECT protocol, it shall execute at the higher of its
priority or the highest of the priority ceilings of all the mutexes
@@ -260,7 +331,7 @@ o pthreads (sched/)
PTHREAD_PRIO_PROTECT protocol attributes, it shall not be subject to
being moved to the tail of the scheduling queue at its priority in the
event that its original priority is changed."
- Status: Open
+ Status: Open. No changes planned.
Priority: Low -- about zero, probably not that useful. Priority inheritance is
already supported and is a much better solution. And it turns out
that priority protection is just about as complex as priority inheritance.
@@ -442,21 +513,25 @@ o Network (net/, drivers/net)
Title: SOCK_RAW/SOCK_PACKET
Description: Should implement SOCK_RAW, SOCK_PACKET
- Status: Open
+ Status: Open. No changes are planned.
Priority: Low
Tile: MULTIPLE NETWORK INTERFACE SUPPORT
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
+
+ Status: Open. Nothing will probably be done until I have a platform
+ with two network interfaces that I need to support.
Priority: Medium, The feature is not important, but it is important
for NuttX to resolve the architectural issues.
@@ -464,7 +539,7 @@ o Network (net/, drivers/net)
Description: sendto() 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
+ Status: Open. This is really part of the above issue.
Priority: Medium, The feature is not important, but it is important
for NuttX to resolve the architectural issues.
@@ -472,7 +547,8 @@ o Network (net/, drivers/net)
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
+ Status: Open. No work will probably be done until there is a specific
+ requirement for IPv6.
Priority: Medium
Title: LISTENING FOR UDP BROADCASTS
@@ -488,7 +564,7 @@ o Network (net/, drivers/net)
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
+ Status: Open. This is just a thought experiment. No changes are planned.
Priority: Medium
Title: STANDARDIZE ETHERNET DRIVER STATISTICS
@@ -637,6 +713,15 @@ o USB (drivers/usbdev, drivers/usbhost)
o Libraries (libc/)
^^^^^^^^^^^^^^^^^
+ Title: SIGNED time_t
+ Description: The NuttX time_t is type uint32_t. I think this is consistent
+ with all standards and with normal usage of time_t. However,
+ according to Wikipedia, time_t is usually implemented as a
+ signed 32-bit value.
+ Status: Open
+ Priority: Very low unless there is some compelling issue that I do not
+ know about.
+
Title: ENVIRON
Description: The definition of environ in stdlib.h is bogus and will not
work as it should. This is because the underlying
@@ -1002,20 +1087,6 @@ o Build system
Status: Open, there are some workarounds, but none are good.
Priority: High
- Title: configure.sh NOT AVAILABLE IN NATIVE WINDOWS BUILD
- Description: configure.sh is a Bash script and cannot be used from a Windows
- CMD.exe window. I started a configure.bat script, but I do
- not have the batch file programming skills to duplicate some
- of the more complex operations.
-
- I also considered adding a configure.c file that could be
- compiled and then executed by configure.bat (and configure.sh?).
- But I have not gone down that path yet.
-
- The current work-around is to configure under Cygwin.
- Status: Open
- Priority: High
-
o Linux/Cywgin simulation (arch/sim)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -1370,7 +1441,7 @@ o ARM/STR71x (arch/arm/src/str71x/)
Status: Open
Priority: Medium -- Will be very high if you do SPI access from multiple threads.
-o ARM/LM3S6918 (arch/arm/src/lm3s/)
+o ARM/LM3S6918 (arch/arm/src/lm/)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Title: I2C DRIVER
@@ -1460,6 +1531,11 @@ o ARM/STM32 (arch/arm/src/stm32/)
Status: Open
Priority: Low
+ Title: STM32 F4 USB OTG FS DEVICE-SIDE DRIVER
+ Description: This driver is reported to be buggy and to need some TLC.
+ Status: Open
+ Priority: High
+
o AVR (arch/avr)
^^^^^^^^^^^^^^