blob: 38ccd8d449651352053bbdf4b996b4ac65efd26b [file] [log] [blame]
NuttX-7.15
----------
The 115th release of NuttX, Version 7.15, was made on March 27, 2016,
and is available for download from the Bitbucket.org website. Note
that release consists of two tarballs: nuttx-7.15.tar.gz and
apps-7.15.tar.gz. These are available from:
https://bitbucket.org/patacongo/nuttx/downloads
https://bitbucket.org/nuttx/apps/downloads
Both may be needed (see the top-level nuttx/README.txt file for build
information).
Additional new features and extended functionality:
* Core OS:
- Add a state variable that provides the current level of OS
initialization. This is needed by some logic that may attempt to
run early in the start-up sequence but cannot run if a sufficient
level of initialization has not yet occurred.
- Spinlocks: Add interface definitions for to support spinlocks as
needed for multi-CPU configurations.
- SMP support. Support for Symmetric Multi-Processing (SMP) added.
This affects many internal data structures, spinlock extensions
and renaming of interrupt enable/disable interfaces, new platform
interfaces to support CPU initialization and inter-actions, and
new application interfaces to manage CPU affinity. The changes
are too extensive to summarize here; see the SMP Wiki page at
https://cwiki.apache.org/confluence/display/NUTTX/SMP. The
new platform interfaces are also described in the NuttX porting
guide: https://nuttx.apache.org/docs/latest/quickstart/organization.html.
Only partially verified; awaiting hardware for the complete
verification.
- TLS: Basic definitions needed to support thread local storage
(TLS). TLS is not used anywhere yet (and may not be used in the
near future either).
- Performance Monitoring: Add a configuration option to buffer
RTOS instrumentation data in an in-memory buffer.
- boardctl(): Add boardctl() support that will permit applications
to control USB devices.
* File Systems/Block Drivers:
- procfs: Add /proc/kmm entry that shows that state of the kernel
heap. Only useful in PROTECTED and KERNEL build modes where there
is a kernel heap.
- procfs: Add support for showing CPU in the taste status if SMP is
enabled.
* Networking:
- ARP: Add support for IOCTL commands to manage the ARP table.
- IEEE 802.15.4 and 6LowPAN: There are some radio drivers and a
directory structure is in place. However, most of this
development is occurring on a fork and is not yet available in the
NuttX repositories. Hopefully in NuttX-7.16.
* Common Device Drivers:
- ADS1242: Driver for the 24-Bit Differential Input ADC ADS1242 that
communicates via SPI with a MCU. Reading the ADC conversion result
as well as configuring the ADC, setting the input channel, etc. is
implemented via ioctl calls. However, it does not yet implement
the standard ADC interface. From Alexander Entinger.
- U-Blox Modem: Add an upper half driver for the U-Blox Modem. From
Vladimir Komendantskiy.
- I2C: Add an I2C, "upper half", character drivers to support raw I2C
data transfers for test applications.
- RGB LED: Add a driver to manage a RGB LED via PWM. From Alan
Carvalho de Assis.
- Performance Monitoring: Add a character driver that will allow an
application to read buffered scheduler instrumentation data.
* Simulation Platform:
- SMP: Add multi-CPU support to the simulation to support SMP
investigation. There are issues with the simulation and it is less
than perfect but sufficient for some very preliminary testing of
the core SMP feature.
* ARMv7-A, ARMv7-R, and ARMv7-M:
- ARMv7-A, ARMv7-R, and ARMv7-M: Add test-and-set logic and
definitions needed to supports spinlocks.
- ARMv7-A: Added MPCOre Generic Interrupt Controller (GICv2) and
Global Timer support
- ARMv7-A: Now includes in MCU-specific hooks needed for SMP support.
* Atmel SAMV7 Drivers:
- HSMSI: HSMCI driver can now be configured to handle unaligned data
buffers.
* NXP Freescale LPC11xx/17xx/43xx and LPC2378 Drivers:
- I2C: Backported the LPC43XX I2C driver, replacing the LPC11XX,
LPC17XX, and LPC2378 I2C drivers. This gives us the I2C_TRANSFER
method in all I2C drivers.
* NXP Freescale LPC17xx Boards:
- Support for the u-blox GSM and GPS module evaluation board with
NXP LPCExpresso LPC1768. The GSM module is one of LISA-C200,
LISA-U200 or SARA-G350. The GPS module is one of MAX-M7 or
MAX-M8. From Vladimir Komendantskiy.
* NXP Freescale i.MX6:
- Basic support is in place for the i.MX6 Quad/Dual MCUs.
Verification is, however, waiting for the receipt of hardware.
* NXP Freescale i.MX6 Boards:
- Sabre-6Quad: Basic support for the NXP/Freescale Sabre 6Quad
board is in place but waiting for hardware for verification.
* STMicro STM32:
- STM32F46xx: Support for STM32F46xx from Paul Alexander Patience
- STM32L4: Add support for the STM32L4 family. From Sebastien
Lorquet.
* STMicro STM32 Boards:
- STM32F4 Discovery: Add PWM support for the onboard RGB LED. From
Alan Carvalho de Assis.
- Nucleo-L476: Add support for the Nucleo-L476 board. From Sebastien
Lorquet.
- STM32L476VG Discovery: Add support for the STM32L476VG Discovery
board. From Dave.
* Tools:
- tools/refresh.sh now has a --silent option so that it can be used in
batch modes without human input.
* Build System:
- Added a 'make olddefconfig' target that will refresh a .config file
without interaction.
* Applications: NSH
- 'arp': Add an 'arp' command that will support access to the OS ARP
table.
- 'ps': The 'ps' command will show CPU if SMP is enabled.
* Applications: apps/netutils:
- apps/netutils/chat: Chat logic contributed by Vladimir
Komendantskiy.
- apps/netutils/netlib: Add utility functions to support accesses to
the ARP table.
* Applications: apps/examples:
- apps/examples/chat: Chat example contributed by Vladimir
Komendantskiy.
- apps/system/ubloxmodem: Example to control the power
state of the modem in nsh. From Vladimir Komendantskiy.
- apps/examples/leds: An example to demonstrate use of LED driver.
- apps/examples/smp: Add a test to verify SMP configurations.
- apps/examples/rgbled: Example using the RGB LED driver to drive an
RGB LED via PWM. From Alan Carvalho de Assis.
- apps/examples/ostest: Add a test of TLS.
- apps/examples/sched_note: Add a simple example to exercise the
scheduler instrumentation logic.
Bugfixes. Only the most critical bugfixes are listed here (see the
ChangeLog for the complete list of bugfixes and for additional, more
detailed bugfix information):
* Core OS:
- Signals: Move the list of signal actions from the TCB to the group
structure. Signal handlers are not per thread but, rather, per task
group. I know, I preferred it the other way too, but this is more
compliant with POSIX.
- Semaphores: Add an internal, non-standard interface to reset a
semaphore count. This is sometimes needed by drivers in order to
recover from error conditions. Were previously using sem_init()
which is both inappropriate and incorrect if the semaphore count is
negative.
- Low-Priority Work Queue: Fix logic to find an IDLE worker thread;
the test for busy was backward. From Linfei Chen.
* File System/Block Drivers:
- FAT: Add an option to force all transfers to be performed
indirectly using the FAT file system's internal sector buffers.
This is a fix for the case where the user provided buffers are not
properly aligned for DMA (as with THTTPD).
- MTD: Increase block size in mtd_geometry_s to 32-bits.
* Common Drivers:
- I2C: Restructured the I2C interface as necessary to eliminate some
thread-safety issues inherent in the legacy I2C interface design.
This effects the interface definition, all I2C clients, and all low-
level I2C drivers. I have used caution, but I still expect a change
of this magnitude to introduce some errors. Any bug reports of bug
fixes will be much appreciated.
- I2C_RESET: Eliminate up_i2creset(). It should not be a global
function; Now it is an I2C interface method.
- PCA555: Add logic to make the PCA555 driver thread safe.
- syslog: If syslog timestamping is enabled, don't try to get the time
if the timer hardware has not yet been initialized.
- AT24xx driver: Correct missing address calculation logic. From Frank
Benkert.
* Networking:
- Networking drivers that support CONFIG_NET_NOINTS: Fix a race
condition that can cause the TX poll timer to stop running. From
Manuel Stuhn.
- Timer Poll: Fix some logic when there are multiple network
interfaces. In this case, TCP timeout events can really only being
processed when the poll from the correct device is received.
* Atmel SAMV7 Drivers:
- SAMV7 USB HS device: The USB driver has had some issue that would
occasionally cause loss of packets. Back last December, a fix was
put in for this but the fix apparently worsens the problem; now
causing hangs. The basic problem is that the number of busy banks
(NBUSYBKS) status is not real time but is delayed. This was fixed;
now when the DMA completes and NBUSYBKS > 0, the NBUSYBK is
interrupt is enabled and the operations are deferred until NBUSYBKS
is truly zero.
* Tools:
- tools/testbuild.sh: .config files were not being updated because
(a) kconfig-conf was being called in the wrong directory and (b)
apps/Kconfig had not yet been created. Now uses 'make
olddefconfig'.
* Applications: apps/system:
- apps/system/i2c: The I2C tool now obeys it OS interfacing: it now
uses an I2C character driver to access the I2C bus.
- apps/system/cdcacm, usbmsc, and composite: Use new boardctl()
instead of calling directly in the OS when possible.
* Applications: apps/netutils:
- apps/netutils/dhcpd: DHCPD no longer calls directly into the OS but
uses the new network IOCTL commands to modify the ARP table.
* Applications: apps/modbus:
- apps/modbus/nuttx/portserial.c: Was not returning an error on
failure to open the device driver. From Olololshka kokoko.
* Applications: apps/examples:
- apps/examples/usbserial, composite, usbterm: Use new boardctl()
instead of calling directly in the OS when possible. There are
still a few bad OS calls for USB device interfaces that do not yet
have boardctl() commands.
* Applications: apps/platform:
- Moved C++ initialization logic out of the RTOS and into the
application space, specifically to apps/platform/board, where it
belongs.