NEWS - Noteworthy changes * Major changes in Chopstx 1.14 Released 2019-03-02 ** Enhancement of driver: USART for STM32 Now, it supports smartcard communication. * Major changes in Chopstx 1.13 Released 2018-12-19 ** API fix (redefinition): chopstx_poll In old implementations, when chopstx_poll returns by non-timeout event, *USEC_P is not updated. Now, it is updated. * Major changes in Chopstx 1.12 Released 2018-11-12 ** Enhance API of eventflag New function eventflag_set_mask is added, so that we can only handle specified events. See Gnuk 1.2.12 for an example (while USB Tx is busy, the USB thread only accepts EV_TX_FINISHED event, leaving other events). ** Acknowledge button support for FST-01 and FST-01G While FST-01 and FST-01G don't have any button in the original design, it may be PA2 when user put a hall sensor or a switch. * Major changes in Chopstx 1.11 Released 2018-10-02 ** Support calling chopstx_poll with intr->ready==1 In version <= 1.10, it assumed that all events should be handled after chopstx_poll, before calling chopstx_poll again. With having chopstx_intr_done, it's OK now that chopstx_poll can be called again not examining/handling all poll descriptors, but only parts of them. ** Acknowledge button change In 1.10, the action was able to be "memorized" by the edge detector. Now, the edge detector is disabled by ackbtn_disable, and it is enabled by ackbtn_enable. So, the status is cleared correctly. ** New board support: FST-01SZ It's still under development. Programming-wise, it will be kept same. * Major changes in Chopstx 1.10 Released 2018-09-29 ** Function chopstx_intr_wait is not deprecated, now Once, it was said that it's deprecated, but it's active again to match the new function of chopstx_intr_done. ** API change: chopstx_poll, chopstx_intr_wait, chopstx_intr_done To avoid spurious interrupt, we introduce new function chopstx_intr_done, which should be called after interrupt handling. ** New driver: Acknowledge button for FST-01SZ The use case is waiting user's acknowledge. We use EXTI interrupt feature of STM32. * Major changes in Chopstx 1.9 Released 2018-05-09 ** GD32F103 support GD32F103 is an alternative implementation of STM32F103 by Giga Device, which can run at 96MHz. ** Minor USB driver fix for STM32F103/GD32F103 BTABLE setting should be done at initialization, not at USB RESET. ** Minor SYS driver fix for GD32F103 flash_protect should check FLASH_CR_OPTWRE. ** Minor ADC driver change for GD32F103 ADC on GD32F103 is another implementation and its behavior is somewhat different. It requires waits after enabling. So, we use continuous sampling, instead of start and stop for each sample. Still, we observe enough noise (> 4.7 bit/byte) for each ADC sampling. * Major changes in Chopstx 1.8 Released 2018-01-19 ** Minor driver API fix In version 1.6, part of mcu/stm32f103.h was moved into mcu/cortex-m.h and mcu/stm32.h. Now, mcu/stm32f103.h automatically includes mcu/cortex-m.h and mcu/stm32.h, so that it doesn't break existing applications. * Major changes in Chopstx 1.7 Released 2017-12-19 ** Fix: timer wakeup Timer expiration had a bug. When it is waken up, the wake up doesn't handle as a timer expiration when there are multiple threads on same timing of expire. It confuses as if it were forced wakeup. ** New driver: USART for STM32 USART driver for STM32 is added. * Major changes in Chopstx 1.6 Released 2017-11-24 ** Fix cancellation In Chopstx 1.4 and 1.5, cancellation doesn't work for real MCU. This is due to the change of chx_sched interface, introduced for GNU/Linux emulation. This bug is fixed. ** New feature: sleep mode New function chopstx_conf_idle is added to support sleep. Note that use of sleep by this feature requires careful preparation. For example, enabling sleep, a board with no RESET pin cannot be debugged by JTAG/SWD. Setting of DBGMCU_CR (0xE0042004) is required beforehand (hardware default is zero). ** API change: chopstx_poll This is a kind of clarification. The third argument is now an array of constant pointers. We don't touch the array itself, just use it. This allows having the array in read-only memory and can contribute less use of RAM. ** USB API changes INTR_REQ_USB is now defined by usb_lld.h. Enumeration type of DEVICE_STATE now has USB_DEVICE_STATE_ prefix. ** USB driver change USB suspend and wakeup events are supported for STM32F103. * Major changes in Chopstx 1.5 Released 2017-10-10 ** Stack size definition by stack-def.h Stack size of each thread was used to be defined in ldscript. While emulation on GNU/Linux doesn't use ldscript, it is better to put those definitions in independent header file. Please see example-cdc/stack-def.h and example-cdc/sample.ld. ** More support for emulation on GNU/Linux We have SYS driver for emulation on GNU/Linux. It has flash ROM emulation. * Major changes in Chopstx 1.4 Released 2017-08-11 ** New port: Emulation on GNU/Linux Now, user can run Chopstx application on GNU/Linux. Its USB driver is by USBIP. Its ADC driver is dummy with random(3). * Major changes in Chopstx 1.3 Released 2017-02-02 ** New board support: Blue Pill It is contributed by Paul Fertser. * Major changes in Chopstx 1.2 Released 2016-10-13 ** Fix: chopstx_join chopstx_join is now cancellation point. * Major changes in Chopstx 1.1 Released 2016-07-01 ** API change: chopstx_poll In version 1.0, chopstx_poll has variable arguments. It found that it's challenging for ffi or lower level C implementation, if C compiler is new for the specific MCU target. Another example is that a program touches FPU registers for varargs, even if no argument is float. So, we decided to avoid use of varargs in Chopstx. ** API change: chopstx_setpriority In version 1.0, chopstx_setpriority does not return value. It is changed to return old value of the priority. * Major changes in Chopstx 1.0 Released 2016-06-16 ** New USB API Now, USB driver is included in Chopstx. So, it should be good one. It used to be the code which was derived from interrupt driven API with callbacks. It's changed to event driven API, so that a user can do as wish, beyond the restriction of callbacks. ** New board support: FST-01G FST-01G is a new revision of original FST-01 with fixed pull-up of D+ line. * Major changes in Chopstx 0.12 Released 2016-05-31 ** Provide drivers of SYS, USB and ADC Those were only offered as examples, but now, Chopstx provides drivers of SYS, USB, and ADC. Please note that the ADC driver is not for general use (it's specific to NeuG to get noise). To use them, enable variables in Makefile, like following. ------------ CHIP=stm32f103 USE_ADC = yes USE_USB = yes USE_SYS = yes DEFS = -DUSE_SYS3 ------------ ** Removal of chopstx_usec_wait_var chopstx_wakeup_usec_wait This API was used when we need to wait something with timeout. Now, we have better API with chopstx_poll. Please use chopstx_poll and chopstx_cond_signal. * Major changes in Chopstx 0.11 Released 2016-05-19 ** New feature: polling New function chopstx_poll is added to watch multiple condition variables, threads' exit, or IRQ, simultaneously with timeout. ** Change API of eventflag The initialization function eventflag_init only has an argument of EV. An eventflag can be waited with timeout or can be waited with no timeout, as caller like. It is not determined at initialization time now. Besides, the eventflag can be waited by any threads. Functions to poll eventflag together with other events (cond, join, and IRQ) are provided. ** Removal of the function chopstx_release_irq IRQ is enabled only when a thread is blocked in polling. When it (the thread in polling) is canceled, IRQ is disabled. ** Removal of the function chopstx_main_init It is removed because it's too special. Please use chopstx_setpriority instead. ** New function: chopstx_setpriority This function is not recommended in general. It is only added to support the usage when main thread wants to change the schedule priority after creating other threads. ** Function chopstx_intr_wait is deprecated Use of chopstx_poll is recommended. ** FS-BB48: Kinetis L MCU Support for FS-BB48 board with Kinetis L MCU is added. ** No HardFault at context switch on Cortex-M0 By its design, Chopstx does context switch holding the scheduler lock. This is implemented with the feature of BASEPRI on Cortex-M3. Because Cortex-M0 doesn't have support of BASEPRI, the context switch (before version 0.11) always caused HardFault exception. Since Cortex-M0 doesn't have complex exception mechism of ICI/IT (which is supported on Cortex-M3), it is actually possible to implement the context switch in user mode. This is done. ** New sys.c (3.0) Don't touch NVIC in usb_lld_sys_init. * Major changes in Chopstx 0.10 Released 2015-09-15 ** Thread cancellation bug fix Thread cancellation didn't work well with 0.09 because of initial configuration mistake. It's fixed. ** Interrupt handler bug fix Interrupt handler wasn't unregistered on exit well. It's fixed. * Major changes in Chopstx 0.09 Released 2015-09-10 ** New board support: Nitrokey-Start It is contributed by Mateusz Zalega. ** Thread cancellation Add new API: chopstx_setcancelstate. * Major changes in Chopstx 0.08 Released 2015-07-31 ** New board support: ST Nucleo F103 It is contributed by Kenji Rikitake. ** New board support: ST Dongle It is contributed by Kenji Rikitake. It's the ST-Link/V2-1 part of ST Nucleo F103. * Major changes in Chopstx 0.07 Released 2015-07-15 ** New Board macro definitions Each board-*.h should have BOARD_ID and BOARD_NAME now. FLASH_PAGE_SIZE and NEUG_ADC_SETTING2_* are deprecated. ** New sys.c (2.1) Flash memory size is probed at runtime now. System service flash pages now include sys_board_id and sys_board_name. * Major changes in Chopstx 0.06 Released 2015-07-08 ** New file: clk_gpio_init.c To avoid duplication of code, clock and GPIO initialization code is now in this file. ** New board support: STM32 Primer2 It is contributed by Kaz Kojima. ** New board support: CQ STARM The old board which was "published" by CQ Publishing in 2008 is added. * Major changes in Chopstx 0.05 Released 2015-04-20, by NIIBE Yutaka ** New function: chopstx_main_init chopstx_main_init is the function to change the schedule priority of main thread. This is useful to enter main loop after initialization of other threads. ** The use of CHX_PRIO_MAIN CHX_PRIO_MAIN is deprecated. Instead, please use the function chopstx_main_init. ** Cortex-M0 support Cortex-M0 support has been added. ** New board support: Maple mini It is contributed by Aidan Thornton. ** New board support: FSM-55 and STM32F0 Discovery Those boards with STM32F0 (Cortex-M0) are now supported. * Major changes in Chopstx 0.04 Released 2014-12-10, by NIIBE Yutaka ** new board.h macros and sys.c in example In board.h, RCC_APB2ENR_IOP_EN was renamed to RCC_ENR_IOP_EN and RCC_APB2RSTR_IOP_RST was renamed to RCC_RSTR_IOP_RST. Example sys.c was changed accordingly. ** Bug fix of chopstx_wakeup_usec_wait chopstx_usec_wait_var/chopstx_usec_wait won't be woken up by chopstx_wakeup_usec_wait. This is now fixed in 0.04. ** Board support STBee and STBee Mini The board STBee and STBee Mini are now supported. * Major changes in Chopstx 0.03 Released 2013-11-08, by NIIBE Yutaka ** Bug fix of preemption In the implementation of preemption, there was a bug which might cause not to schedule proper thread. This is because the routine preepmt itself might be interrupted. This is now fixed in 0.03. * Major changes in Chopstx 0.02 Released 2013-11-08, by NIIBE Yutaka ** Bug fix of priority There was a severe bug about the configuraion of priority setting of exceptions. As we don't use any inter-lock between interrupts hander and timer expiration handler, these priorities should be equal. If not, timer expiration handler might interrupt the execution of interrupts handers. * Major changes in Chopstx 0.01 Released 2013-11-03, by NIIBE Yutaka ** Interrupt handling change There was a bug in 0.00, which caused spurious interrupts. Every interrupt event caused two events. Specifically, after valid interrupt event (for the caller of chopstx_intr_wait), another spurious event was always occurred. This was fixed. In the design of Chopstx, interrupt handling is done by a thread. Lower level interrupt handler just accepts interrupt, disabling the interrupt, and switchs the control to the thread. It is the thread to check the cause of interrupt, to process it, and to clear the cause. Next call to chopstx_intr_wait will enable the interrupt again. The bug was related to pending interrupt flag. Pending interrupt flag for a specific interrupt is set, on return from handler mode if the cause is still active. With traditional interrupt handling, lower level interrupt handler processes it and clears the cause. Thus, pending interrupt flag is not set on return. In Chopstx, pending interrupt flag was always set, because the control goes from lower level interrupt handler (in handler mode) to a interrupt handling thread which processes the interrupt. In 0.01, new internal routine chx_clr_intr is introduced, and pending interrupt flag is cleared within chopstx_intr_wait after waked up. For detail of interrupt operation, see the section B.3.4, Nested Vectored Interrupt Controller (NVIC), in the ARM v7-M Architecture Reference Manual. The subsection, B3.4.1, Theory of operation, explains how it works. ** gpio_init change Now, gpi_init support AFIO mapping and another GPIO (GPIO_OTHER) settings. # Local Variables: # mode: outline # End: