The 129th release of NuttX, Version 7.29, was made on March 25, 2019, and is available for download from the Bitbucket.org website. Note that release consists of two tarballs: nuttx-7.29.tar.gz and apps-7.29.tar.gz. These are available from:
Both may be needed (see the top-level nuttx/README.txt file for build information).
Additional new features and extended functionality:
* Core OS: - Configuration: CONFIG_NFILE_DESCRIPTORS=0 can no longer be used to disable the file system. NuttX with no file system does not make sense and is no longer supported. From Gregory Nutt. - Rename most internal OS functions from sched_* to nxsched_* to indicate that they are NuttX internal functions (some renaming is still needed). From Gregory Nutt. - Rename all internal OS functions from task_* to nxtask_* to indicate that they are NuttX internal functions. From Gregory Nutt. - Rename sched_process_timer to nxsched_process_timer. Rename sched_timer_expiration to nxsched_timer_expiration. Rename sched_alarm_expiration to nxsched_alarm_expiration. Those are the appropriate names for an internal sched/ function (still many named incorrectly). From Gregory Nutt. - Standardize naming: Rename os_start() to nx_start(), rename os_smp* to nx_smp*, rename os_bringup to nx_bringup, rename all internal static functions to begin with nx_ vs os_. From Gregory Nutt. - Initialization: Remove the option CONFIG_BOARD_INITTHREAD. Now, if CONFIG_BOARD_INITIALIZE is selected, then the board_initialize() logic will ALWAYS run on an internal kernel thread. This will prevent the problems people have had doing inappropriate board_initialization on the IDLE thread. From Gregory Nutt. - Initialization: Add support for CONFIG_BOARD_EARLY_INITIALIZE. If this option is selected then nx_start() will call a board-provided function board_early_initialize() immediately after calling up_initialize(). Rename board_initialize() to board_late_initialize(). From Gregory Nutt. - Signal Delivery: Add a flag to the TCB to indicate that we are in a signal handler. Use this flag to assure that a there is never attempts to nest signal handling operations on a thread. This was guaranteed before but when locking of pre-emption during signal delivering was eliminated in a previous commit, there was a remote possibility of an attempt to do nested signal handling. This flag assures that there is only one signal handled at a time. From Gregory Nutt. - Signal Handler Security: The architecture-specific signal handler return register state is saved and available on the user stack. This commit reorders some logic so that certain, critical registers are preserved in the TCB. This eliminates most malicious exploits which more the return address, for example, but does not make the logic 100% secure. From Gregory Nutt. - Timer Interrupt Procssing: Add a configurable call out to a user-provided function, 'timer hook', on each timer interrupt. From Gregory Nutt. - PM Activity: Add pm_staycount() API for get stay numbers. This function is currently not used and a waste of FLASH space. From ligd. - Pthreads: Add support for pthread_mutex_timedlock From Leif Jakob. - Pthread Spinlocks: Add a very preliminary implementation of the new POSIX pthread_spinlock_* interfaces. From Gregory Nutt. - Critical Section Monitor: Remove SCHED_IRQMONITOR_GETTIME to simplify the clock source selection: (1) Use up_critmon_gettime if SCHED_IRQMONITOR, (2) Call clock_systimespec if SCHED_TICKLESS, (3) Don't collect timing info for all other cases. From Xiang Xiao. - Work Queue Notification: Notifier can now work with either lpwork or hpwork. From Xiang Xiao. - Protected Build: Add add a new field (us_heapend) to struct userspace_s that labels the end of the heap. From Xiang Xiao. * Binary Loader/Kernal Modules/Shared Libraries - Shared Libraries: Implement dlerror() using strerror(). From Xiang Xiao. - Shared Libraries: Add LD_LIBRARY_PATH environment variable support. From anchao. - ELF Loaders: Optimize elf load speed: (1) Don't zero out memory, (2) Reduce the initial buffer size to 32 bytes. From Xiang Xiao. - ARM ELF Relocation: Add support for the R_ARM_THM_JUMP11 relocation type. This relocation type may be generated when LTO optimization is enabled. From anchao. - ELF Modules: Add relocation buffer table to reduce filesystem access. From anchao. - ELF Modules: Add symbol buffer table to reduce filesystem access. From anchao. * File Systems/Block and MTD Drivers - Filesystem Mount: Move the union inode_ops_u i_mtd field into the mount section of inode_ops_u and remove the guard to simplify fs which support both block and mtd. From Xiang Xiao. - ROMFS: Add support to mount a ROMFS volume using an MTD driver interface using the standard mount() operation. From Xiang Xiao. - LittleFS: VFS wrapper improvement: (1) Support block device interface, (2) support ioctl, stat and sync file operation, (3) support forceformat and autoformat option, (4) update file->f_pos and dir->fd_position, (5) remove the internal struct from dir, and (6) remove mtd byte read/write requirement. From Xiang Xiao. - UnionFS: Support mount of UnionFS from the NSH command line. From Xiang Xiao. * Networking/Network Drivers: - UsrSock: Add mutual exclusion so that only user can perform a socket request From zhangyuan7. - UDP: Initialize callback address structure to avoid random values in padding. From anchao. * Wireless/Wireless Drivers: - SX127x: Initial support for SX127x LoRA radio From Mateusz Szafoni. * Graphics/Display Drivers: - Graphics: Fix a naming collision: Ye olde nx_start that started the NX graphics is now nxmu_start(). nxmu_start() is now prototyped in nxmu.h (instead of nx.h). From Gregory Nutt. - NX Server Startup: Extend nxmu_start() so that receives a display number as an argument. This makes it possible to have multiple instances of the NX server running on boards that support multiple displays. Also includes updates to boardctl() to accept display number paramters. From Gregory Nutt. - Graphics: nx_openwindow() and nxtk_openwindow() now accept an additional 'flag' parameter. This argument is current used only to select a RAM backed, per-window framebuffer. From Gregory Nutt. - Per-Window Framebuffers: Windows may now be optionally created with a RAM frambuffer backing up the window content. Rending into the window will result in rending into the backup framebuffer, then updating the physical display from the framebuffer. The advantage of this option is that the application that manages window will no longer receive redraw() callbacks. Those calls normally occur when a window "above" moves exposing a portion of the window below. If this option is selected, then the system will redraw the exposed portion of the window from the backup framebuffer without intervention of the window applications. This greatly reduces the complexity of the application and performance of the window at the expense of increased memory usage. Redraw requests in other cases are also suppressed: Changes to window position, size, etc. As a consequence, some manual updates will be required when certain events occurr (like removing a toolbar from a window). NOTE: A significant amount of RAM, usually external SDRAM, may be required to use per-window framebuffers. * Other Common Device Drivers: - Driver Notifications: Support signal notification through SIGEV_THREAD in all drivers that provide signal notifications: RTC, Joysticsks, buttons, Zero-Crossing, wireless, FT80x, Timer, PHY. From Xiang Xiao. - Watchdog Driver: Support auto-monitor service From Gregory Nutt. - Timer and Alarm Drivers: Implement up_critmon_gettime and up_critmon_convert and remove the critical section from current_usec to infinite recursion. From Xiang Xiao. - RTC Driver: Protect the RTC state with a semaphore. From Xiang Xiao. - Serial Upper Half: Call pm_activity() when characters are received on a console device. From Gregory Nutt. - MPU60x0: Initial support for TDK InvenSense MPU6000 and MPU6050 6-axis gyroscope and accelerometers. This commit supports SPI media only. From Bill Gatliff. - EEPROM Driver: Add configurable SPI eeprom frequency. From Valmantas Paliksa. - GPIO Driver: Support reading and writing gpio pins using cat and echo. From Valmantas Paliksa. - MCP2515: Add MCP2515 clock input config to KConfig. From Valmantas Paliksa. - MAX7456: Support for the Maxim MAX7456 on-screen-display chip. From Bill Gatliff. * Common Board Logic: - boardctl(): up_testset() can now be accessed by applications via the boardctl() interface rather than attempting to call it directly. pthread Spinlocks are not available unless the architecture supports the up_testset() operation. From Gregory Nutt. - boardctl(): Add support for BOARDIOC_NXTERM which can be used to create an NxTerm terminal. From Gregory Nutt. - boardctl(): Add boardctl() commands to replace direct calls to nxterm_redraw() and nxterm_kbdin(). From Gregory Nutt. * Microchip PIC32MZ Drivers: - PIC32MZ Timers: Add support for the PIC32MZ timers (driver, lowerhalf, freerun and oneshot) From Abdelatif Guettouche. * Common ARM Options: - arch/arm: Move FPU options to a common place and unify the usage by removing ARCH_CORTEXRxF. From Xiang Xiao. - arch/: Unify the cache interface for all architectures that support a data cache. From Xiang Xiao. - ARMv7-M/A/R: Add a architecture-specific new barriers.h header file that provides the memory barrier definitions that were previously in the (now unified) cache.h header files. From Gregory Nutt. * ARMv7-A - ARMv7-A: Support thumb mode and fix interworking issue. From zhangyuan7. - ARMv7-A: Add weak attribute to arm_data_initialize so platform could provide the new implemenation as needed. From zhangyuan7. - ARMv7-A: Add SCR bit definitions. From Xiang Xiao. - ARMv7-A: Add mmu_l1_map_regions() to remove the code duplication. From Xiang Xiao. - ARMv7-A: Add the initial cortex-a7 architecture support From zhangyuan7. * ARMv7-M - ARMv7-M: stackcheck allow faulting stack calculation to make it to the up_assert reg dump From David Sidrane. * Microchip/Atmel SAMD21/L21 Drivers: - SAMD2/L2: Add RS485 support to SAMD2L2 serial. From Alan Carvalho de Assis. * Misoc: - Minerva: Add support for the Minerva architecture. From Ramtin Amin. * Misoc Boards: - misoc: Add support for an NSH configuration using the Verilator board. From Ramtin Amin. * Nordic NRF52: - NRF52: 1. Added 52840 family support 2. Use common IRQ and memory layout header file for 52832 & 52840. From Levin Li. * Nordic NRF52 Drivers: - NRF52 RNG: 1. added RNG device driver 2. added errdata to correct temp which will be used by RNG module 3. use general task_trigger / event_clear inline api for all driver. From Levin Li. * NXP i.MX RT Drivers: - i.MXRT XBAR: Add XBAR Support. From David Sidrane. - i.MXRT USB: Add USB analog header file. From David Sidrane. - i.MXRT OCOTP: Added OCOTP Support. From David Sidrane. - i.MXRT LCD: Adds framebuffer support for the i.MXRT 1050. Includes DCD initialization for SDRAM to provide space for the framebufer. External code I used/ported is from NXP and is BSD 3-clause license. From Johannes. * NXP i.MX RT Boards: - IMXRT1050-EVK: Adds framebuffer support for the i.MXRT 1050. From Johannes. * NXP LPC17xx - LPC17xx: Add a configuration option to skip over the framebuffer when adding DRAM to the heap. From Gregory Nutt. * NXP LPC17xx Boards - Open1788: Add a configuration to test NxTerms in the PROTECTED mode. From Gregory Nutt. - Open1788: Re-arrange PROTECTED mode link map to make more space for large kernels with debug enabled. From Gregory Nutt. - Open1788: Add a configuration for testing per-window frame buffers using apps/examples/pwfb. From Gregory Nutt. * NXP LPC54xx Boards - LPCXpresso-LPC54628/pwfb: Add per-window framebuffer configuration using apps/examples/pwfb. From Gregory Nutt. - LPCXpresso-LPC54628: Add a configuration for addition per-window framebuffer using apps/examples/pwlines. From Gregory Nutt. * STMicro STM32 Drivers: - STM32F0/L0 SPI: Add SPI support for F0. From Mateusz Szafoni. - STM32 ADC, PWM and TIM: (1) configure injected channels external trigger when ADC enabled, (2) update injected conversion queue of context after configuration, (3) support for offset configuration, and (6) support for advanced timers channel 5 and 6. From Mateusz Szafoni. - STM32 DFU Mode: Add logic to reboot the STM32 in DFU mode. Current implementation only works for STM32F2 and F4. From Bill Gatliff. - STM32F7 LSE: Add configuration of LSE oscillator drive capability From Jussi Kivilinna. - STM32F7 I2C: Fix another memory access issue on a bus error. From David Sidrane. - STM32F7 TIM: Add OUTTOGGLE mode for STM32f7 timer From Valmantas Paliksa. - STM32F7 Timer Lower Half: Add timer lowerhalf driver for stm32f7. From Valmantas Paliksa. - STM32F7 ITM: Add ITM syslog support. From Valmantas Paliksa. - STM32F7 CAN: Add CAN driver with support for three bxCAN interfaces. From Valmantas Paliksa. - STM32F7 QSPI: Add stm32f7 Quad SPI support. From Valmantas Paliksa. - STM32L4 LSE: Ports Jussi Kivilinna's recent STM32F7 LSE change to STM32L4. From Juha Niskanen (Haltian). - STM32H7 I2C: Apply David Sidrane's fix for the STM32F7 to the STM32H7. From Gregory Nutt. - STM32H7 DMA: Rename DMA1/2 irq names to match those from other STM32. Add auxiliary definitions. Add DMAMAP definitions for MDMA, DMA1, DMA2 and BDMA. Add some address blocks. Change RCC definitions to match other STM32 ports. Enable clock for MDMA and BDMA. Rename DMA channel definitions. Separated files for MDMA, DMA, BDMA and DMAMUX. Add missing definitions for MDMA, BDMA and DMAMUX. SPI DMA mode. Add base addresses for D1, D2 and D3 domain; use 2 bytes to specify memory region. Add D1 domain core prescaler configuration. From Mateusz Szafoni. - STM32H7 OTG: Initial OTG support for STM32H7 and some minor improvements. Add support for HSI48 clock. From Mateusz Szafoni. - STM32H7 Build: Initial support for protected build mode. From Mateusz Szafoni. - STM32L4 I2C: Apply David Sidrane's fix for the STM32F7 to the STM32L4. From Gregory Nutt. * STMicro STM32 Boards: - B-L072Z-LRWAN1: Add SX127x configuration. From Mateusz Szafoni. - Nucleo-F091RC: Add support for SX127x radio. From Mateusz Szafoni. - Nucleo-F091RC: Add SX127x configuration. From Mateusz Szafoni. - Nucleo-F207ZG: Add support for USB and initialize CDCACM if configured. From Mateusz Szafoni. - STM32F429I-DISCO: Add an apps/examples/examples/nxhello configuration. From Gregory Nutt. - Nucleo-F446RE: Add support for the Nucleo F446RE. From Sebastien Lorquet. - B-L072Z-LRWAN1: Use HSI as default clock source. From Mateusz Szafoni. - Nucleo-L073RZ: Add SX127x configuration. From Mateusz Szafoni. - Nucleo-L073RZ: Port button logic from nucleo-f072 which appears to be the same. From Gregory Nutt. - Nucleo-L432KC: Add support for I2C driver initialization. From Nikolay Semenov. - Nucleo-H743ZI: Add support for USB and initialize CDCACM if configured. From Mateusz Szafoni. - OmnibusF4: Initial support for the OmnibusF4 family of flight management units. "OmnibusF4" is not a product name per se, but rather a design spec that many product vendors adhere to. The spec defines the major components, and how those components are wired into the microcontroller. Airbot is one such vendor, and they publish a schematic here: http://bit.ly/obf4pro. Other software that supports the OmnibusF4 family include Betaflight, iNAV, and many others. PX4 recently added support as well, using their own, non-upstreamed, bespoke port of NuttX. No code from those resources is included in this port. From Bill Gatliff. - OmnibusF4: Add MAX7546 support. From Bill Gatliff. * TI CCxx: - CC1312R1: Code complete and builds successfully. Stalled on further radio development. I planned to integrate the IEEE 802.15.4 radio interface, but the Cortex-M0 interface is not available with an open license. * TI CCxx Boards: - LaunchXL-CC1312R1: Add support for on-board LEDs and buttons. The LauchXL-CC1312R1 NSH Configuration is now fully functional. From Gregory Nutt. - LaunchXL-CC1310: Clone LED and button support from the LaunchXL-CC1312R1. The number of LEDs and buttons as well as DIO usage is identical (Still not functional). From Gregory Nutt. * Tools: - tools/rmcr.c: Add a tool to remove carriage returns and dangline whitespace at the end of lines. From Gregory Nutt. - tools/nxstyle.c: Can now detect if the C comment closing is not on a separate line. From Gregory Nutt. - tools/nxstyle.c: Make sure that all files begin with a comment on line 1 (which should be the file header). From Gregory Nutt. - tools/nxstyle.c: Add check for multiple definitions of local variables on a line. From Gregory Nutt. - tools/nxstyle.c: Beef up logic that detects multiple variable definitions per line. From Gregory Nutt. - tools/nxstyle.c: Add capability to detect CamelCase identifiers. From Gregory Nutt. - tools/nxstyle.c: Add logic to detect a blank line following a left brace or a blank line preceding a right brace. From Gregory Nutt. - tools/nxstyle.c: Don't complain about certain lowercase characters in otherwise uppercase pre-processor identifers: IPv6, IPv4, ICMPv6, IGMPv2, p as a decimal point, d signifying a divisor. It was a bad idea to let the door open a crack for there. While they improve readability, the inconsistently also causes other problems. From Gregory Nutt. * Build System: - Makefiles: Modify tools/Makefiles to add a "Do not Edit" warning on defconfig files From Alan Carvalho de Assis. * Libraries/Header Files: - lib_vsprintf() (Nano): Add newlib-nano lib_vsfprintf has been added and is now the default support for the printf family. This fprintf code was originally adapted from AVR libc and provides improved floating point output support, including 'g' mode and making 'f' mode include digits past the decimal by default. The newlib version can be found here: https://salsa.debian.org/electronics-team/toolchains/newlib-nano. That project is GPL overall, but the newlib-nano printf portions are BSD licensed as described in the COPYING.NEWLIB file. From Keith Packard. - lib_vsprintf() (Nano): Added support for long lont types. From Johannes. - lib_vsprintf() (Nano): Added hh type modifier (without extending the flag variable). From Johannes. - lib_vsprintf() (Nano): Adds configurable support for numbered arguments. From Johannes. - lib_vsprintf() (Nano): Cleaned naming and allow for leading zeros in argument number (which doesn't make sense but should be). From Johannes. - lib_vsprintf() (Legacy): Add support for %g format which, for these purpose, is equivalent to %f except that trailing zeroes are suppressed. From Gregory Nutt. - vscanf(): Moved vscanf logic to lib_sscanf.c Switched to stream interface (tricky, because the old implementation used massive read ahead, which isn't suitable for streams, chars already read are gone). Added hh, h, and ll modifiers. From Johannes. - scanf() and fscanf(): Added scanf and fscanf based on enhanced vscanf(). From Johannes. - uname(): Add build date and time to uname output (like Linux). From Gregory Nutt. - strsep(): Add strsep BSD/Linux function. From Xiang Xiao. - netdb: Hostname support no longer depends on CONFIG_NET since the host name is also useful in the non-network environment. CONFIG_NET_HOSTNAME changed to CONFIG_LIB_HOSTNAME. From Xiang Xiao. - netdb: Support the nameserver change notification then we can pass DNS info from server to client in usrsock case. From Xiang Xiao. - include/fixedmath.h: Add macros for conversion between types b16_t and type double From Gregory Nutt. - include/limits.h: Define NL_ARGMAX (as well as some of the other 'invariant values' per http://pubs.opengroup.org/onlinepubs/7908799/xsh/limits.h.html). From Johannes. - linclude/limits.h: Add 'range 9 999999' to CONFIG_LIBC_NL_ARGMAX to Kconfig. Per OpenGroup.org, the minimum value for NL_ARGMAX is 9. From Gregory Nutt. - include/nuttx/lcd/edid.h: Add extended EDID block IDs From Gregory Nutt. * apps/ General: - apps/: Follow up the kernel signal-related change in various files under examples/ and graphics/. From Xiang Xiao. - apps/: Update for corrected name of standard header file. Should be dlfcn.h, not dllfcn.h. From Gregory Nutt. - apps/: The file system can no longer be disabled. Remove all conditional logic based on CONFIG_NFILE_DESCRIPTORS==0 From Gregory Nutt. - apps/: Remove/replace all conditional logic based on CONFIG_NSOCKET_DESCRIPTORS == 0. That value is always greater than zero now. In places just replace with #ifdef CONFIG_NET. From Gregory Nutt. - apps/: Some updates due to NuttX renaming: CONFIG_BOARD_INITIALIZE is now CONFIG_BOARD_LATE_INITIALIZE; board_initialize() is now board_late_initialize(). From Gregory Nutt. - apps/: Graphics interfaces nx_openwindow() and nxtk_openwindow() now accept an additional 'flag' parameter. From Gregory Nutt. * NSH: apps/nshlib: - apps/nshlib/nsh_netinit.c: Update for changes to signal notification structures. From Gregory Nutt. * Examples/Tests: apps/examples: - apps/examples/ini_dumper: New example program. ini_dumper is example program that dumps content of ini file in pretty ascii table. It is using inih ini library in fsutils/inih. From MichaÅ Åyszczek. - apps/examples/modbusmaster: Add Simple Modbus master example. This example only supports Read/Write HoldingRegisters, but it is easy to extend it to support Read/Write Input/Coils/etc. Originally creatd by Vytautas in 2016 and updated with minor fixes for this commit. From Alan Carvalho de Assis. - apps/examples/pwfb: Added a test/example at apps/examples/pwfb that was used for initial testing of the per-window framebuffer feature. From Gregory Nutt. - apps/examples/pwlines: Added another a test/example at apps/examples/pwlines that was used for further testing of the per-window framebuffer feature. From Gregory Nutt. - apps/examples/sx127x: Add sx127x demo From Mateusz Szafoni. * File System Utilities: apps/system - apps/fsutils/inih: New package. inih (INI Not Invented Here) is a simple .INI file parser written in C. https://github.com/benhoyt/inih. From MichaÅ Åyszczek. * Network Utilities: apps/netutils: - apps/netutils/codecs/: Remove the big Base64 stack array. From Xiang Xiao. - apps/netutils/codecs/: Add base64_[de|en]code_length() API From ligd. * System Utilities: apps/system - apps/system/cfgdata: Make builtin task stack size and priority configurable. Set default to 2048 (from 1024) per recommendation of Ken Pettit. From Gregory Nutt. - apps/system/embedlog: Update to version 0.4.0. From MichaÅ Åyszczek. - apps/system/nxplayer and nxrecorder: Change 'int prio' to 'unsigned int prio'. Required by changes to MQ function prototypes. From MichaÅ Åyszczek. - apps/system/psmq: New package. psmq is publish subscribe message queue. It's a set of programs and libraries to implement publish/subscribe way of inter-process communication on top of POSIX message queue. From MichaÅ Åyszczek. - apps/system/zmodem: Switch to the raw mode before transfer and restore to the original setting after finishing the transfer. From Xiang Xiao. * Testing: apps/testing: - apps/testing/: Move all file system tests from examples/ to testing/ (cxxtest, fstest, nxffs, smart, smart_test, smp). From Gregory Nutt. - apps/testing/cxxtest: Add a README file. From Gregory Nutt. - apps/testing/ostest: Add test of pthread_mutex_timedlock() From Gregory Nutt. - apps/testing/ostest: Fix several errors in the setvbuf() test. From Gregory Nutt. - apps/testing/scanftest: Port of Greg King's scanf test (https://github.com/cc65). From Johannes. * Tools: apps/tools: - apps/tools/check-hash.sh: Add a tool check hash on downloaded packages. From MichaÅ Åyszczek.
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: Restructure nxsig_deliver() so that the signal handler is not called with the pre-emption disabled (or, at least no with pre-emption disabled by nxsig_deliver() itself). From Gregory Nutt. - Critical Section Monitor: Move up_critmon_* to arch.h avoid the duplicated declaration. From Xiang Xiao. - Assertions: Architecture-specific assertion logic should dump CPU0 IDLE stack only when PID equals 0. IDLE threads of other CPUs do not need this special check. From Xiang Xiao. - Message Queues: Change 'int prio' to 'unsigned int prio'. According to open group specification, priority field in mq_* functions should have unsigned type: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/mqueue.h.html. From MichaÅ Åyszczek. - Timer Expiration: Fix macro SEC2TICK() 32-bits overflow by using uint64_t in calculation. From ligd. - Kernel Memory Manager: In mm/kmm_heap/kmm_kernel.c, remove unused, duplicated kmm_heapmember(). From Xiang Xiao. - User Memory Manager: Ensure all user allocation try sbrk before fail From Xiang Xiao. - waitid(): Could exit without leaving critical section on some error conditions. From Gregory Nutt. - IOBs: iob_allocwait() should decrease semcount manually. From Xiang Xiao. - IOBs: iob_copyin() should wait for each buffer and adjust the return value of iob_copyin_internal return to simplify the code From Xiang Xiao. - IOB Notifier: Don't check iob_navail in iob_notifier_setup to avoid a potential race condition. From Xiang Xiao. - IOB Debug Dump: Format the whole line before log to avoid the multiple timestamp prefix in each line. From Xiang Xiao. - SHM: Convert bytes to pages by MM_NPAGES instead of MM_PGALIGNUP From Xiang Xiao. - SHM: shmget() should hould call shm_extend() to allocate the physical memory. From Xiang Xiao. - Page Allocator: mm/pgalloc: shouldn't just allocate one page always. From Xiang Xiao. - Granule Allocator: Fix the wrong data in g_1bit_info and make the internal function static. From Xiang Xiao. - srbk(): Fix a backward conditional test. Should call mm_initialize() when brkaddr equal zero From Xiang Xiao. - sbrk(): Pass ARCH_HEAP_VEND as maxbreak argument From Xiang Xiao. - ELF Headers: Move elf related arch function to include/nuttx/elf.h because the implementation is located in libs/libc/machine and in order to avoid the conflict with the 3rd party libraries and clean up the file inclusion: (1) Remove redundant elf32.h, (2) Remove nuttx/binfmt/elf.h in libs/libc/machine, (2) Remove nuttx/binfmt/elf.h in modlib, and (4) Rmove nuttx/module.h in modlib. From Xiang Xiao. - ELF Executables: If there is an address environment (CONFIG_ARCH_ADDRENV), binfmt/elf doesn't need to free ctor/dtor alloc since freeing the address environment releases the heap automatically. From Xiang Xiao. - ELF Configuration: Correct libcxx exception handling by introducing the generic config(CXX_EXCEPTION and CXX_LIBSUPCXX) From Xiang Xiao. - ELF Loaders: Call umm_initialize as soon as possible otherwise elf_loadctors/elf_loaddtors may fail to allocate memory. From Xiang Xiao. * Crypto: - Crypto AES: After NuttX 7.28 crypto/aes.c would no longer compile. From Gregory Nutt. * File System/Block and MTD Drivers: - open(): Fix not returning failure for block_proxy() call. From David Sidrane. - AIO: aio_cancel() needs to signal caller after success. Also fix minor issue in the error handler. From Xiang Xiao. - HostFS: Remove the unnecessary use of host_stat() in hostfs_bind() From ligd. - LittleFS: Fix a minor issue found in code review: (1) Replace printf to finfo/fwarn/ferr, (2) Replace malloc/free to kmm_malloc/kmm_free, (3) define LFS_NAME_MAX to NAME_MAX, (4) Check the big endian using CONFIG_ENDIAN_BIG. From Xiang Xiao. - LittleFS: VFS Lookahead should use bit unit not byte unit. From Xiang Xiao. - NxFLAT: Correct a double free debug assertion. This occurs when groups are enabled: (1) once via binfmt_exit and unload_module, and (2) once via sched_releasetcb(). this was corrected by adding logic to free/unload the memory once and nullify the pointer so that cannot be freed a second time. This commit resolves Bitbucket issue #145. From Valmantas PalikÅ¡a. - NxFLAT: File descriptor leaks when nxflat loading fails. From Valmantas PalikÅ¡a. - ProcFS: Fix typo in procfs uptime logic. From Sebastien Lorquet. * Networking/Network Drivers: - Network Configuration: The setup seems to support a network without sockets (CONFIG_NSOCKET_DESCRIPTORS == 0). That is not the case; if the network is enabled, sockets must be provided. From Gregory Nutt. - Networking: The value ERROR should never be returned from internal OS functions. That is reserved for returning values to appliations with the errno value set. Within the OS, errors are returned with a negated errno value ALWAYS. From Gregory Nutt. - Networking: The struct in_addr doesn't have the member sin_addr. The function lib_lo_ipv6match() is for IPv6. Correct the function it calls from lib_lo_ipv4matchto() to lib_lo_ipv6match(). Also add CONFIG_NET_IPv6 for configuration. From Kejun ZHOU. - TCP (buffered) send: Fix assertion crash when window size is zero. From Gregory Nutt. - ICMP/ICMPv6: Bind icmp callback from device to connection. Resolves the issue that bind() could not be called before send() From anchao. - TUN/TAP Driver: Re-order all TUN/TAP driver state data. Not only was was with wasting memory due to alignement requirements, it was also causing network packet buffers to be improperly aligned causing problems because the network requires 16-bit packet buffer alignment for uint16_t accesses. This alignment problem was discovered by Alan Carvalho de Assis. From Gregory Nutt. - TUN/TAP Driver: Packet buffer size should include the configured GUARD_SIZE. And, given how the buffers are allocated, the allocation size must be an even number of 16-bit values to preserve alignment. From Gregory Nutt. - Local Sockets: In local_connect(), initialize lc_result before giving lc_waitsem From zhangyuan7. - Local Sockets: Fixed deadlock issue by replacing nxsem_wait() with net_lockedwait() so that we do not wait with the network locked. From zhangyuan7. * Graphics/Display Drivers: - NX Graphics: Remove naming associated with the now non-existent NXFE graphics layer: Rename nxfe_reportposition to nxmu_reportposition. Rename nxfe_redrawreq to nxmu_redrawreq. Rename nxfe.h to nxmu.h. Rename nxfe_state_s to nxmu_state_s. Rename nxfe_conn_s to nxmu_conn_s. From Gregory Nutt. - NxTERM: Remove the nxterm_unregister interface. The correct way to unregister a device is to unlink it. From Gregory Nutt. - NxTerm: Needs to clear display initially. Otherwise, garbage from previous display may still be present from preceding NxWM window. From Gregory Nutt. - Font Cache: Fix a memory leak in the font cache. With a busy NxTerm display, this could drain off all the memory pretty quickly! From Gregory Nutt. - Graphics: Nothing under graphics/ should set the errno. From Gregory Nutt. - Graphics: Fix a coordinate system error in nx_filltrapezoid(). When no clipping rectangle is falls, it falls back to use the entire window as for the clip. However, that window must then then be in window relative coordinates, not in absoute device coordinates. From Gregory Nutt. * Common Board Logic: - boardctl(): Fix compiling error when set CONFIG_BOARDCTL_IOCTL/CONFIG_BOARDCTL_UNIQUEID. From Kevin Liu. * Common Drivers: - INA3221: Fix errors in INA3221 register field addresses and bitfield values. Signed value was losing its signed-ness due to use of unsigned type for register. From Ken Pettit. - Serial Upper Half: Initialize OPOST and ONLCR in uart_register. From Xiang Xiao. - Serial Upper Half: Don't reset the circular buffer on close since DMA may still be transferring data in the background if the user closes the handle too quickly and the handle is opened with O_NONBLOCK. From Xiang Xiao. - 16550 UART: Fix error: 'g_uart0port' undeclared. From Xiang Xiao. - 16550 UART: Fix typo for UART1 flow field initialization From Gregory Nutt. - CDC/ACM HCD: Fixes to the IOCTL method in recovery of UART pointer and in names of Termios-related field. From xhbm. - USB Device: Fix type for USBDEV_TRACE_INITIALIDSET in Kconfig. From Mateusz Szafoni. - TCA64xx: Fix some errors in the TCA64XX driver. From Bruno Schwander. - SYSLOG RAMLog: Fix error: Conflicting types for 'ramlog_addchar' From Xiang Xiao. - NRF24L01: Fix uninitialized irq_work which was causing a hard_fault on interrupt handler whenever something was sent from nrf24l01_term From Petri Ahonen. - MCP2515: Use kmm_zalloc to allocate device state structure. Fix some compiler errors. From Valmantas Paliksa. * Architecture Common: - arch/ Common: Remove architecture-specific watchdog.h and arm-elf.h because they are empty. The arm-elf header file was never used; the empty watchdog.h header file was used in only one place. From Xiang Xiao. - arch/ Common: Move up_pminitialize() after timer_initialize() From ligd. - arch/ Common: Align semi-hosting call style with other syscalls in architecture-specific syscall.h. From Xiang Xiao. - arch/ Common: Every file that uses serial IOCTLs (TIOC*) must explicity include nuttx/fs/ioctl.h. This was included previously via sneak path in the now deleted arch/serial.h. From Gregory Nutt. - arch/ Interfaces: Rename sched_process_cpuload to nxsched_process_cpuload. All internal sched_ functions should be prefixed with nx. From Valmantas Paliksa. * ARMv7-A: - ARMv7-A MMU: Updating the cp15_wrttb and cp15_wrdacr functions to use inline assembly in the correct way. The incorrect method was generating errors as ARMv7-a expects the MCR/MRC instructions to provide registers as an argument(MRC p15, 0, <Rt>, c2, c0, 0) and the code was providing a constant value(and hence the build error). From Bilal Wasim. - ARMv7-A: Remove inclusion pg_macros.h for armv7-a since this header file does not exist. From zhangyuan7. - ARMv7-A: Guard some assembly files if configuration not selected. From zhangyuan7. - ARMv7-A GIC: Fix assemble error when including gic.h From Xiang Xiao. - ARMv7-A GIC: Don't use GIC_ICDDCR_ENABLEGRP1 for GIC NONSECURE since this bit doesn't exist in this mode. From liuzhuang. * ARMv7-R: - ARMv7-R Syscall: In arch/arm/include/syscall.h, add missing inclusion of arch/armv7-r/syscall.h for Cortex-R. From Xiang Xiao. * ARMv7-M: - ARMv7-M Initialization: As noted by Roland Takacs in Bitbucket issue 141, there is a compilation error for STM32 if CONFIG_NET and CONFIG_NETDEV_LATEINIT are selected. That was due in part to the commit which extended up_netinitialize() with a !defined(CONFIG_NETDEV_LATEINIT) guard but did not add the guard to concrete implementations. I say "in part" because I don't think that the original intent of commit 19e16cb was to enable an alternative initialization of MCU internal Ethernet support but rather to enable support of external Ethernet devices that may have dependencies on, for example, SPI. However, this is still a proper fix to avoid the compilation error that can occur with this combination of configuration options. From Gregory Nutt. - ARMv7-M Configuration: ARCH_HIPRI_INTERRUPT shouldn't select ARMV7M_USEBASEPRI. First because that is a violation of the layered nature of the Kconfig architecture, but also because then Kconfig will generate errors when high priority interrupts are used with other architectures. From Xiang Xiao. - ARMv7-M Vector Table: Make the default NVIC_VECTAB_TBLOFF_MASK safer. The base address of the new vector table must be aligned to the size of the vector table extended to the next larger power of 2. From Xiang Xiao. - ARMv7-M RAM Vectors: Correct bad NVIC_VECTAB_TBLOFF_MASK definitions in previous commit. Were missing bits in the mask. Raised DEBUGASSERT in armv7-m/up_ramvec_initialize.c line: 144. From Mateusz Szafoni. * Expressif ESP32 Drivers: - ESP32 Timer ISR: Fix backward comparison. From Gregory Nutt. - ESP32 Serial: Fix some backward arguments. Correct 2-stop bit setting. From Gregory Nutt. * Microchip/Atmel SAMD2x/L2x Drivers: - SAMD2/L2 Serial: SAMD2/L2 serial driver. It needs sam_usart_enable(). to work From Alan Carvalho de Assis. * Microchip/Atmel SAMD3/4 Drivers: - SAM3/4 Ethernet: Port Anthony Merlino's SAMv7 fix to similar Ethernet driver for the SAM3/4. From Gregory Nutt. * Microchip/Atmel SAMV7 Drivers: - SAMv7 SPI: Fix DMA Tx/Rx timeout issue. From Kevin Liu. - SAMv7 QSPI: Compile error when set CONFIG_SAMV7_QSPI_DLYBCT. From Kevin Liu. - SAMv7 Ethernet: The logic for determining the number of queues for SAMV71 must be extended. All SAMv7 parts increase the number of queues from 3 to 6 at revision B, not just the SAMV71. From Gregory Nutt. - SAMv7 Ethernet: Fixes rxdesc index logic to handle Buffer Not Available (BNA) condition. If a SOF is found, but no EOF, don't move past the frame. Instead, keep the index at the SOF buffer until the rest of the data is written. This fixes a receiver lockup condition where the peripheral and this driver get out of sync with there head pointers. In this case the driver has moved past buffers it owns, without clearing ownership, which results in the peripheral and driver in a deadlock with each other. From Anthony Merlino. * Microchip/Atmel SAMA5Dx Drivers: - SAMA5Dx Ethernet: Port Anthony Merlino's SAMv7 fix to similar Ethernet driver for the SAMA5Dx. From Gregory Nutt. * Microchip/Atmel SAMA5Dx Board: - SAMA5D2-XULT: Move console from FLEXCOM4 to UART1. FLEXCOM4 does not work for the Arduino serial. UART1 is used with the VCOM provided by the EDBG. From Gregory Nutt. * NXP i.MXRT: - i.MXRT Clock Configuration: If SDRAM is actived it was only running at 40MHz. This was becaus imxrt_clockconfig.c changed the SEMC clock divider after the DCD was configured. This commit corrects that. From Johannes. * NXP i.MXRT Drivers: - i.MXRT GPT: Correct register offsets. From David Sidrane. - i.MXRT TMR: Fix addressing and restructure using common offset. From David Sidrane. - i.MXRT ADC: Error in offset. From David Sidrane. * NXP/Freescacle Kinetis Boards: - Teensy-3.x: Fix a mismatch in types in defconfig. From Gregory Nutt. * NXP LPC17xx: - LPC176x Clock Configuration: The code preserves undocumented reserved bits only if board does not set them to keep previous behavior for boards where developers (hopefully) know what values should be set into these bits. From Pavel Pisa. - LPC17xx Clock Configuration: The enable of EMC clocks has to be preserved when already enabled by loader. EMC and related pins configuration has to be skipped if the system is run from SDRAM. A region of SDRAM which is used by system must not be used for heap. From Pavel Pisa. * NXP LPC17xx Drivers: - LPC17xx CAN: The name can_txready clashes with NuttX CAN core global function. LPC178x has only single LPC17_SYSCON_PCLKSEL with only single divisor. From Pavel Pisa. * NXP LPC17xx Boards: - Open1788: Add missing MPU configuration option. From Gregory Nutt. * On Semi LC823450 Boards: - LC823450-XGEVK: Remove -nostdinc to avoid build error From Masayuki Ishikawa. * STMicro STM32: - STM32: Don't try including stm32_gpio.h from within chip/*.h header files. Not only is bad style for a layered inclusion system, but it doesn't always work. From Gregory Nutt. * STMicro STM32 Drivers: - STM32 PWM: Fix polarity and IDLE state configuration From Mateusz Szafoni. - STM32 ADC, PWM and TIM: (1) missing T1TRGO2 for JEXTSEL, (2) fix sample time configuration for channels. The array index for channels was missing, (3) fix TRGO/TRGO2 configuration, and (6) support for advanced timers channel 5 and 6. From Mateusz Szafoni. - STM32 Heap: Change 'if CONFIG_STM32_HAVE_CCM' to 'ifdef CONFIG_STM32_HAVE_CCM' to avoid a warning when CONFIG_STM32_HAVE_CCM is not defined. From Gregory Nutt. - STM32 Oneshot Timer: Fix an error introduced be a previous timer commit. From Maximilian Kriegleder - STM32 Tickless Mode and Free-Running Timer: Apply Max's stm32_oneshot.c fix to the tickless implementation and to the freerunning time. From Mateusz Szafoni. - STM32 PWM: Set CCPxP and CCPxNP bits if polarity is negative. Missing commas in initializers could break compilation in certain configurations. From Mateusz Szafoni. - STM32F7 Interrupts: Add the missing macro STM32_IRQ_NIRQS used by arch/arm/src/stm32f7/stm32_irq.c. From Kejun ZHOU. - STM32H7 DMA: Fix AHB1 base adresses memory map. From Mateusz Szafoni. - STM32H7 SysTick: H7 appears to ignore the SysTick CLKSOURCE bit and use the CPU clock in all cases. From Mateusz Szafoni. * STMicro STM32 Boards: - B-L072Z-LRWAN1: Fix typo in SPI1 pin definitions. From Mateusz Szafoni. - STM32F429I-DISCO: Handle multiple calls to the LCD up_fbinitialize() function. From Gregory Nutt. - STM32F769I-DISCO: Florian R. HÃ¶lzlwimmer reports that stm32_appinitialize.c often has missing OK and NULL definitions. This should be fixed by including sys/types.h where they are defined. From GregoryN. - STM32F769I-DISCO: Remove CONFIG_STM32F7_QUADSPI=y from the configuration. This was apparently set before the implementation was added. Now that the implemenation was added, the configuration will not build because it requires that QSPI GPIO pin definitions be provided in the board.h header file. From Gregory Nutt. * TI AM335x Drivers: - AM335x Serial: Eliminate an error 'TIOCSBRK undeclared. From Gregory Nutt. * C Library/Header Files: - strto*: In alll strto* function family, did't consume single '-' or '+', allow sign in strotul(l)). From Johannes. - getopt(): Add logic to reinitialize the stale context for the FLAT/PROTECTED builds. In these builds getopt() global variables may be shared by many tasks. If any task exits the getopt() loop before all command line arguments have been parsed, then getopt() global variables will be left in a bad state. The next time getopt() is called, this logic should detect the bad state and force the state of getopt() to be re-initialized so that it can be reused. This logic is not full proof (it would fail, for example, if you tried to parse the same command line twice) but should catch the typical misuse cases. From Xiang Xiao. - sscanf(): Initialized the lastc pointer to avoid the checks for NULL. Removed a bug in the floating point parsing which allowed several signs after each other. From Johannes. - lib_vsprintf() (Legacy): No precision specifier resulted in precision 0 but should be precision 6. From Johannes. - lib_vsprintf() (Legacy): Correct justification for alternate forms of %p and %P From ligd. - lib_vsprintf() (Nano): Add long long support. CONFIG_LIBC_LONG_LONG needs at least CONFIG_NANO_PRINTLEVEL 2. Code size for compile without CONFIG_LIBC_LONG_LONG shouldn't be affected. From Johannes. - lib_vsprintf() (Nano): Remove CONFIG_LIBC_PRINT_MINIMAL. The output in that configuration is unsatisfactory and inappropriate for use with NuttX. For example, the output from many NSH commands become corrupted and useless. Doesn't belong in this context. From Gregory Nutt. - libs/libc/symtab: Remove unused symtab_findorderedbyvalue(). From Xiang Xiao. - libs/libc/machine/arm: Fix the minor issue in libc arm machine folder; MOVW/MOVT should use zero(not sign) extension. From Xiang Xiao. - libs/libc/libc.csv: Should be locale.h not local.h. From Joao Matos. - libs/libc/libc.csv: Needed logic for correct compilation if not using CONFIG_LIBC_WCHAR. From Joao Matos. - libxx: Always include libxx_cxa_guard.cxx in the build for for uclibcxx. From zhangyuan7. - include/stdbool.h: Define bool only when __cplusplus isn't defined. From Xiang Xiao. - include/nuttx/list.h: Added a Linux-compatible list implementation. From zhuyanlin. - include/nuttx/irq.h: Fix enter_critical_section/spin_lock_irqsave macro typo error and remove the duplicated inclusion of arch/irq.h. From Xiang Xiao. - include/dlfcn.h: Correct naming of standard header file. Should be dlfcn.h, not dllfcn.h. From Gregory Nutt. - include/nuttx/nx/nxmu.h: This header file could be lethal; it declared an #error if CONFIG_DISABLE_MQUEUE=y. From Gregory Nutt. - include/nuttx/compiler.h: Important fix for C++ users. compiler.h was using the value of __STDC_VERSION__ to determine if inline functions are supported or not. If not then the keyword inline was defined out. Good for C but bad for C++ because C++ does not define __STDC_VERSION__ at all. C++ applications may draw in compiler.h indirectly via other head files and this can result in C++ compiler problems since 'inline' is defined out. This fix is to ignore the (undefined) __STDC_VERSION__ if __cplusplus is defined. From Gregory Nutt. - include/nuttx/elf.h: Adds missing extern "C" __cplusplus guard. From Anthony Merlino. - include/poll.h: Remove un-named union from 'struct pollfd'. It is not required by OpenGroup.org and violates the NuttX C coding standard because it is not C89 compatible. From Gregory Nutt. - libs/libc/Makefile, libs/libnx/Makefile, and mm/Makefile: Remove obj-path MKDEPS option since make dependency target (MT) is not supported by some toolchains. From anchao. - include/nuttx/compiler.h: Assume inline support if __STDC_VERSION__ not defined. From Xiang Xiao. * Tools: - tools/convert-comments.c: Fix an error in handling of a blank C++ comment before a comment block. From Gregory Nutt. - tools/lowhex.c: Fix an initialization problem that was causing some odd behavior at the beginning of lines. From Gregory Nutt. - tools/nxstyle.c: Fix logic that detects if an operator is correctly delimited with spaces. sched/: Various changes because sched/ C files were used as Guinea Pigs to test nstyle.c. From Gregory Nutt. - tools/nxstyle.c: Was confusing hex constants with strings staring with 'x'. Added logic to complain about hex constants containing upper case characters. From Gregory Nutt. - tools/nxstyle.c: Fix logic error that prevent detecion of '/' and '/=' as operators. net/: Minor updates resulting from testing tools/nxstyle. From Gregory Nutt. * NSH Library: apps/nshlib: - NSH Console: Fix copy paste errors. Some Kconfig configuration names needed CONFIG_ prefix. From David Sidrane. - nshlib/nsh_timcmds.c: Uninitialized struct tm caused 'date -s' to fail. From Valmantas PalikÅ¡a. * Examples: apps/examples: - apps/examples/nxterm: Replace direct calls to nxtk_register() with legal, indirect calls via boardctrl(BOARDIOC_NXTERM). Replace calls to (deleted) nxterm_unregister(). The correct way to delete a driver is by unlink'ing it. From Gregory Nutt. - apps/examples/nxterm: Most configuration options were not available in the Kconfig file. From Gregory Nutt. - apps/examples/nxterm: Replace illegal direct calls to nxterm_redraw() and nxterm_kbdin() with new boardctl() calls. From Gregory Nutt. - apps/examples/nxterm: NxWM passed the size of the NxTK sub-window but nxterm example passed the size of the complete NxTK window. They must be made consistent. From Gregory Nutt. * Graphics Utilities: apps/graphics: - apps/graphics/NxWidgets/nxwm: Correct an error in the type of the return value in CCalibration. From Gregory Nutt. - apps/graphics/NxWidgets/nxwm: Replace direct calls to nxtk_register() with legal, indirect calls via boardctrl(BOARDIOC_NXTERM). Replace calls to (deleted) nxterm_unregister(). The correct way to delete a driver is by unlink'ing it. From Gregory Nutt. - apps/graphics/NxWidgets: Replace illegal direct calls to nxterm_redraw() and nxterm_kbdin() with new boardctl() calls. From Gregory Nutt. * Modbus: apps/modbus: - apps/modbus/Kconfig: Fix modbus master Kconfig. Modbus Master ASCII compiles correctly. From Alan Carvalho de Assis. * Network Utilities: apps/netutils: - apps/netutils/dhcpc/dhcpc.c: Fix an error for DHCP REQUEST receiving a NAK.In DHCP Request operation, no need to update ciaddr to the client address and keep it as 0. From Kevin Liu. * System Utilities: apps/system: - apps/system/vi/vi.c: Fix an infinite loop bug that can show up in some cases (plus a couple of other items). From Ken Pettit. - apps/system/vi: Condition KEY_CMDMODE_REPEAT with CONFIG_SYSTEM_VI_INCLUDE_COMMAND_REPEAT to avoid build error when option is not selected. From Anthony Merlino. - apps/system/nxplayer/nxplayer.c: Fix build error when only enable CONFIG_AUDIO_EXCLUDE_VOLUME is enabled. From ZhongAn. - apps/system/system/system.c: Correct a path name. From anchao. - apps/system/taskset: Fix command arguments are not passed. From Masayuki Ishikawa. * Testing: apps/testing: - apps/testing/ostest/timedmutex.c: pthread_mutex_timedlock() returns EDTIMEDOUT on a timedout, not EAGAIN. From Gregory Nutt. * Tools: apps/tools: - apps/tools/mksymtab.sh: 'export LC_ALL=C' to get the traditional sort order From anchao.