NuttX TODO List ^^^^^^^^^^^^^^^ o Task/Scheduler - When a tasks exits, shouldn't all of its child pthreads also be terminated? - Should task_delete() cause atexit() function to be called? - Implement sys/mman.h and functions - Implement sys/wait.h and functions - Implement priority inheritance - Consider implementing wait, waitpid, waitid. At present, a parent has no information about child tasks. - Several APIs do not set errno. Need to review all APIs. o Memory Managment - 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. - 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) o Signals - 'Standard' signals and signal actions are not supported. o pthreads - pthread_cancel(): Should implement cancellation points and pthread_testcancel() o C++ Support - Need to call static constructors o Network - uIP's netutils/smtp, resolv, webclient -- untested - Should implement SOCK_RAW, SOCK_PACKET - uIP polling issues: (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.i Fix by using bound IP address in TCP connection (lipaddr) and verifying that it is in the subnet served by the driver. - uIP/Socket callback logic is not thread safe. This means that a socket cannot be used concurrently by two threads. Minimal fix: Add mutex to support exclusion. - IPv6 support is incomplete - Incoming UDP broadcast should only be accepted if listening on INADDR_ANY(?) - 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. o USB - Implement USB device support - Implement USB bulk device o Libraries - sscanf() and lib_vsprintf() do not support floating point values. - 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. o File system - Add chmod(), truncate(). - FAT32: long file names o Documentation - Document fs/ & driver/ logic - Document C-library APIs o Build system - Some names under arch are still incorrect. These should be processor architecture names: pjrc-8051 should be 805x - configs/pjrc-8051 should be configs/pjrc-87c52 - Dependencies do not work correctly under configs//src (same as arch//src/board). o Applications & Tests - Verify TELNET frontend to nsh o ARM - Add option to use a separate stack for interrupt handling. At present, each interrupt executes on top of the user stack allocation making each user stack allocation larger than needed. o ARM/C5471 o ARM/DM320 - It seems that when a lot of debug statements are added, the system no longer boots. This has been diagnosed as a stack problem.. making the stack bigger or removing arrays on the stack fixes the problem. o ARM/LPC214x - Finish bringup - Add MMC and USB support o pjrc-8052 / MCS51 - 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 - 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 - During build, there are several integer overflows reported: gmtime_r.c aroud lines 184 and 185 clock_initialize.c at line 107 pthread_create.c at 330 sighand.c at 225 and 244