Skip to content
ReleaseNotes 524 KiB
Newer Older
Gregory Nutt's avatar
Gregory Nutt committed
12001 12002 12003 12004 12005 12006 12007 12008 12009 12010 12011 12012 12013 12014 12015 12016 12017 12018 12019 12020 12021 12022 12023 12024 12025 12026 12027 12028 12029 12030 12031 12032 12033 12034 12035 12036 12037 12038 12039 12040 12041 12042 12043 12044 12045 12046 12047 12048 12049 12050 12051 12052 12053 12054 12055 12056 12057 12058 12059 12060 12061 12062 12063 12064 12065 12066 12067 12068 12069 12070 12071 12072 12073 12074 12075 12076 12077 12078 12079 12080 12081 12082 12083 12084 12085 12086 12087 12088 12089 12090 12091 12092 12093 12094 12095 12096 12097 12098 12099 12100 12101 12102 12103 12104 12105 12106 12107 12108 12109 12110 12111 12112 12113 12114 12115 12116 12117 12118 12119 12120 12121 12122 12123 12124 12125 12126 12127 12128 12129 12130 12131 12132 12133 12134 12135 12136 12137 12138 12139 12140 12141 12142 12143 12144 12145 12146 12147 12148 12149 12150 12151 12152 12153 12154 12155 12156 12157 12158 12159 12160 12161 12162 12163 12164 12165 12166 12167 12168 12169 12170 12171 12172 12173 12174 12175 12176 12177 12178 12179 12180 12181 12182 12183 12184 12185 12186 12187 12188 12189 12190 12191 12192 12193 12194 12195 12196 12197 12198 12199 12200 12201 12202 12203 12204 12205 12206 12207 12208 12209 12210 12211 12212 12213 12214 12215 12216 12217 12218 12219 12220 12221 12222 12223 12224 12225 12226 12227 12228 12229 12230 12231 12232 12233 12234 12235 12236 12237 12238 12239 12240 12241 12242 12243 12244 12245 12246 12247 12248 12249 12250 12251 12252 12253 12254 12255 12256 12257 12258 12259 12260 12261 12262 12263 12264 12265 12266 12267 12268 12269 12270 12271 12272 12273 12274 12275 12276 12277 12278 12279 12280 12281 12282 12283 12284 12285 12286 12287 12288 12289 12290 12291 12292 12293 12294 12295 12296
      forks from the main repositories, albeit with many interruptions.
      The completion of this wireless feature will postponed until at
      least NuttX-7.19.

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:

      - Explicitly initialize the group tg_exitsem with sem_init().  The
        existing logic worked because the correct initialization value is
        all zero, but it is better to initialize the semaphore explicitly.
      - The TCB nchildren field should not be incremented when pthreads are
        created.
      - Move fields related to parent/child task relationship out of TCB
        into group structure where they belong.  Child is a group, not a
        thread.
      - mq_send() was not setting the errno value on certain failures to
        allocate a message.
      - Define 'group' even if HAVE_GROUPID is not set.  From Mateusz
        Szafoni.
      - Vector table should have dimension NR_IRQS, not NR_IRQS+1. From
        Sagitta Li.
      - pthreads:  When a pthread is started, there is a small bit
        of logic that will run on the thread of execution of the new
        pthread.  In the case where the new pthread has a lower
        priority than the parent thread, then this could cause both the
        parent thread and the new pthread to be blocked at the priority of
        the lower priority pthread (assuming that CONFIG_PRIORITY_INHERITANCE
        is not selected). This change temporarily boosts the priority of the
        new pthread to at least the priority of the new pthread to at least
        the priority of the parent thread.  When that bit of logic has
        executed on the thread of execution of the new pthread, it will then
        drop to the correct priority (if necessary) before calling into the
        new pthread's entry point.

    * File System/Block Drivers/MTD Drivers:

      - FAT performance improvement. In large files, seeking to a
        position from the beginning of the file can be very time consuming.
        ftell does lssek(fd, 0, SET_CURR).  In that case, that is wasted
        time since we are going to seek to the same position.  This fix
        short-circuits fat_seek() in all cases where we attempt to seek to
        current position.  Suggested by Nate Weibley.
      - MTD: Fixed cloned typos in several FLASH drivers.  From Aleksandr
        Vyhovanec.
      - mount: Corrects a bad assertion noted by Pierre-noel Bouteville.
        Also fixes a reference counting problem in an error condition:
        When the mountpoint inode is found but is not an appropriate
        mountpoint, the reference count on the inode was not being
        decremented.

    * Common Drivers:

      - Various serial drivers: Fix FIONWRITE and add FIONSPACE.  All
        implementations of FIONWRITE were wrong.  FIONWRITE should return
        the number of bytes waiting in the outgoing send queue, not the free
        space.  Rather, FIONSPACE should return the free space in the send
        queue.
      - Add missing prototype for btn_lower_initialize().
      - Make DAC sample structure packed.  From Marc Rechté.

    * Networking:

      - TCP:  tcp_ipvX_bind() not actually using the port selected with
        port==0.  Also removes duplicate call to pkt_input().  Issues noted
        by Pascal Speck.
      - drivers/net: NET_TUN=y => NET_MULTIBUFFER=y.  From Vladimir
        Komendantskiy.
      - slip driver: Fix calculations using MSEC_PER_TICK.  If
        USEC_PER_TICK is less than 1000, then MSEC_PER_TICK will be
        zero.  It will be inaccurate in any case.

    * Atmel SAM3/4 Drivers:

      - SAM3/4 GPIO: Enable peripheral clock for GPIO port when GPIO is
        configured as input. The value of a GPIO input is only sampled when
        the peripheral clock for the port controller the GPIO resides in is
        enabled.  Therefore we need to enable the clock even when polling a
        GPIO.  From Wolfgang Reissnegger.
      - All SAM Ethernet Drivers: Add support so that the drivers can be
        built with CONFIG_NET_MULTIBUFFER=y.
      - SAM3/4: Fix GPIO pull-up/down code. Enabling the pull-down resistor
        while the pull-up resistor is still enabled is not possible. In this
        case, the write of PIO_PPDER for the relevant I/O line is discarded.
        Likewise, enabling the pull-up resistor while the pull-down resistor
        is still enabled is not possible. In this case, the write of
        PIO_PUER for the relevant I/O line is discarded.  From Wolfgang
        Reißnegger.

    * Atmel SAMV7 Drivers:

      - All SAM Ethernet Drivers: Add support so that the drivers can be
        built with CONFIG_NET_MULTIBUFFER=y.
      - SAM GPIO: Apply Wolfgang's change for SAM3/4 to SAMA5 and SAMV7.

    * Atmel SAMA5:

      - Add missing oneshot max_delay method.
      - All SAM Ethernet Drivers: Add support so that the drivers can be
        built with CONFIG_NET_MULTIBUFFER=y.
      - SAM GPIO: Apply Wolfgang's change for SAM3/4 to SAMA5 and SAMV7.

    * NXP Freescale LPC43xx Drivers:

      - LPC43xx serial: Fix typos in LPC43 serial driver.  Found by Vytautas
        Lukenskas.
      - LPC43xx Serial: There are some small problems in LPC43xx RS485 mode
        configuration. In particular: (1) UART0,2,3 do not have DTR pins
        (different from UART1), so, Kconfig needs to be adjusted. (2)
        lpc43_uart.c in RS485 mode only configures DIR pin, but doesn't
        enable pin output for UART0,2,3. (3) should be option to reverse DIR
        control pin output polarity. (4) lpc43xx/chip/lpc43_uart.h doesn't
        have USART3 definitions.  NOTE: I didn't modified and didn't tested
        USART1, as it has different hardware.  From Vytautas Lukenskas.
        From Vytautas Lukenskas.

    * SiLabs EFM32 Drivers:

      - EFM32 SPI drivers adopted incompatible conventions (See STM32 for
        details of the issue).

    * STMicro STM32 Drivers:

      - STM32, STM32 L4, and EFM32 SPI drivers adopted incompatible
        conventions somewhere along the line.  They set the number of bits
        to negative when calling SPI_SETBITS which had the magical side-
        effect of setting LSB first order of bit transmission.  This is not
        only a hokey way to pass control information but is supported by no
        other SPI drivers.  This change three things:  (1) It adds
        HWFEAT_LSBFIRST as a new H/W feature. (2) It changes the
        implementations of SPI_SETBITS in the STM32 and EFM32 drivers so
        that negated bit numbers are simply errors and it adds the
        SPI_HWFEATURES method that can set the LSB bit order, and
        (3) It changes all calls with negative number of bits from all
        drivers: The number of bits is now always positive and
        SPI_HWFEATURES is called with HWFEAT_LSBFIRST to set the bit order.
      - Add missing SPI2 and SPI3 support for STM32F3F3.  Add STM32F37XX DMA
        channel configuration.  For STM32F37XX, SYSCFG_EXTICR_PORTE defined
        twice.  From Alan Carvalho de Assis.
      - STM32: Make stm32_pwr_enablebkp thread safe.  From Max Neklyudov.
      - Fix bad pllmul values for STM32F1XX connectivity line. STM32F1XX
        connectivity line supports only x4, x5, x6, x7, x8, x9 and x6.5
        values. From Michal Lyszczek.
      - STM32F3 SPI:  Fix the number of bit setting for the F3.  That and
        data packing work differently on the STM32F3 than for other STM32
        parts.
      - STM32 and STM32 L4: Enabling SPI DMA loses other bits in CR2.
      - STM32F3 SPI:  Cannot write always 16-bit value to DR register
        because of how the F3 implements data packing.
      - STM32F411 and STM32F446 map i2c2_sda_4 to different alternate
        function numbers.  From Konstantin Berezenko.
      - STM32 DMA Fix: Change stm32 adc dma callback to send channel
        number instead of index.  From Konstantin Berezenko.
      - STM32 OTGFS device: Fix for lost first word from FIFO

        1) Do not overwrite Reserved Bits in GINTSTS (per ref manual)*
        2) Acknowledge all pending int on entry to ISR that are Only rc_w1*
        3) Do not disable RXFVL*
        4) Loop until RXFVL is cleared*
        5) Only clear the NAK on the endpoint on the OTGFS_GRXSTSD_PKTSTS_SETUPDONE to not loose the first WORD of FIFO all the data  (Bug Fix)

        Changed marked *are just driver clean up and ensure ints are not lost. The bug fix is #5

        Test case open putty and observer the Set/Get LineCoding. Without this fix #5 the Get will not match the Set, and in fact the data might be skewed by 4 bytes, that are lost from the FIFO if the OTGFS_DOEPCTL0_CNAK bit is set in the OTGFS_GRXSTSD_PKTSTS_SETUPRECVD as opposed to the OTGFS_GRXSTSD_PKTSTS_SETUPDONE

        Set Line Coding DATA1: 4B | 00 c2 01 00 00 00 08 | c8 1B
        Get Line Coding DATA1: 4B | .. .. .. .. 00 00 08   c8 .. 00 00 07 | 7a 72

        From David Sidrane.
      - STM32 L4 OTGFS device: Apply stm32 fix to stm32l4.  From Sebastien
        Lorquet.
      - STM32 F7: Remove duplicate call to pkt_input from Ethernet driver.
        Issues noted by Pascal Speck.
      - STM32 L4: Add support for USART3-USART5.  For STM32L4 parts, the
        higher number USART ports supported varies.  Add the HAVE_USARTx
        definitions to the configuration to allow enabling the higher
        numbered USART ports. From Jim Wylder.
      - STM32 USB: Set USB address to avoid a failed assertion.  From
        Pierre-noel Bouteville.
      - STM32 L4 and L7 USB: Pierre's assertion-avoidance change should
        also be applied to STM32 F7 and L4.
      - STM32, L4, and F7:  Remove GPIO_ETH_RMII_TX_CLK. TX_CLK is not
        present in RMII. Mateusz Szafoni.
      - STM32 Ethernet: Correct typo in conditional logic.  From Neil
        Hancock.
      - STM32 L4 USB Device: Fixed L4 USB Driver by avoiding SETUPDONE and
        EPOUT_SETUP.  From David Sidrane.
      - STM32 SPI: stm32_modifycr2 should be available on all platforms if
        DMA is enabled.
      - STM32 DMA2D: fix an error in up_dma2dcreatelayer where an invalid
        pointer was returned when a certain underlying function failed.
        From Jens Gräf.

    * TI Tiva Drivers:

      - Fix two bugs of tiva pwm lower-half driver implementation. From
        Young.
      - Tiva Ethernet:  Needs support for CONFIG_NET_MULTIBUFFER=y.

    * C Library/Header Files:

      - lib_dumpbuffer() now prints a large on-stack buffer first to avoid
        problems when the syslog output is prefixed with time.  From
        Pierre-noel Bouteville.
      - libc/math: This fixes the following libc/math issues: (1) asin[f l]()
        use Newton’s method to converge on a solution. But Newton’s method
        converges very slowly (> 500,000 iterations) for values of x close to
        1.0; and, in the case of asinl(), sometimes fails to converge (loops
        forever). The attached patch uses an trig identity for values of
        x > sqrt(2). The resultant functions converge in no more than 5
        iterations, 6 for asinl().  (2) The NuttX erf[f l]() functions are
        based on Chebyshev fitting to a good guess. The problem there’s a
        bug in the implementation that causes the functions to blow up with
        x near -3.0. This patch fixes that problem. It should be noted that
        this method returns the error function erf(x) with fractional error
        less than 1.2E-07 and that’s fine for the float version erff(), but
        the same method is used for double and long double version which
        will yield only slightly better precision. This patch doesn't
        address the issue of lower precision for erf() and erfl(). (3) a
        faster version of copysignf() for floats is included. From David S.
        Alessio.
      - strtod() was not returning endptr on error conditions.
      - libc/math: floor(), floorf(), and floorl():  Fix logic error.  Was
        not correctly handling negative integral value.
      - isatty() should be prototyped in unstid.h, not termios.h.  From
        Sebastien Lorquet.
      - nxglib: Fix handling of near-horizontal lines of width 1 in
        nxgl_splitline().  Missing handling for degenerate condition caused
        width 1 lines such as (0, 0) - (100, 10) to have gaps in the
        drawing. From Petteri Aimonen.

    * Build/Configuration System:

      - Top-Level Makefiles:  Fix a chicken-and-egg problem. In the menuconfig
        target, the context dependency was executed before kconfig-mconf.  That
        was necessary because the link at apps/platform/board needed to be set
        up before creating the apps/Kconfig file.  Otherwise, the platform
        Kconfig files would not be included.  But this introduces the chicken-
        and-egg problem in some configurations. In particular:  (1) An NX
        graphics configuration is used that requires auto-generation of
        source files using cpp, (2) the configuration is set for Linux, but
        (3) we are running under Cygwin with (4) a Windows native toolchain.
        In this case, POSIX-style symbolic links are set up but the Windows
        native toolchain cannot follow them. The reason we are running
        'make menuconfig' is to change from Linux to Cygwin, but the target
        fails.  During the context phase, NX runs CPP to generate source files
        but that fails because the Windows native toolchain cannot follow
        the links.  Checkmate.  This was fixed by changing all of the make
        menuconfig (and related) targets.  They no longer depend on context
        being run.  Instead, they depend only on the dirlinks target.  The
        dirlinks target only sets up the directory links but does not try
        to run all of the context setup; the compiler is never invoked; no
        code is autogenerated and things work.
      - CXXFLAGS: add -fcheck-new whenever -fno-exceptions is used. From
        Beat Küng.

    * Tools

      - tools/refresh.sh: Recent complexities added to apps/ means that
        configuration needs the correct Make.defs file in place in order to
        configure properly.
      - tools/kconfig2html.c: Update to handle absolute paths when sourcing
        Kconfig files.
      - tools/mkfsdata.pl was still generating the old-style apps/include
        inclusion paths.

    * Application Build/Configuration System:

      - Add DIRLINK and DIRUNLINK tool definitions to apps/Make.defs.

    * apps/nshlib:

      - Fix FIFO_SIZE vs PIPE_SIZE.
      - Fix hex representation of IP address in Kconfig.  Noted by Michal
        Lyszczek.
      - nsh_syscmds.c: missing semicolon.  From Mateusz Szafoni.
      - In system command, don't try to flush output streams if stdio
        buffered I/O is not supported.

    * apps/canutils:

      - libuavcan: Under certain circumstances, DELIM is not be defined in
        Makefile.
      - Add definition for APPNAME in apps/canutils/canlib.  From Sebastien
        Lorquet.

    * apps/gpsutils:

      - Fix an error minmea.  From Aleksandr Vyhovanec.

    * apps/examples:

      - apps/examples/oneshot:  If the requested delay is > max_delay, then
        break the delay up into several pieces.