2 Star 2 Fork 3

bigmagic/ChibiOS-RPi

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
GPL-3.0
*****************************************************************************
*** Files Organization                                                    ***
*****************************************************************************

--{root}                - ChibiOS/RT directory.
  +--readme.txt         - This file.
  +--documentation.html - Shortcut to the web documentation page.
  +--todo.txt           - Current plan (development/unstable versions only).
  +--license.txt        - GPL license text.
  +--exception.txt      - GPL exception text (stable releases only).
  +--boards/            - Board support files.
  +--demos/             - Demo projects.
  +--docs/              - Documentation.
  |  +--html/           - Local HTML documentation (after rebuild).
  |  +--reports/        - Test reports.
  |  +--src/            - Documentation source files (required for rebuild).
  |  +--rsc/            - Documentation resource files (required for rebuild).
  |  +--Doxyfile        - Doxygen project file (required for rebuild).
  |  +--index.html      - Local documentation access (after rebuild).
  +--ext/               - External libraries, not part of ChibiOS/RT.
  +--os/                - ChibiOS/RT files.
  |  +--hal/            - Hardware Abstraction Layer.
  |  |  +--include/     - HAL high level headers.
  |  |  +--src/         - HAL high level source.
  |  |  +--platforms/   - HAL low level drivers implementations.
  |  |  |  +--AT91SAM7/ - Drivers for AT91SAM7 platform.
  |  |  |  +--AVR/      - Drivers for AVR platform.
  |  |  |  +--LPC11Uxx/ - Drivers for LPC11Uxx platform.
  |  |  |  +--LPC11xx/  - Drivers for LPC11xx platform.
  |  |  |  +--LPC13xx/  - Drivers for LPC13xx platform.
  |  |  |  +--LPC214x/  - Drivers for LPC214x platform.
  |  |  |  +--MSP430/   - Drivers for MSP430 platform.
  |  |  |  +--SPC56x/   - Drivers for SPC56x/MPC563xx platforms.
  |  |  |  +--STM32/    - Drivers for STM32 platform (common).
  |  |  |  +--STM32F0xx/- Drivers for STM32F0xx platform.
  |  |  |  +--STM32F1xx/- Drivers for STM32F1xx platform.
  |  |  |  +--STM32F4xx/- Drivers for STM32F4xx/STM32F2xx platforms.
  |  |  |  +--STM32L1xx/- Drivers for STM32L1xx platform.
  |  |  |  +--STM8L/    - Drivers for STM8L platform.
  |  |  |  +--STM8S/    - Drivers for STM8S platform.
  |  |  |  +--Posix/    - Drivers for x86 Linux/OSX simulator platform.
  |  |  |  +--Win32/    - Drivers for x86 Win32 simulator platform.
  |  |  +--templates/   - Driver template files.
  |  |     +--meta/     - Driver meta templates.
  |  +--ports/          - Port files for the various architectures.
  |  |  +--GCC/         - Ports for the GCC compiler.
  |  |  |  +--ARM/      - Port files for ARM7 and ARM9 architectures.
  |  |  |  +--ARMCMx/   - Port files for ARMCMx architectures (ARMv6/7-M).
  |  |  |  +--PPC/      - Port files for PowerPC architecture.
  |  |  |  +--AVR/      - Port files for AVR architecture.
  |  |  |  +--MSP430/   - Port files for MSP430 architecture.
  |  |  |  +--SIMIA32/  - Port files for SIMIA32 simulator architecture.
  |  |  +--IAR/         - Ports for the IAR compiler.
  |  |  |  +--ARMCMx/   - Port files for ARMCMx architectures (ARMv6/7-M).
  |  |  |  +--STM8/     - Port files for STM8 architecture.
  |  |  +--RVCT/        - Ports for the Keil RVCT compiler.
  |  |  |  +--ARMCMx/   - Port files for ARMCMx architectures (ARMv6/7-M).
  |  |  +--cosmic/      - Ports for the Cosmic compiler.
  |  |  |  +--STM8/     - Port files for STM8 architecture.
  |  |  +--RC/          - Ports for the Raisonance compiler.
  |  |     +--STM8/     - Port files for STM8 architecture.
  |  +--kernel/         - Kernel portable files.
  |  |  +--include/     - Kernel headers.
  |  |  +--src/         - Kernel source.
  |  |  +--templates/   - Kernel port template files.
  |  +--various/        - Various portable support files.
  +--test/              - Kernel test suite source code.
  |  +--coverage/       - Code coverage project.
  +--testhal/           - HAL integration test demos.
  |  +--LPC11xx/        - LPC11xx HAL demos.
  |  +--LPC13xx/        - LPC11xx HAL demos.
  |  +--STM32F1xx/      - STM32F1xx HAL demos.
  |  +--STM32F4xx/      - STM32F4xx HAL demos (valid for STM32F2xx too).
  |  +--STM32L1xx/      - STM32L1xx HAL demos.
  |  +--STM8S/          - STM8S HAL demos.
  +--tools              - Various tools.
     +--eclipse         - Eclipse enhancements.
     +--gencfg          - Configurations generator tool.

*****************************************************************************
*** Releases                                                              ***
*****************************************************************************

*** 2.5.1 ***
- FIX: Fixed various typos and wrong limits in the STM32F4/F2 HAL driver
  (bug 3578944)(backported to 2.4.3).
- FIX: Fixed ARM CMx crt0.c fails at low optimization levels (bug 3578927)
  (backported to 2.4.3).
- FIX: Fixed compilation issue in chregistry.c (bug 3576776).
- FIX: Fixed compilation issue in syscalls.c (bug 3576771)(backported
  to 2.4.3).
- FIX: Fixed Typos in STM32F0xx EXT driver (bug 3576193).
- FIX: Fixed STM32F10X_CL: Wrong CAN1 interrupt number definitions (bug
  3575766).
- FIX: Fixed superfluous pack #defines cause nasty warning (bug 3575662)
  (backported to 2.4.3).
- FIX: Fixed mac.c won't compile due to misplaced declarations (bug 3575657)
  (backported to 2.4.3).
- FIX: Fixed STM32F4 ADC prescaler incorrectly initialized (bug 3575297)
  (backported to 2.4.3).
- FIX: Fixed RCC_APB2ENR_IOPEEN undeclared on STM32F10X_LD_VL devices (bug
  3575098)(backported to 2.4.3).
- FIX: Fixed misplaced declarations in lwip_bindings sys_arch.c (bug 3571053)
  (backported to 2.4.3).
- FIX: Fixed double definition of sd1fel and sd2fel breaks Posix simulator
  (bug 3570532).
- FIX: Fixed Ethernet PHY power down scheme prevents using LAN8720A (bug
  3570335).
- FIX: Fixed FatFS won't compile with _FS_REENTRANT enabled (bug 3570135)
  (backported to 2.4.3).
- FIX: Fixed mmc_spi.c won't compile due to misplaced declaration (bug
  3570035)(backported to 2.4.3).
- FIX: Fixed problem in STM32F1xx USB driver after revision 4598 (bug 3569374).
- FIX: Fixed GPIO glitch during PAL initialization (bug 3569347)(backported
  to 2.4.3).
- FIX: Fixed FatFS timestamp incorrect (bug 3568626).
- FIX: Fixed Data available event not generated in serial_usb driver (bug
  3567992).
- FIX: Fixed STM32F1x rtc_lld_init glitches rtc on hard reset (bug 3567597)
  (backported to 2.4.3).
- FIX: Fixed STM8L, cosmic compiler: c_lreg not saved (bug 3566342)(backported
  to 2.2.10 and 2.4.3).
- NEW: Unified the STM32F4xx and STM32F2xx platform code. The STM32F2xx now is
  only supported as an STM32F4xx variant and not tested separately.
- NEW: Updated STM32F1, F2, F4, L1 ADC drivers to allow HW triggering.
- NEW: Added a new option STM32_ETH1_CHANGE_PHY_STATE to the STM32 MAC driver,
  this change is connected to bug 3570335.
- NEW: Modified the CAN drivers to use the new event flags mechanism, the
  previous flags handling has been removed.
- NEW: Modified serial and serial_usb drivers to use the new event flags
  mechanism, the previous flags handling in BaseAsynchronousChannel has
  been removed.
- NEW: Improved the kernel events subsystem, now event sources can associate
  source-specific flags to the listener, the flags can then be retrieved
  using the new APIs chEvtGetAndClearFlags() and chEvtGetAndClearFlagsI().
  Some old APIs have been renamed to increase consistency of the module.
- NEW: Added VLE support to the Power Architecture GCC port.
- NEW: Reorganized the Power Architecture GCC port along the lines of the
  ARMCMx port, now it can support multiple core types.
- NEW: Updated the Power Architecture rules.mk file to put object and listing
  files into a ./build directory like ARM ports already do.

*** 2.5.0 ***
- FIX: Fixed anomaly in USB enumeration (bug 3565325)(backported to 2.4.3).
- FIX: Fixed problem with lwIP statistics (bug 3564134)(backported to 2.4.3).
- FIX: Fixed packed structures macros not functional in IAR and RVCT port
  (bug 3561279)(backported to 2.4.3 and 2.2.10).
- FIX: Fixed Problem in FatFs demos related to LFN (bug 3560980)(backported
  to 2.4.3 and 2.2.10).
- FIX: Fixed problem in STM32 DMA1 stream1 IRQ handler (bug 3538468)
  (backported to 2.4.2).
- FIX: Fixed TIM8 not working in STM32 GPT driver (bug 3536523)(
- FIX: Fixed wrong priority assigned to TIM8 in STM32 ICU driver (bug 3536950)
  (backported to 2.4.2).
- FIX: Fixed TIM8 not working in STM32 GPT driver (bug 3536523)(backported
  to 2.4.2).
- FIX: Fixed timer overflow not working in STM32 ICU driver for TIM1/TIM8 (bug
  3536522)(backported to 2.4.2).
- FIX: Fixed wrong DMA channels on USART2 in STM32F10X_MD_VL devices (bug
  3536070)(backported to 2.4.2).
- FIX: Fixed issue with DMA channel init in STM32 ADC and SPI drivers (bug
  3535938)(backported to 2.2.10 and 2.4.2).
- FIX: Fixed issue debugging mmc_spi (bug 3535887)(trunk only).
- FIX: Fixed unreliable PHY initialization (bug 3534819)(backported to 2.4.2).
- FIX: Fixed wrong ADC callback buffer pointer in ADC driver (bug 3534767)
  (backported to 2.2.10 and 2.4.2).
- FIX: Fixed STM32F2 RTC subseconds (bug 3533414)(trunk only).
- FIX: Fixed problem with arm-v6m and state checker (bug 3532591)(backported
  to 2.4.2).
- FIX: Fixed wrong MAC divider setting in STM32 MAC driver (bug 3531290)
  (backported to 2.4.2).
- FIX: Fixed wrong MCO1 divider in STM32F2/F4 HAL (bug 3531289)(backported
  to 2.4.2).
- FIX: Fixed missing "break" in AVR PAL driver (bug 3530924)(backported
  to 2.4.2).
- FIX: Fixed timeout related race condition in STM32 I2C driver (bug 3530043)
  (backported to 2.4.2).
- FIX: Fixed wrong macro check in STM32 MAC driver (bug 3527179)(backported
  to 2.4.2).
- FIX: Fixed error in STM32L-Discovery board.h file (bug 3526918)(backported
  to 2.4.2).
- FIX: Fixed inconsistent LPCxxx Internal RC oscillator names (bug 3524138)
  (backported to 2.2.10 and 2.4.1).
- FIX: Fixed wrong frequency limit checks vs VDD in STM32F2xx HAL (bug 3524094)
  (backported to 2.4.1).
- FIX: Fixed STM32 I2C1 wrong alternate TX DMA setting (bug 3524088)
  (backported to 2.4.1).
- FIX: Fixed system state check problem related to FatFS (bug 3523769).
- FIX: Fixed three testhal builds fail (bug 3523322)(backported to 2.4.1).
- FIX: Fixed MAC driver functions with invalid name (bug 3522808)(backported
  to 2.2.10 and 2.4.1).
- FIX: Fixed code coverage crashes with Linux/gcc-4.4.5 (bug 3522301)
  (backported to 2.4.1).
- FIX: Fixed macro dmaWaitCompletion() fails to compile in STM32 HAL (bug
  3519202)(backported to 2.4.1).
- FIX: Fixed ARM addresses generated in vectors table (bug 3519037)(backported
  to 2.2.10 and 2.4.1).
- FIX: Fixed missing serial driver functionality for SAM7S64, SAM7S128 and
  SAM7S512 (bug 3517648)(backported to 2.2.10 and 2.4.1).
- FIX: Fixed a few more spelling fixes (bug 3515531)(backported to 2.4.1).
- FIX: Fixed spurious ) char in STM32 serial_lld.h (bug 3514138)(backported
  to 2.2.10 and 2.4.1).
- FIX: Fixed problem with FPU initialization in GCC Cortex-M4 port (bug
  3513897)(backported to 2.4.1).
- FIX: Spelling fixes (bug 3510812)(backported to 2.4.1).
- FIX: Fixed STM32 ICUD8 not functional because wrong initialization (bug
  3508758)(backported to 2.4.1).
- FIX: Fixed chMBFetchI does not decrement mb_fullsem (bug 3504450)(backported
  to 2.2.9 and 2.4.1).
- FIX: Fixed STM32 PLLI2S initialization error (bug 3503490)(backported
  to 2.4.1).
- FIX: Fixed USART3 not working on STM32F2/F4 UART driver (bug 3496981)
  (backported to 2.4.1).
- FIX: Fixed stack misalignment on Posix-MacOSX (bug 3495487)(backported
  to 2.4.1).
- FIX: Fixed STM8S HSI clock initialization error (bug 3489727)(backported to
  2.2.9 and 2.4.1).
- FIX: Fixed MMC over SPI driver performs an unnecessary SPI read (bug
  3486930)(backported to 2.2.9 and 2.4.1).
- FIX: Fixed Realtime counter initialization in STM32 HALs (bug 3485500)
  (backported to 2.4.1).
- FIX: Fixed PPC port broken when CH_DBG_SYSTEM_STATE_CHECK is activated
  (bug 3485667)(backported to 2.4.1).
- FIX: Fixed missing PLL3 check in STM32F107 HAL (bug 3485278)(backported
  to 2.4.1).
- FIX: Fixed ADC maximum frequency limit in STM32F2/F4 ADC drivers (bug
  3484947)(backported to 2.4.1).
- FIX: Fixed various minor documentation errors (bug 3484942)(backported
  to 2.4.1).
- NEW: Added Eclipse project files to most demos. The project are setup to
  have paths relative to a variable named CHIBIOS that must point to the
  ChibiOS/RT installation path. The variable must be defined under
  Window->Preferences->General->Workspace->Linked_Resources and must contain
  a path without the trailing slash character.
- NEW: Added memory signature record to the registry in order to simplify
  the implementation of ad-hoc debuggers.
- NEW: Small andjustment in chcore.h files under ./os/ports/GCC required by a
  difference in GCC 4.7.x.
- NEW: Added another STM32F4-Discovery demo using the on-board MEMS, SPI
  and PWM. Removed MEMS handling from the old demo because code size limits
  on non-free compilers.
- NEW: Added configuration wizard plugin under ./tools/eclipse/plugins. This
  first version is able to configure the board files for STM32F0xx, STM32F4xx
  and STM32L1xx.
- NEW: Added USART6 support to the STM32 UARTv1 driver, contributed by Erik
  van der Zalm.
- NEW: Added demo for Arduino Mega, contributed by Fabio Utzig.
- NEW: Added support for ATmega1280, contributed by Fabio Utzig.
- NEW: Added I2C driver for AVR, contributed by Fabio Utzig.
- NEW: Added FatFs demo for the Olimex STM32-P107 board.
- NEW: Added support for the Olimex STM32-E407 board. Added an integrated
  demo including USB-CDC, lwIP with web server, FatFs and shell, all running
  together.
- NEW: Added an experimental and unsupported STM8 port for the IAR compiler,
  contributed by "king2".
- NEW: Updated STM8 header files to latest versions from ST.
- NEW: Reorganized the STM32 EXT driver to have a sub-platform specific
  part containing all the ISR related code, this has been necessary because
  the significant differences among the various sub-families.
- NEW: Validated CAN driver on STM32F2/F4 (backported to 2.4.2).
- NEW: USB implementation for STM32F105/F107/2xx/F4xx devices.
- NEW: Improved SerialUSB driver using the new queued mode, much smaller
  than the previous driver.
- NEW: Improved USB driver model supporting also queues for endpoint I/O,
  packet mode removed.
- NEW: Added an application-defined field to I/O queues (a void pointer).
- NEW: Added board files for Maple Mini STM32F103, contributed by Wagner
  Sartori Junior.
- NEW: Added SSP1 capability to the LPC13xx SPI driver.
- NEW: Updated vendor headers for LPC11xx and LPC13xx, the new headers
  support several new devices.
- NEW: Demo for STM32F0-Discovery board.
- NEW: Initial support for STM32F0xx devices, added a specific ADC driver.
  Validated EXT, GPT, ICU, PAL, PWM, Serial, SPI, UART drivers.
- NEW: Added a common ancestor class to the SDC and MMC_SPI drivers. This
  allows to share code and definitions.
- NEW: Modified the SDC driver to implement the new block devices abstract
  interface.
- NEW: Added two new functions to the MMC_SPI driver: mmcSync() and
  mmcGetInfo(). Also implemented the new block devices abstract
  interface. Moved the configuration parameters from mmcObjectInit() to
  the configuration structure saving some RAM space. Updated demos.
- NEW: Added an abstract interface for block devices in the HAL. This
  abstraction layer is meant to unify the access protocol to the SDC and
  MMC_SPI (and potentially others) device drivers.
- NEW: Added an abstract interface for serial devices in the HAL. This
  interface is meant to replace the equivalent class already present in the
  kernel. access macros are similar except for the prefix, "chn" instead
  of "chIO".
- NEW: Updated the MSP port to work with the latest MSPGCC compiler (4.6.3
  LTS 20120406 unpatched), now the old MSPGCC 3.2.3 is no more supported
  (backported to 2.4.1).
- NEW: EXT driver improved, now it is possible to reprogram channels at
  runtime without necessarily specifying a new configuration.
  TODO: Update AT91SAM7 EXT driver.
- NEW: Integrated FatFS 0.9, now the FatFS integration files are centralized
  under ./os/various/fatfs_bindings and shared among all demos. The FatFS
  file ffconf.h is now application-specific like all the other configuration
  files.
- NEW: Added an new option CORTEX_PRIGROUP_INIT to the Cortex-Mx ports in
  order to make priority organization configurable, the default is to
  assign all the available priority bits to preemption priority with no
  sub-priorities.
- NEW: Added a new function chPoolLoadArray() to the Memory Pools subsystem,
  it allows to load an entire array element's into a pool with a single
  operation.
- NEW: Addes support for .S patch in the GCC ARM ports, by Ayman El-Khashab.
- NEW: Added a switch to the STM32F4 Makefile files in order to enable or
  disable the FPU support in a single place.
- NEW: Added float support (optional) to chprintf(), by Fabio Utzig.
- NEW: Added overflow handling in the ICU driver (contributed by Xo).
- NEW: Updated debug plugin 1.0.8 (backported to 2.4.0).
- NEW: Added more accurate UBRR calculation in AVR serial driver (backported
  to 2.4.0).
- NEW: Revision of the round-robin scheduling, now threads do not lose their
  time slice when preempted. Each thread has its own time slices counter.
  TODO: Seek optimizations.
- NEW: Modified the Virtual Timers management, now the callback is invoked
  not in lock mode. This change reduces the interrupt jitter caused by
  multiple timers used at same time.
- NEW: Added board files and demo for Olimex LPC-P1343 (contributed by
  Johnny Halfmoon).
- NEW: Added handling of input 2 to the STM32 ICU driver (contributed by
  Fabio).
- NEW: STM32 Ethernet driver completed. Added STM32F107 and STM32F407
  lwIP demos (backported to 2.4.1).
- NEW: lwIP related code is not centralized into a single place, no need to
  duplicate the code in each application or demo (backported to 2.4.1).
- CHANGE: Added two new methods to the BaseSequentialStream interface:
  chSequentialStreamPut() and chSequentialStreamGet().
- CHANGE: Removed the chioch.h header from the kernel, now channels interface
  is exported by the HAL. Removed functions chPutWouldBlock() and
  chGetWouldBlock().
- CHANGE: Removed macro chMsgGetS(), chMsgGet() is still available.
- CHANGE: chprintf() now takes a BaseSequentialStream as parameter instead
  of a BaseChannel making it more generic.
- CHANGE: Now the shell requires a BaseSequentialStream instead of a
  BaseChannel for communications making it more generic.
- CHANGE: Kernel memory pools now do not check the alignment of the inserted
  objects, it is responsibility of the application to insert properly
  aligned objects.
- CHANGE: The PORT_INT_REQUIRED_STACK parameter for the Cortex-Mx ports has
  been increased to 32 from 16 because the stack frame sizes are increased
  when compiling with optimizations disabled, which is common during
  debugging. In order to save RAM trim back this value when compiling with
  optimizations enabled (backported to 2.4.1).
- CHANGE: Renamed Ethernet driver in AT91 HAL ETHD1 (backported to 2.4.1).
- CHANGE: Macros icuGetWidthI() and icuGetPeriodI() renamed to icuGetWidth()
  and icuGetPeriod().
- Various documentation fixes and improvements.

*** 2.3.5 ***
- FIX: Fixed RTC compile problem on STM32F103 (bug 3468445).
- FIX: Fixed PWM with TIM1 and TIM8 broken in STM32 HAL (bug 3458947).
- FIX: Fixed SYSCFG clock not started in STM32L1/F4 HALs (bug 3449139).
- FIX: Fixed wrong definitions in STM32L-Discovery board file (bug 3449076).
- OPT: Improved the exception exit code in the GCC Cortex-Mx ports.
- NEW: Added a DMA stress test application for the STM32F4 in order to assess
  robustness of the whole HAL.
- NEW: Added a Time Measurement driver to the HAL, this generic driver uses
  the realtime counters abstracted in the HAL driver.
- NEW: Improved the STM32F1xx HAL driver, it now has the same features and
  configuration options of the newer STM32s.
- NEW: MMC over SPI driver improved to handle high capacity cards, by
  Matthias Blaicher.
- NEW: Added PVD support to the HAL of all STM32s, by Barthess.
- NEW: Added to the HAL driver the handling of an abstract realtime free
  running counter, added the capability to all the STM32 HALs.
- NEW: Modified ARM and ARMCMx build rules to allow parallel build. Now the
  log outputs one dummy compilation command in order to allow paths discovery
  by Eclipse.
- NEW: Added an utility module to access LIS302DL MEMS using a SPI.
- NEW: Updated STM32F2xx support by inheriting the work done on the STM32F4xx,
  the whole thing is untested because lack of hardware.
- NEW: Files nvic.c and nvic.h moved under ./os/ports/common/ARMCMx, removed
  the duplicated instances under the GCC, IAR and Keil ports. Function names
  prefixes changed from "NVIC" to "nvic" because style conventions.
- NEW: Added voltage regulator initialization to the STM32F4xx HAL.
- NEW: Added a linker script that demonstrates how to put stacks and other
  critical structures in the CCM RAM instead normal RAM.
- NEW: Added experimental support for the Cortex-M4 FPU (default when the
  FPU is present but can be disabled).
- NEW: Improved I2C driver model and STM32 implementation by Barthess.
- CHANGE: Removed the option to change the stack alignment in the GCC
  Cortex-Mx ports, now alignment is always 64 bits.
- CHANGE: Modified the function palSetGroupMode() to have an offset parameter
  in order to make it similar to other functions operating on groups.
- CHANGE: Increased main and process default stack sizes from 0x100 to 0x200
  in LPC1114 and LPC1343 linker scripts.

*** 2.3.4 ***
- FIX: Fixed Extra initialization in STM32 SPI driver (bug 3436127)
  (backported to 2.2.8).
- FIX: Fixed DMA priority setting error in STM32 UART driver (bug 3436125)
  (backported to 2.2.8).
- FIX: Fixed DMA priority setting error in STM32 SPI driver (bug 3436124)
  (backported to 2.2.8).
- FIX: Fixed broken support for UART5 in STM32 serial driver (bug 3434094)
  (backported to 2.2.8).
- FIX: Fixed broken TIM8 support in STM32 PWM driver (bug 3418620).
- FIX: Fixed halconf.h file corrupted in some STM32 demos (bug 3418626).
- NEW: Added an unified registers file for STM32: stm32.h. This file includes
  the appropriate vendor file then adds its own additional definitions.
- NEW: Added demo for the ST STM32F4-Discovery kit.
- NEW: STM32F4xx ADC driver implementation.
- NEW: Added initialization of the NVIC VTOR register to all Cortex-Mx (v7M)
  ports. Also added a port option CORTEX_VTOR_INIT to enforce a different
  default value into the register.
- NEW: Removed the warning about the "untested M4 platform", now it is
  tested and officially supported.
- NEW: Reorganized the STM32F1xx hal_lld_xxx.h files in order to distribute
  the capability macros into the appropriate file (previously those were all
  in the common hal_lld.h).
- NEW: Added HAL, Serial, ADC, EXT, GPT, ICU, PWM, SPI and UART support for
  the STM32F4xx sub-family.
  TODO: Add CAN and SDC, the drivers need to be ported and tested.
- NEW: Added handling of USART6 to the STM32 serial driver.
- NEW: Added USE_COPT setting to all makefiles, contributed by Mabl.
- NEW: Added EXT driver implementation for AT91SAM7x, contributed by Florian.
  TODO: Test application missing.
- NEW: Updated USB driver model and STM32 implementation and fixed several
  problems.
  - Changed the API to move buffer copy operations out of critical zones.
  - Added usbConnectBus() and usbDisconnectBus() functions.
  - Fixed problems with incorrect assertions.
- NEW Updated the SERIAL_USB driver to match the new USB API, also fixed
  some problems.
  - Fixed incorrect use of input queues, the change required a change in
    input queues too.
- NEW: Added a macro THD_STATE_NAMES to chthreads.h. This macro is an
  initializer for string arrays containing thread state names.
- NEW: Added memory copy functionality to the STM32 DMA driver.
- NEW: Implemented new makefile system for ARM GCC ports, now objects,
  listings and output files are generated into a "build" directory and not
  together with sources, also implemented a simplified output log mode.
  Now makefiles and load script files are requirements and trigger a
  rebuild if touched.
- NEW: Updated AVR demos to use the new PAL driver.
- NEW: Added Keil build files to the STM32L-Discovery demo.
- CHANGE: Now the callback associated to input queues is invoked before
  reading each character. Previously it was invoked only before going
  to sleep into the THD_STATE_WTQUEUE state.
- CHANGE: Moved the STM32 DMA helper drivers files under the sub-family
  specific directories because documentation issues.

*** 2.3.3 ***
- FIX: Fixed missing UART5 definition in STM32 HAL (bug 3411774)(backported
  to 2.2.8).
- FIX: Fixed uninitialized variable in STM32 PWM and ICU drivers (bug 3413558).
- FIX: Fixed wrong parameter passed to the DMA error hook in STM32 ADC driver,
  the DMA error hook has been removed entirely in the new ADC driver model
  (bug 3413214).
- FIX: The function chThdExit() triggers an error on shell return when the
  system state checker is enabled (bug 3411207)(backported to 2.2.8).
- FIX: Some ARMCMx makefiles refer the file rules.mk in the ARM7 port (bug
  3411180)(backported to 2.2.8).
- FIX: Fixed wrong check on CH_DBG_ENABLE_STACK_CHECK setting (bug 3387671)
  (backported to 2.2.7).
- FIX: Fixed wrong APB1 frequency check (bug 3361039)(backported to 2.2.7).
- FIX: Fixed missing state in shell demos (bug 3351556)(backported to 2.2.7).
- FIX: Fixed race condition in Cortex-Mx ports (bug 3317500)(backported
  to 2.2.6).
- FIX: Fixed wrong macro check in STM32 UART driver (bug 3311999)(backported
  to 2.2.6).
- FIX: Fixed wrong macro definition in ARMv6-M architecture files (bug
  3310084).
- FIX: Fixed race condition in output queues (bug 3303908)(backported
  to 2.2.4).
- FIX: Fixed CH_USE_HEAP and CH_USE_MALLOC_HEAP conflict (bug 3303841)
  (backported to 2.2.4).
- FIX: Fixed timeout problem in the lwIP interface layer (bug 3302420)
  (backported to 2.2.4).
- NEW: Added AVR implementation of the PAL driver contributed by Leszek.
- NEW: STM32L ADC driver implementation.
- NEW: Improved ADC driver model, now it is possible to handle error
  conditions during the conversion process.
- NEW: STM32L1xx sub-family support, all STM32 drivers adapted and re-tested
  on the new platform except ADC that will need a specific implementation. 
- NEW: Added new API chThdExitS() in order to allow atomic operations on
  thread exit (backported to 2.2.8).
- NEW: New EXT driver model and STM32 implementation.
- NEW: New I2C driver model and STM32 implementation.
  (evaluate the option to change the API to a synchronous model)
- NEW: New RTC driver model and STM32 implementation.
  (API and functionality review)
- NEW: Improved MAC driver model, it now follows the same template of other
  drivers.
  TODO: implement macStop() in AT91SAM7X implementation.
- NEW: New RCC helper driver for STM32F1xx and STM32L1xx, it simplifies
  the use of the RCC resources and hides most differences found among the
  various STM32 sub-families.
- NEW: New DMA helper driver for STM32, it simplifies the use of the DMA
  resources and hides most differences with the new enhanced DMA units
  found in the STM32F2xx sub-family.
- NEW: Now an error is generated at compile time when trying to enable the
  options CH_DBG_ENABLE_STACK_CHECK on ports that do not support it.
- NEW: Added a kernel-only Cortex-Mx demo as reference project for users not
  interested in the HAL but just want to use the ChibiOS/RT kernel.
  The demo is named ARMCM3-GENERIC-KERNEL and is defaulted to the STM32, in
  order to use it on other families or on the ARM Cortex-M0 just change the
  inclusion paths in the makefile.
- NEW: Integrated new FatFs version 0.8b.
- NEW: Added a new hook THREAD_CONTEXT_SWITCH_HOOK() that allows to insert
  code just before a context switch. For example this hook could be used
  in oder to implement advanced power management schemes.
- NEW: Added a new debug option CH_DBG_SYSTEM_STATE_CHECK that ensures the
  correct API call protocol. If an API is invoked out of the correct context
  then the kernel panics with a debug message.
- NEW: The ARMCMx startup file (crt0.c) now is able to fill the stack areas
  with a filler (default behavior). This is required in order to easily assess
  the stack usage at runtime.
- NEW: Added the new CMSIS 2.1 headers, now CMSIS resides into a shared
  location: ./os/ports/common/ARMCMx/CMSIS. Old CMSIS files have been
  removed from the various platforms.
- NEW: Removed all the ch.ld files from the ARMCMx demos, now the makefiles
  point to common ld files under the various ports. Less duplication and
  easier maintenance.
- NEW: Improved stack checking and reorganized memory map for the Cortex-Mx
  demos. Now stacks are allocated at the start of the RAM, an overflow of the
  exception stack now triggers an exception (it could go unnoticed before).
  The process stack is organized to be checked on context switch like other
  threads. Now all threads have an explicit stack boundary pointer.
- NEW: Added debug plugin for Eclipse under ./tools/eclipse (backported to
  2.2.7).
- NEW: The debug macros chDbgCheck() and chDbgAssert() now can be externally
  redefined. The macro chDbgCheck() no more includes the line number in the
  description because incompatibility with the Cosmic compiler (backported to
  2.2.7).
- NEW: Added provisional support for STM32F2xx. Because of this some
  directories related to the STM32 have been renamed, your makefiles may
  require adjustments.
- NEW: Added a custom rule to the various rules.mk files, now it is possible
  to add an user rule into the Makefiles.
- NEW: Improvements to the trace buffer, now it stores a full thread pointer
  and event time, changed names to debug variables by adding the "dbg_"
  prefix (backported to 2.2.7).
- NEW: Added a new functionality to the registry subsystem, now it is possible
  to associate a name to the threads using chRegSetThreadName. The main and
  idle threads have their name assigned by default (backported to 2.2.7).
- NEW: Added TIM8 support to the STM32 GPT, ICU and PWM drivers.
- NEW: Updated the STM32 header file to the latest version 3.5.0 and fixed
  it in order to correct several bugs related to the XL family.
- NEW: Added a chprintf() function to ./os/various, it can print on any
  BaseChannel.
- NEW: Improved the mini shell, enhanced info command, optimizations and
  removed the shellPrint() and shellPrintLine() functions, now it uses
  chprintf() for output.
- NEW: lwIP 1.4.0 has been integrated, this new version does not require
  custom hooks into the Thread structure and is thus much lighter.
- NEW: FatFs demo for the STM32F103ZG using the SDC driver.
- NEW: Now the STM32 SDC driver supports unaligned buffers transparently.
  Optimized the driver for single block read and write operations. Optimized
  the driver state machine.
- NEW: Finished the reorganization of the Cortex-Mx ports, now also the
  IAR and RVCT ports support the new Compact mode.
- NEW: Added to the ARMv6-M sub-port an option to use the PendSV exception
  instead of NMI for preemption (backported to 2.2.5).
- NEW: Reorganization of the Cortex-Mx ports in order to reduced code and
  comments duplication in the various headers (backported to 2.2.5).
- NEW: Improved the ARMv7-M sub-port now there are two modes: Compact and
  Advanced.
  The advanced mode is equivalent to the previous versions, the compact mode
  is new and makes the kernel *much* smaller and generally faster but does
  not support fast interrupts (backported to 2.2.5).
- NEW: Now the port layer exports info regarding the compiler and the port
  options. The info are printed into the test reports. Date and time also
  added.
- CHANGE: Removed the option CH_USE_NESTED_LOCK, lwIP no more requires it and
  it would have conflicted with CH_DBG_SYSTEM_STATE_CHECK which is far more
  useful.
- CHANGE: Renamed the scheduler functions chSchIsRescRequiredExI() to
  chSchIsPreemptionRequired(), chSchDoRescheduleI() to chSchDoReschedule(),
  chSysSwitchI() to chSysSwitch(). All those functions were special cases
  and not regular I-class APIs.
- CHANGE: Renamed the macros IDLE_THREAD_STACK_SIZE and INT_REQUIRED_STACK
  to PORT_IDLE_THREAD_STACK_SIZE and PORT_INT_REQUIRED_STACK for consistency.
- CHANGE: Removed the "old" Cortex-M3 port from the code, the current port
  has no drawbacks and the old port is now just a maintenance cost.
- CHANGE: Removed the CH_CURRP_REGISTER_CACHE option, it is GCC-specific so
  it does not belong to the kernel options. The feature will be eventually
  reimplemented as a port-specific option.
- CHANGE: chiQGetFullI() and chOQGetFullI() become macros. The queues
  subsystem has been optimized and is no more dependent on semaphores.
  Note that the queues callbacks invocation policy has been slightly
  changed, see the documentation (backported to 2.2.4).

*** 2.3.2 ***
- FIX: Fixed invalid BRR() macro in AVR serial driver (bug 3299306)(backported
  to 2.2.4).
- FIX: Fixed missing IRQ vectors amicable names for STM32 XL devices (bug
  3298889)(backported to 2.2.4).
- FIX: Fixed wrong identifier in AVR serial driver (bug 3292084)(backported
  to 2.2.4).
- FIX: Fixed wrong macro check for STM32 XL devices (bug 3291898)(backported
  to 2.2.4).
- FIX: Fixed SPI driver restart in STM32 SPI driver implementation, also
  applied the same fix to the STM8S SPI driver (bug 3288758)(backported to
  2.2.4).
- FIX: Fixed missing state transition in ADC driver (bug 3288149)(backported
  to 2.2.4).
- FIX: Fixed missing state transition in SPI driver (bug 3288112)(backported
  to 2.2.4).
- FIX: Fixed spurious characters generated by Serial over USB driver (bug
  3276379).
- NEW: Added an option to the kernel to not spawn the Idle Thread from within
  chSysInit(), this way the application can spawn a custom idle thread or
  even use the main() thread as idle thread (backported to 2.2.4).
- NEW: Added new SDC driver model, Secure Digital Card.
- NEW: SDC driver implementation for STM32.
- NEW: Updated the STM32 header file to the latest version 3.4.0, had to
  fix a bug regarding the STM32 XL sub-family.
- NEW: New unified GCC startup file for Cortex-Mx processors, it is written
  in C instead of asm and supports constructors/destructors. Improved the
  Cortex-Mx linker scripts in all the GCC demos.
- NEW: Now it is possible to share DMA channels in the STM32 HAL thanks
  to a centralized manager. Channels are allocated when the driver is
  started and released when it is stopped.
- NEW: Added an STM32 C++ demo for the GNU compiler.
- NEW: Added an STM32F103ZG demo for the STM3210E-EVAL evaluation board.
- OPT: STM32 PWM driver implementation simplified.
- CHANGE: Now pwmChangePeriod() does not implicitly disable the active
  PWM channels.
- CHANGE: Renamed the chSemSetCounterI() function to chSemAddCounterI() and
  changed its behavior.
- CHANGE: Modified the STM32 USB-CDC test demo to spawn a shell over the USB
  serial connection.

*** 2.3.1 ***
- FIX: Fixed insufficient idle thread stack in Cortex-M0-GCC port (bug 3226671)
  (backported to 2.2.3).
- FIX: Fixed stack checking in Cortex-M0-GCC port (bug 3226657)(backported
  to 2.2.3).
- FIX: Fixed wrong checks in PAL driver (bug 3224681)(backported to 2.2.3).
- FIX: Fixed wrong checks in I/O Queues (bug 3219197)(backported to 2.2.3).
- FIX: Fixed invalid assertion in adcConvert() (bug 3205410)(backported
  to 2.2.3).
- NEW: Improvements to the PWM driver model:
  - Easier configuration similar to the GPT driver initializations, macros
    are no more required.
  - Added a new function that allows to change the PWM period on the fly,
    even from within callbacks. Formerly it was required to stop and restart
    the driver.
  - Improved driver documentation.
- NEW: Added advanced mode to the STM32 PWM driver (TIM1 only).
- NEW: Added new ICU driver model, Input Capture Unit.
- NEW: ICU driver implementation for STM32.
- NEW: Implemented stack checking in the Cortex-Mx RVCT port (backported
  to 2.2.3).
- NEW: Added support for PLL3 in STM32 HAL driver. Note, the format of the
  mcuconf.h file is changed for STM32F105/STM32F107 devices.
- NEW: Added board files for the Olimex STM32-P107.
- NEW: Improved setup packets handling in the USB driver through a specific
  callback.
- NEW: Improvements to the PAL driver and various implementation in order
  to make them more parenthesis friendly.
- OPT: Simplified Serial over USB driver configuration.
- CHANGE: Renamed the demo ARMCM3-STM32F107-GCC in ARMCM3-STM32F107 and added
  IAR and Keil projects.
- CHANGE: Now the ARMCM3-STM32F107 demo targets the board Olimex STM32-P107
  as default.
- CHANGE: Removed all the prefixes from the structure/union field names
  in the HAL subsystem.
- CHANGE: Updated the documentation to use Doxygen 1.7.4 which produces a much
  more readable output. Also modified the documentation layout to put functions
  and variables ahead of everything else in the group pages.
  Doxygen version below 1.7.4 cannot be used anymore because differences in
  templates. Note that now there are two Doxygen projects, one for generating
  the CHM file the other for plain HTML.

*** 2.3.0 ***
- FIX: Fixed race condition in CM0 ports, the fix also improves the
  ISR latency (bug 3193062)(backported to 2.2.2).
- FIX: Fixed Cortex-Mx linker scripts alignment of __heap_base__, the
  correct alignment is now enforced at runtime into core_init() in order
  to make the OS integration easier (bug 3191112)(backported to 2.2.2).
- FIX: Fixed error in function chCoreAllocI() function documentation (bug
  3191107)(backported to 2.2.2).
- FIX: Fixed minor problem with memory pools (bug 3190512)(backported to
  2.2.2).
- FIX: Stack overflow in CM0 ports when nearing interrupts saturation (bug
  3187105)(backported to 2.2.1).
- FIX: Fixed error in _BSEMAPHORE_DATA macro (bug 3184139)(backported to
  2.2.1).
- FIX: Error in MAC driver (bug 3179783)(backported to 2.2.1).
- FIX: Fixed wrong serial driver macros (bug 3173336)(backported to 2.2.1).
- NEW: Improved preemption implementation for the Cortex-M0, now it uses
  the NMI vector in order to restore the original context. The change makes
  IRQ handling faster and also saves some RAM/ROM space. The GCC port code
  now does not inline the epilogue code in each ISR saving significant ROM
  space for each interrupt handler in the system (backported to 2.2.3).
- NEW: Added "IRQ STORM" long duration tests for the STM32, LPC11xx and
  LPC11xx. The test demonstrates the system stability in a thread-intensive,
  progressively CPU-saturating, IRQ-intensive long duration test.
- NEW: Added two new functions to the events subsystem: chEvtBroadcastFlags()
  and chEvtBroadcastFlagsI(). The old chEvtBroadcast() and chEvtBroadcastI()
  become macros. The new functions allow to add the same flags to all the
  registered listener threads.
- NEW: Added I-Class functions to the MailBoxes subsystem, now it is
  possible to use them as a transport layer between ISRs and Threads
  (backported to 2.2.2).
- NEW: Added new USB driver model, probably it will evolve in next
  releases.
- NEW: USB driver implementation for STM32.
- NEW: Added "serial over USB" driver, it implements a Communication
  Device Class exposing it as a normal serial driver to applications,
  probably it will evolve in next releases.
- NEW: Added STM32 USB CDC loopback test application.
- NEW: Added new GPT driver model, General Purpose Timer. The driver
  allows to access the available timers in an abstract way.
- NEW: GTP driver implementation for STM32, LPC13xx and LPC11xx.
- NEW: Added STM32 GPT test application.
- NEW: Implemented new event IO_TRANSMISSION_END in the generic serial
  driver. This event marks the physical transmission end of a data stream.
- NEW: Implemented the new IO_TRANSMISSION_END event in the STM32 serial
  driver.
- NEW: Added explicit reset of all peripherals inside the STM32 HAL driver.
  Removed the separate resets on initialization from the various other
  drivers saving significant space.
- OPT: Removed TIMx reset on system startup in the STM32 PWM driver, the
  timers are already reset on driver startup.
- CHANGE: The functions chEvtSignal() and chEvtSignalI() have been renamed
  to chEvtSignalFlags() and chEvtSignalFlagsI() for consistency.
- CHANGE: Swapped the numeric values of the TIME_IMMEDIATE and TIME_INFINITE
  constants. Fixed the relative documentation in various places (backported
  to 2.2.2).
- Many documentation improvements.

*** 2.1.8 ***
- FIX: Fixed error in STM32 ADC driver macro names (bug 3160306)(backported
  to 2.0.11).
- FIX: Fixed IAR Cortex-Mx port memory organization problem (bug 3158776).
- FIX: Fixed STM32F103 demo's incorrect clock settings (bug 3153746).
- NEW: Added OTG clock setting to the STM32 HAL.
- NEW: Added stack check support to the IAR Cortex-Mx port.
- CHANGE: Removed .uvopt files from the Keil projects.

*** 2.1.7 ***
- FIX: Fixed various errors in the HAL documentation (bug 3153591).
- FIX: Fixed error in chIOGetxxxxxEventSource() macros (bug 3153550)
  (backported to 2.0.10)
- FIX: Fixed error in STM32 unbuffered UART driver (bug 3153437).
- FIX: Fixed wrong macro check in LPC214x driver (bug 3152510).
- FIX: Fixed switch condition error in STM32 PWM driver (bug 3152482)
  (backported to 2.0.10).
- FIX: Fixed error in output queues static initializer (bug 3149141)
  (backported to 2.0.9).
- FIX: Fixed extra notifications in input queues (bug 3148525)(backported
  to 2.0.9).
- NEW: New ARM Cortex-Mx port for RVCT compiler.
- NEW: Integrated the various Cortex-Mx GCC, IAR and RVCT demos in unified
  demos with multiple project files, the code is exactly the same. Renamed
  the directories removing the compiler suffix.
- NEW: Added an USB clock configuration in the STM32 HAL driver (LD, MD, HD).
- NEW: New semaphore API chSemSetCounterI().
- NEW: New queue APIs chIQGetFullI() and chOQGetFullI().
- CHANGE: Serial drivers now have a single event source instead of three,
  the event source is located in the superclass, this allows to create
  alternative implementations of the serial driver while keeping compatibility,
  the change also allowed to save 8/4 RAM bytes per serial driver.
- CHANGE: Modified the ADC and CAN drivers to allow a NULL pointer for
  the configuration structure if it is not required by the implementation.
- CHANGE: Modified the MMC_SPI driver to *require* a NULL as pointer to
  the configuration.
- CHANGE: Removed enforced inlining for the chSchReadyI() function when
  the CH_OPTIMIZE_SPEED is enabled. Now the matter is left to the compiler
  specific settings. This change is meant to increase compatibility with
  compilers that have a different inlining semantic than GCC when not in
  C99 mode.
- CHANGE: Changed the declaration of the main() function in all demos
  without arguments. Removed the clearing of arguments from the startup
  files and saved some space.
- CHANGE: Queues callbacks now have as parameter a pointer to the queue,
  there were no parameters previously.
- Documentation related fixes.

*** 2.1.6 ***
- FIX: Fixed error in sdPutTimeout() macro (bug 3138763)(backported in 2.0.9).
- NEW: New ARM Cortex-Mx port for IAR compiler.
- NEW: Now the STM32 CAN driver puts the lower half word of the ESR
  register in the upper half word of the can status word for easier
  debug.
- CHANGE: Changes in the board files organization, now the board
  initialization is invoked from within halInit() after all the device
  drivers have been initialized. Now applications are required to
  explicitly invoke halInit() and chSysInit() from within their main().
- CHANGE: Removed the CMSIS files from the ARMCMx port, added the headers
  into the various HAL platforms requiring them. The change is required
  because the port layer must not have vendor specific dependencies and
  there is the possibility that the various vendors would use different
  CMSIS versions now that CMSIS 2.x has been released.
- CHANGE: Modified the start of the ADC in the STM32 ADC driver, now it is
  no more required to specify ADC_CR2_EXTSEL_SWSTART and ADC_CR2_CONT
  in the CR2 register configuration. Also reordered the start sequence
  in order to allows a longer stabilization time for the ADC.
- Documentation improvements.

*** 2.1.5 ***
- FIX: Fixed references to non-existing SSP1 device in LPC13xx SPI device
  driver (bug 3127926).
- FIX: Fixed broken SPI synchronous API (bug 3127921).
- FIX: Fixed missing vector.c files in LPC11xx and LPC13xx ports (bug 3124849).
- FIX: Fixed pwmDisableChannel() now working in STM32 PWM driver (bug 3121246).
- FIX: Fixed problem with PWM channel callbacks (bug 3120785).
- NEW: Added support for TIM5 in the STM32 PWM driver.
- NEW: Added to the ARM port the option to externally redefine the port IRQ
  macros in order to accomodate different implementations without have to
  change the port layer.
- CHANGE: Modified the STM32_PWM_PWMx_IRQ_PRIORITY macros in the STM32
  PWM driver (and all the STM32 mcuconf.h files) and renamed them in
  STM32_PWM_TIMx_IRQ_PRIORITY for consistency.
- Documentation related fixes.

*** 2.1.4 ***
- FIX: Fixed failed memory recovery by registry scan, improved the related
  test case (bug 3116888)(backported to 2.0.8).
- FIX: Fixed failure in STM32 ADC driver when a linear buffer mode is used
  (bug 3114696).
- FIX: Fixed PWM channels going to ACTIVE state when the pulse width is
  set to zero in the STM32 PWM driver (bug 3114481)(backported to 2.0.8).
- FIX: Fixed PWM channels return to IDLE state in STM32 PWM driver (bug
  3114467)(backported to 2.0.8).
- FIX: Fixed wrong initializer macros in STM32 PWM driver (bug 3114319).
- FIX: Fixed syntax error in STM32 PWM driver(bug 3114266).
- FIX: Fixed typo in board name (bug 3113574)(backported to 2.0.7).
- FIX: Fixed defective event wait functions with timeout (bug 3113443)
  (backported to 2.0.7).
- NEW: More improvements to the ADC and SPI drivers, now synchronous
  operations can also have callbacks, optimized ISR code paths.
- NEW: Added to the STM32 ADC driver the macros for easy handling of the
  sampling time for each channel.
- NEW: Greatly simplified the STM32 PWM driver implementation.
- NEW: Added new macro PWM_FRACTION_TO_WIDTH() to the PWM driver model.
- NEW: ARM7 port reorganization following the same pattern of the ARMCMx
  one, on now the port is also supports the ARM9 architecture (but not
  tested yet hardware). Removed the dependencies between the port layer
  and the vendors-provided headers.
- NEW: Initial STM8L support: HAL, PAL and Serial drivers.
- NEW: Added demo for the ST STM8L-Discovery kit.
- NEW: Added support for the STM32 Value Line to the HAL.
- NEW: Added demo for the ST STM32VL-Discovery kit.
- OPT: STM32 SPI driver implementation improved, reduced latency when
  starting a transfer.
- CHANGE: Improved the STM32 HAL to support multiple sub-families, at compile
  time now it is possible to test the presence of any single peripheral into
  the specified STM32 device.
- CHANGE: Separated dynamic threads code into dedicated files: chdynamic.c
  and chdynamic.h.
- CHANGE: Moved the declaration of the variable pal_default_config from
  hal_lld.c to the various board.c. That structure is more meaningful in
  the board layer because it is related to the board initialization.
- CHANGE: Removed the various assembler files for the STM32 interrupt
  vectors, now it is a single vectors.c file.
- CHANGE: Deleted ./os/ports/GCC/ARM.
- CHANGE: Renamed ./os/ports/GCC/ARM7 in ./os/ports/GCC/ARM.
- CHANGE: Renamed ./os/hal/platforms/STM8 in ./os/hal/platforms/STM8S.
- CHANGE: Renamed ./testhal/STM8 in ./testhal/STM8S.
- Added SPI driver to the STM8S documentation, it was missing.
- Improved documentation for the ARM and ARMCMx ports.

*** 2.1.3 ***
- FIX: Fixed broken STM32 synchronous UART driver (bug 3100946).
- FIX: Broken C++ wrapper (bug 3100925).
- FIX: Broken lwIP/uIP demos (bug 3100901).
- FIX: DMA not initialized under some conditions (bug 3099701).
- FIX: Restored the RIDE7 build files in the STM32F103 demo, note the RIDE7
  build files are not supported so this has not been tracked as a bug.
- NEW: Added an SPI driver to the STM8 platform support.
- NEW: Added a simple STM8 SPI demo under ./testhal/STM8/SPI.
- NEW: Divided the file STM32/vectors.s in several files, one for each
  STM32 sub-family. This has been done in order to remove the preprocessor
  directives from assembler files and to support all the various STM32
  sub-families.
- CHANGE: Renamed ./os/ports/GCC/ARMCMx/STM32F10x in STM32.
- CHANGE: Divided the file ARMCMx/crt0.s in crt0_v6m.s and crt0_v7m.s in
  order to remove the preprocessor directives from assembler files.
- CHANGE: Renamed the HAL settings macro names, removed the CH_ prefix
  because it is reserved for the kernel namespace.
      NOTE: ****** Make sure to use a mcuconf.h file taken from ******
            ****** this version in your project.                ******

*** 2.1.2 ***
- FIX: Fixed typo in memstreams.h (bug 3089567)(backported to 2.0.6).
- FIX: Fixed wrong macro check in LPC214x and AT91SAM7 serial drivers (bug
  3088776)(backported to 2.0.6).
- FIX: Fixed non functioning option SPI_USE_MUTUAL_EXCLUSION=FALSE (bug
  3084764)(backported to 2.0.6).
- FIX: Fixed wrong macro check in STM32 serial support (bug 3078891)(backported
  to 2.0.6).
- FIX: Fixed non functioning option CH_USE_NESTED_LOCKS (bug 3075544)
  (backported to 2.0.6).
- FIX: Incorrect AT91SAM7X initialization, thanks Leszek (bug 3075354)
  (backported to 2.0.5).
- FIX: Fixed race condition in function chSchGoSleepTimeoutS(), thanks Bal�zs
  (bug 3074984)(backported to 2.0.5).
- FIX: Fixed race condition in threads creation (bug 3069854)(backported
  to 2.0.5).
- FIX: Fixed broken CH_DBG_ENABLE_STACK_CHECK option in legacy CM3 port (bug
  3064274)(backported to 2.0.5).
- FIX: Fixed CAN_USE_SLEEP_MODE setting (bug 3064204)(backported to 2.0.5).
- FIX: Fixed potential issue with GCC reorganizing instructions around "asm
  volatile" statements (bug 3058731)(backported in 2.0.4).
- FIX: Fixed reduced ARM7 performance with GCC 4.5.x (bug 3056866)(backported
  to 2.0.4).
- FIX: Fixed crash of the Posix simulator under Ubuntu 10.4 (bug 3055329)
  (backported to 2.0.3).
- FIX: Fixed incorrect PLL2 setting in STM32 HAL (bug 3044770)(backported
  in 2.0.3).
- FIX: Fixed wrong check on STM32_HCLK (bug 3044758)(backported to 2.0.3).
- FIX: Fixed wrong condition check in STM32 PWM driver (bug 3041414)
  (backported in 2.0.3).
- FIX: Corrupted IRQ stack in Cortex-Mx port (bug 3041117)(backported to
  2.0.3).
- FIX: Fixed a documentation error regarding the ADC driver function
  adcStartConversion() (bug 3039890)(backported to 2.0.3).
- NEW: New I2C driver model (not complete and no implementations yet).
- NEW: New SPI driver model, the new model supports both synchronous and
  asynchronous operations and, in general, simplifies the implementation of the
  low level driver. The new driver also specifies a simplified polled exchange
  API, useful for efficiently sending small amount of data over high speed
  connections. The driver state diagram changed slightly changed so be careful.
- NEW: New ADC driver model, the new model supports both synchronous and
  asynchronous operations and, in general, simplifies the implementation of the
  low level driver. The driver state diagram changed slightly changed so be
  careful.
- NEW: Improved PWM driver model, added several macros that helps to setup
  configuration structures and to specify pulse widths also as percentages or
  degrees using a fixed point notation. Added new pwmEnableChannelI() and
  pwmDisableChannelI() APIs in order to allow channel reprogramming from
  within callbacks or interrupt handlers, the new APIs are implemented as
  macros so there is no footprint overhead.
- NEW: Added driver fields and initialization hooks for the callback-based
  drivers. The hooks are named XXX_DRIVER_EXT_FIELDS and
  XXX_DRIVER_EXT_INIT_HOOK().
- NEW: Added to the UART driver the capability to return the number of
  not yet transferred frames when stopping an operation.
- NEW: Added more compile-time checks to the various STM32 device drivers.
- NEW: Improved LPC214x SPI driver, now it uses IRQs, it implements the
  new SPI device driver model.
- NEW: Improved AT91SAM7 SPI driver, now it uses IRQs and DMAs, it implements
  the new SPI device driver model.
- NEW: New LPC11xx SPI driver, updated the LPCXpresso demo to use the SPI.
- NEW: New LPC13xx SPI driver, updated the LPCXpresso demo to use the SPI.
- NEW: Added a simple STM32 ADC demo under ./testhal/STM32/ADC.
- NEW: Added a simple STM32 CAN demo under ./testhal/STM32/CAN.
- NEW: Added a simple STM32 PWM demo under ./testhal/STM32/PWM.
- NEW: Added a simple STM32 SPI demo under ./testhal/STM32/SPI.
- NEW: More assertions added to the kernel for improved bug fixing.
- NEW: New kernel hooks: SYSTEM_TICK_EVENT_HOOK(), SYSTEM_HALT_HOOK().
- NEW: Added board files for the Olimex STM32-H103.
- NEW: New kernel APIs chSysGetIdleThread() and chThdGetTicks(), the new
  APIs are simple macros so there is no footprint overhead.
- NEW: Added a generic BaseFileStream interface for future File System
  implementations or integrations (untested and not sure if it will stay or
  change).
- NEW: Added to the documentation more notes about interrupt handlers in
  the ARM7 port.
- NEW: Modified some tests in order to bring back code coverage to 100%
  in all modules except chdebug.c. Added a test case covering binary
  semaphores.
- OPT: The fix to the bug 3075544 considerably improved the threads creation
  benchmarks score.
- OPT: Speed optimizations to the STM32 SPI driver, greatly improved latency.
- OPT: Speed optimizations to the STM32 ADC driver.
- CHANGE: The API chThdInit() has been renamed to chThdCreateI() in order to
  make clear it is usable from interrupt handlers.
- CHANGE: The mailboxes macros chMBSize(), chMBGetEmpty(), chMBGetFull(),
  chMBPeek() have been renamed to chMBSizeI(), chMBGetFreeCountI(),
  chMBGetUsedCountI(), chMBPeekI().
- CHANGE: The queue APIs chQSize(), chQSpace(), chIQIsEmpty(), chIQIsFull(),
  chOQIsEmpty(), chOQIsFull() have been renamed to chQSizeI(), chQSpaceI(),
  chIQIsEmptyI(), chIQIsFullI(), chOQIsEmptyI(), chOQIsFullI().
- CHANGE: The event APIs chEvtPend() and chEvtClear() have been renamed
  to chEvtAddFlags() and chEvtClearFlags() for consistency and correct
  English. Changed the macro chEvtIsListening() in chEvtIsListeningI().
- CHANGE: Added a parameter to the PWM driver callbacks, the pointer to the
  driver itself.
- CHANGE: Added a parameter to the UART driver callbacks, the pointer to the
  driver itself.
- CHANGE: In the UART driver now an error does not automatically brings the
  receiver in UART_RX_IDLE state, the receive operation continues unless
  explicitly stopped in the error callback handler. This considerably
  simplifies the low level driver code.
- CHANGE: Removed a spurious trailing ; after the WORKING_AREA() macro
  declaration in several ports. The ; should go after the macro invocation.
- CHANGE: Modified the STM32 ADC driver to use the new DMA infrastructure.
- CHANGE: Modified the STM32 SPI driver to use the new DMA infrastructure.
- CHANGE: Added DMA cleanup code to the STM32 dmaInit() function.
- CHANGE: Simplified preprocessor conditions in the STM32 serial driver.
- CHANGE: Renamed most of the STM32 HAL settings macro names in order to
  make names more consistent.
      NOTE: ****** Make sure to use a mcuconf.h file taken from ******
            ****** this version in your project.                ******
- CHANGE: Renamed the existing system hooks by adding the _HOOK suffix to
  the name in order to make names more consistent.
      NOTE: ****** Make sure to use a chconf.h file taken from  ******
            ****** this version in your project.                ******
- CHANGE: Extensive documentation improvements, fixed terminology in the
  events related documentation and articles.
- CHANGE: The documentation is no more included in the distribution, the
  file ./documentation.html redirects to the online documentation page
  that contains *much* better documents.
  Note that it is still possible to generate the local documentation using
  Doxygen, the procedure is very simple and described in ./docs/readme.txt.

*** 2.1.1 ***
- FIX: Fixed insufficient stack size for idle thread (bug 3033624)(backported
  to 2.0.3).
- FIX: Fixed misspelled word in some chioch.h and chstreams.h macros (bug
  3031534)(backported to 2.0.3).
- FIX: Fixed wrong macro check in the STM32 SPI driver (bug 3028562)(backported
  to 2.0.3).
- FIX: Fixed invalid context restore in MSP430 port (bug 3027975)(backported
  to 2.0.2).
- FIX: Fixed STM32 vectors file (bug 3026528)(backported to 2.0.2).
- FIX: Fixed race condition in STM32 SPI driver (bug 3025854)(backported to
  2.0.2).
- FIX: Fixed H_LOCK and H_UNLOCK redefined with CH_USE_MALLOC_HEAP (bug
  3025549)(backported to 2.0.2).
- FIX: Added option to enforce the stack alignment to 32 or 64 bits in the
  Cortex-Mx port (bug 3025133)(backported to 2.0.2).
- NEW: Centralized DMA macros in the STM32 HAL.
- NEW: New UART device driver model, this device driver allows unbuffered,
  callback driven access to UART-type devices.
- NEW: UART device driver for STM32 and UART demo application under
  ./testhal/STM32/UART.
- NEW: Added friendly interrupt vectors names to the STM32 HAL (change request
  3023944).
- NEW: Added support for SPI3 in the STM32 HAL.
- CHANGE: Redeclared the IRQ handlers in the various STM32 drivers using the
  new friendly vector names.
- CHANGE: Moved the STM32 HAL stess test application under
  ./testhal/STM32/_stress_test.
- CHANGE: Removed the option -mabi=apcs-gnu from all the Cortex-Mx demos. The
  option is not compatible with the 64 bits stack alignment now default in
  the Cortex-Mx port. Note that the 64 bits alignment has a cost both as
  performance and as space but it is the "standard".
- OPT: Small speed optimization in the STM32 SPI driver.
- OPT: Optimized DMA clearing in STM32 ADC and SPI drivers, there was no need
  to read/modify/write the IFCR DMA register, it is write only.
- Fixed various documentation errors.

*** 2.1.0 ***
- FIX: Fixed notification order in input queues (bug 3020708)(backported in
  2.0.1).
- FIX: Fixed non functional CH_CURRP_REGISTER_CACHE option in the Cortex-M3
  port (bug 3020702)(backported in 2.0.1).
- FIX: Fixed non functional CH_DBG_ENABLE_STACK_CHECK option in the Cortex-M3
  caused by GCC 4.5.0, the fix also improves the context switch performance
  because GCC 4.5.0 apparently was generating useless instructions within the
  very critical context switch code (bug 3019738)(backported in 2.0.1).
- FIX: Fixed insufficient stack space assigned to the idle thread in
  Cortex-M3 port (bug 3019594)(backported in 2.0.1).
- FIX: Fixed missing check in chIQReadTimeout() and chIQWriteTimeout() (bug
  3019158)(backported in 2.0.1).
- FIX: Fixed instability in Mutexes subsystem (bug 3019099)(backported
  in 2.0.1).
- FIX: Fixed broken AVR port (bug 3016619)(backported in 2.0.0).
- FIX: Fixed assertion in adcStop() (bug 3015109)(backported in 2.0.0).
- NEW: Merged the new unified STM8 port, now the port supports both the
  Cosmic and Raisonance compilers.
- NEW: Added an STM8-DISCOVERY demo, the demo can be compiled with both the
  Cosmic and Raisonance compilers under the STDV IDE. Performance reports
  have been added for both compilers.
  NOTE: The Raisonance compiler seems to have problems in debugging under
        the STDV IDE, if you need to debug using the Raisonance compiler
        consider using the RIDE7 IDE instead.
        Compiling and executing using the "release" mode under STDV works fine.
- NEW: Added timers clock macros to the STM32 clock tree HAL driver (backported
  in 2.0.1).
- NEW: Added Binary Semaphores among the synchronization primitives. The new
  subsystem is entirely implemented as macros over the existing and proven
  Counting Semaphores thus takes no space (experimental).
- NEW: Added a simplified SPI driver for AT91SAM7 devices, contributed by
  Alexander (experimental).
- NEW: Added FatFs demos for AT91SAM7S and AT91SAM7X, contributed by
  Alexander (experimental).
- OPT: Simplified the test suite code, now it is smaller.
- Reorganized the documentation, now the description of the device drivers
  implementation is under the HAL module instead of the Ports module.

*** 1.5.9 ***
- FIX: Fixed STM8 baud rate setup error (bug 3010990).
- FIX: Fixed STM8 UART3 driver (bug 3009145).
- NEW: Added a STM8_ENABLE_WFI_IDLE option to the STM8 port, the default
  is FALSE.
- OPT: Small size optimization in the semaphores subsystem.
- OPT: Improvements in the STM8 port, the code is now smaller and generally
  faster, also saved few bytes of RAM.
- Added explicit casts in chevents.h, chqueues.h, chqueues.c in order to
  silence some warnings on a specific compiler.
- Added a section in chconf.h where redefine the port-related configuration
  parameters, also added notes into the documentation about this.

*** 1.5.8 ***
- FIX: Fixed missing files from ST library zip file (bug 3006629).
- NEW: Added a demo for the AT91SAM7S256 and board files for the Olimex
  SAM7-P256. The demo has been contributed by Alexander Kozaruk.
- Fixed some wrong paths into the demos readme files.
- Formatting fixes to the port templates.
- Added notes about copyright assignment to the documentation. Fixed some
  problems in the licensing FAQ page.
- Added documentation article about events in ChibiOS/RT.

*** 1.5.7 ***
- FIX: Fixed missing SPI driver reinitialization in the MMC driver (bug
  3005628)(backported in 1.4.4).
- FIX: Fixed wrong inclusion order of board.h and halconf.h into hal.h
  (bug 3005041)(backported in 1.4.4).
- FIX: Fixed wrong GPIO ports size in the STM8 PAL driver (bug 3001528).
- NEW: Improved clock initialization for the STM32, now it is possible to
  configure the clock using any clock source and any HSE frequency.
- NEW: The STM32 clock tree parameters and checks are now calculated into
  a separate file in order to support multiple clock trees for different
  sub-families of the STM32 platform.
- NEW: Added separated clock trees for the STM32 LD/MD/HD sub-family and
  the CL sub-family. Now the selection of the sub-family is done in the
  board.h file, there is no more the need to put -DSTM32F10X_xx into
  the makefile.
- NEW: Added the palSetBusMode() capability to the STM8 PAL driver.
- NEW: Added the palSetBusMode() capability to the LPC11xx and LPC13xx
  PAL drivers.
- NEW: Updated the STM32 FW Library files to latest version 3.3.0.
- CHANGE: Renamed the STM32, STM8, LPC214x, AT91SAM7x, MSP430 and simulators
  PAL configuration structures to PALConfig, it is better to have the same
  name for this structure in all ports (like for all the other drivers).
- CHANGE: Modified the linker scripts in the ARM demos in order to increase
  compatibility with the CodeSourcery toolchain.
- Tested the STM8 port with the latest RKit-STM8_2.28.10.0092. It works but
  the new compiler shows a slight performance regression except in one
  test case.
- Added credits page to the documentation, improved the article regarding
  timings.
- Performed another documentation revision cycle, fixed more bad English and
  few errors.

*** 1.5.6 ***
- FIX: Fixed centralized ARM makefile (bug 2992747)(backported in 1.4.3).
- FIX: Fixed write problems in MMC_SPI driver (bug 2991714)(backported in
  1.4.3).
- FIX: Fixed wrong macros in chioch.h (bug 2989468).
- FIX: Fixed wrong macro check in serial.h (bug 2989459)(backported in 1.4.3).
- NEW: Added a ROMCONST macro in chtypes.h, this macro must be used for
  constant that must be placed in code space, it should not be assumed that
  the "const" keyword does that. Note that this macro is not used to place
  constants in different address spaces (AVR) because it is assumed that a
  pointer to a ROMCONST variable is compatible with a normal pointer.
- NEW: AT91SAM7 HAL support for the DGBU UART peripheral, as SD3.
- NEW: Introduced a new macro CH_FAST_IRQ_HANDLER() for the declaration of
  fast interrupt handlers on those architectures that support them.
- OPT: Internal optimization in the serial driver, it now is a bit smaller
  and uses less RAM (all architectures).
- CHANGE: Modified the STM32 FatFs demo, now it spawns a command shell or
  the serial port SD2, type "help" for the available commands. More commands
  can be easily added.
- CHANGE: Renamed the chCoreFree() function in chCoreStatus() because it
  might be mistaken for a function that frees memory.
- CHANGE: All ARM demos makefiles now defaults to arm-none-eabi- GNU
  toolchains because the latest YAGARTO now uses that setting. It is still
  possible to use arm-elf- toolchains by editing the TRGT variable in the
  makefiles.
- Various documentation fixes, added new articles covering debugging under
  ChibiOS/RT, OS integration, OS stop and restart. Updated the article about
  interrupt handlers to cover also fast interrupt sources, updated the article
  about the OS porting.
- Long overdue test code cleanup and documentation.
- Added new test cases, now the coverage is again up to 100% except for the
  debug module that would require triggering system terminating tests (panics),
  the uncovered code is minimal, extremely simple and working anyway.
- ChibiOS/RT has been successfully verified with the latest GCC 4.5.0.

*** 1.5.5 ***
- FIX: Removed some "dead" code in the old ARMv7-M files (there are new
  ones, see below).
- NEW: LPC13xx support, drivers (Serial, PAL, HAL), demo and reports.
- NEW: Added statistic info to the lwIP demo.
- CHANGE: Renamed LPC111x port and platform in LPC11xx, minor fixes to the
  platform header files.
- CHANGE: Small documentation fixes and improvements.
- OPT: New Cortex-M3 port code, *huge* performance improvements in all the
  context switching related benchmarks (up to 18% depending on the benchmark).
  The new code does no more require the use of the PendSV vector that is
  thus available to the user, it also saves four RAM bytes for each thread
  in the system. The old code is still available as a fall back option while
  the new one is being hardened by peer review and time, the two ports are
  perfectly interchangeable.

*** 1.5.4 ***
- FIX: Fixed broken CH_CURRP_REGISTER_CACHE option in the ARM7 port (bug
  2973365).
- FIX: Fixed missing memory recovery on thread reference release in
  chRegNextThread() (bug 2971878).
- FIX: Fixed wrong thread state macro in STM32/spi_lld.c (bug 2968142).
- NEW: New unified ARM Cortex-Mx port, this port supports both the ARMv6M
  and ARMv7-M architecture (Cortex-M0/M1/M3/M4 so far). The new port also
  allow to easily add to new Cortex-M implementations by simply adding a
  parameters file (cmparams.h).
- NEW: Embedded Artists LPCxpresso Base Board support files added.
- NEW: LPC111x support, drivers (Serial, PAL, HAL) and demo.
- NEW: The port layer now can "capture" the implementation of individual
  scheduler API functions in order to provide architecture-optimized
  versions. This is done because further scheduler optimizations are
  becoming increasingly pointless without considering architecture and
  compiler related constraints.
- NEW: Added support for the STM8 large memory model to the STM8 port. Now
  the assembler port code is totally inlined and the chcoreasm.asm file has
  been removed.
- NEW: Added RIDE7 project files to the STM32 demo under a ./ride7
  subdirectory, this should make things easier for RIDE7 users. The normal
  makefile is still available of course.
- NEW: New articles and guides in the documentation.
- NEW: Documentation improvements, now the description goes on top of each
  page, doxygen defaulted it in the middle, not exactly the best for
  readability. Improved many descriptions of the various subsystems. Fixed
  a misplaced page (STM8 port).
- OPT: Optimization on the interface between scheduler and port layer, now
  the kernel is even smaller and the context switch performance improved
  quite a bit on all the supported architectures.
- OPT: Simplified the implementation of chSchYieldS() and made it a macro.
  The previous implementation was probably overkill and took too much space
  even if a bit faster.
- CHANGE: Modified the Cortex-M3 port to be a more generic Cortex-Mx port,
  changes were required to the startup code and the port code because the
  reduced instruction set of the Cortex-M0 (there are two code paths now,
  both optimized).
- CHANGE: Modified the SysTick initialization for STM32 to use the system
  clock rather than the external clock.
- CHANGE: Exiting from a chCondWaitTimeout() because a timeout now does not
  re-acquire the mutex, ownership is lost.
- CHANGE: The module documentation has been moved from the kernel.dox file
  to the various source code files in order to make it easier to maintain
  and double as source comments.
- CHANGE: Updated CMSIS files to version 1.3 and fixed the warnings in there,
  again...

*** 1.5.3 ***
- FIX: Removed C99-style variables declarations (bug 2964418)(backported
  in 1.4.2).
- FIX: Fixed missing reschedule in chEvtSignal() (bug 2961208)(backported
  in 1.4.2).
- NEW: Added STM8 port and demo, the demo targets the Raisonance REva board
  with STM8S208RB piggyback.
- NEW: Enhanced the kernel size report to cover more cases.
- NEW: Improvements to the documentation.
- OPT: Minor optimizations in the "compact" code path.

*** 1.5.2 ***
- FIX: Fixed wrong UART deinitialization sequence in LPC214x serial driver
  (bug 2953985)(backported in 1.4.1).
- FIX: Fixed wrong PINSEL2 offset into lpc214x.h (bug 2953981)(backported
  in 1.4.1).
- FIX: Fixed invalid UART-related macro in the LPC214x HAL (bug 2953195)
  (backported in 1.4.1).
- FIX: Impossible to enforce alignment greater of a pointer size for heap/core
  objects (bug 2952961).
- FIX: Wrong prototype in template file chcore.c (bug 2951529)(backported
  in 1.4.1).
- NEW: Added an experimental PowerPC port targeting the SPC563M/MPC563xM
  ST/Freescale automotive SOCs. The port passed the whole test suite but it
  will be developed further in next releases.
- NEW: Added core variant name macro in chcore.h and platform name in
  hal_lld.h, the info are printed in the test report and from the "info"
  shell command.
- NEW: Added BOARD_NAME macro to the various board.h files.
- NEW: Added a MemoryStream class under ./os/various.
- CHANGE: Removed an instance of a structure without name from test.h for
  increased portability of the test suite.
- NEW: Added Mac OS-X support for the simulator. The Linux simulator has
  been renamed to Posix simulator in order to include this change in a
  single project.
- NEW: New articles, sections and various improvements to the documentation.
- CHANGE: Renamed the kernel header files to match the names of their source
  files. The change was also required in order to make the names less
  "generic" and less likely to match names in external libraries.

*** 1.5.1 ***
- FIX: Fixed insufficient stack space for the idle thread in the ARMCM3 port
  when compiling without optimizations (bug 2946233)(backported in 1.4.1).
- FIX: Fixed wrong notes on function chThdResume() (bug 2943160)(backported
  in 1.4.1).
- NEW: Implemented the concept of thread references, this mechanism ensures
  that a dynamic thread's memory is not freed while some other thread still
  owns a reference to the thread. Static threads are not affected by the new
  mechanism. Two new APIs have been added: chThdAddRef() and chThdRelease().
- NEW: Now more than one thread can be waiting in chThdWait() as long they
  own a reference.
- NEW: Implemented a new threads registry subsystem, the registry allows to
  enumerate the active threads at runtime and/or from a debugger. This is
  a preparatory step for a dedicated ChibiOS/RT debugger.
- NEW: New chCoreFree() API that returns the core memory left.
- NEW: Added to the simulators shell demos two new commands: threads and mem,
  that show the currently active threads (using the new registry) and the
  memory allocators state.
- CHANGE: Doxygen tags cleanup in all the system code, comments are better
  looking now.
- CHANGE: Documentation improvements.

*** 1.5.0 ***
- FIX: Fixed missing dependencies check for CH_USE_DYNAMIC (bug 2942757)
  (backported in 1.4.1).
- FIX: Fixed swapped thread states descriptions (bug 2938445)(backported in
  1.4.1).
- FIX_ Fixed C99-style variable declaration (bug 2938444)(backported in 1.4.1).
- FIX: Fixed parameter check in sdStart() function (bug 2932922)(backported in
  1.4.0).
- FIX: Fixed missing platform.mk file in MSP430 port (bug 2933735)(backported
  in 1.4.0).
- CHANGE: Removed the unnamed union from the thread and heaps structures,
  some compilers do not support this non standard construct.
- CHANGE: Removed the empty structures from the streams/channels headers.
- CHANGE: Modified the thread-related constant macros to have a THD_ prefix.
- CHANGE: Modified NULL assignments to function pointers to use an explicit
  cast because some compilers issue warnings without the cast.
- OPT: Speed/size optimization to the events subsystem.
- OPT: Speed/size optimization to the mutexes subsystem.
- OPT: Speed/size optimization to the condvars subsystem.
- OPT: Speed/size optimization to the synchronous messages subsystem.
- NEW: Added support for STM32/HD/CL UART4 and UART5, thanks Egon for the
  patch.

*** 1.3.8 ***
- FIX: Fixed dequeuing in lifo_remove() function (bug 2928142).
- FIX: Fixed spurious character generation in MSP430 serial driver (bug
  2926838).
- NEW: Introduced an abstract streams interface BaseSequentialStream.
- NEW: Added timeout specification to the I/O queues read/write primitives.
- NEW: Added support for HD and CL STM32 devices in the vectors table.
- CHANGE: Modified the BaseChannel interface in order to make it a
  BaseSequentialStream descendant.
- CHANGE: Updated the serial driver model in order to expose the
  BaseSequentialStream methods.
- CHANGE: The behavior of the read/write primitives is changed, now the
  functions are synchronous and do not return until the specified number of
  bytes have been transferred or a timeout occurs, the old behavior can be
  replicated by specifying TIME_IMMEDIATE as timeout. Another difference is
  that specifying zero as bytes number is like specifying the largest size_t
  plus one, zero was an illegal value before.
- CHANGE: Simplified the LPC214x driver by removing the option to not use the
  FIFO preload feature. Setting LPC214x_UART_FIFO_PRELOAD to 1 results in
  the same behavior.
- Documentation fixes and improvements, testing strategy explained.
- Added article about waking up threads from IRQ handlers.

*** 1.3.7 ***
- FIX: Fixed duplicated definition of SPI_USE_MUTUAL_EXCLUSION (bug 2922495).
- FIX: Fixed coverage tool hanging during execution (bug 2921120).
- FIX: Fixed Linux simulator startup message (bug 2921012).
- FIX: Fixed section separators comments into the HAL-related files. Now all
  the files should use the same style.
- NEW: Improved HAL configuration file.
- NEW: Introduced a new, per-project, MCU configuration file mcuconf.h that
  contains all the drivers related settings.
- NEW: Readability improvements to the channels code.
- NEW: Serial driver model improvements, added states management and checks,
  added a new SD_NOISE_ERROR error event.
- NEW: Improvements and optimizations in the various serial driver
  implementations.
- Documentation fixes and improvements.

*** 1.3.6 ***
- FIX: Fixed missing STM32 PWM low level driver error in platform.mk by
  adding the driver files (bug 2913560).
- NEW: The Linux simulator now works again, also supports the serial
  drivers over TCP/IP and has a command line interface like the Win32
  simulator.
- NEW: STM32 PWM driver implementation.
- NEW: LPC214x SPI driver implementation (SSP only, polled mode, no IRQ), this
  driver replaces the old, not HAL compatible, SSP driver.
- NEW: LPC214x FatFS demo added, LPC214x minimal demo removed, LPC214x "normal"
  demo reduced to work like all the other generic demos.
- NEW: Added custom mode settings to the STM32 PAL driver:
  - PAL_MODE_STM32_ALTERNATE_PUSHPULL
  - PAL_MODE_STM32_ALTERNATE_OPENDRAIN
- NEW: Included all the board-specific files into a new directories structure
  under ./boards, this allows to not duplicate the board files into each demo.
- CHANGE: Changes to the PWM driver model, made it simpler.
- CHANGE: The STM32 device drivers now no more configure the I/O pins on
  initialization. Pins must be configured in board.h, the change was required
  in order to support the STM32 AFIO remapping feature.
- CHANGE: Removed the mmcsd.c driver, it is replaced by the generic MMC_SPI
  driver present into the HAL.
- CHANGE: Updated the GPL exception text in the documentation, this should be
  the final text for the stable version 1.4.x.

*** 1.3.5 ***
- FIX: Fixed problem with memory core allocator (bug 2912528).
- FIX: Fixed problem with CH_USE_MEMCORE option (bug 2912522).
- FIX: Fixed some problems in the MMC_SPI driver (bugs 2901084 and 2901172).
- NEW: Added a command line shell component, modified the Win32 simulator
  in order to use the new shell. The shell can be used under any architecture,
  it just requires an I/O channel. Custom commands can be easily added.
- NEW: Unified the initialization of the various drivers from a single HAL
  driver. The single drivers can be enabled or disabled from a HAL
  configuration file halconf.h.
- NEW: New CAN driver model.
- NEW: New PWM driver model.
- NEW: STM32 ADC driver implementation with DMA support.
- NEW: STM32 CAN driver implementation.
- NEW: Extended the support to all the SAM7X and SAM7S devices thanks to
  code contributed by Liam Staskawicz.
- NEW: Improvements to the AT91SAM7 startup code contributed by Liam.
- NEW: Added test report for MSP430 running from the external high speed
  oscillator.
- NEW: HAL stress test for STM32 added, the demo is located under
  ./testhal/STM32. The demo code also shows how to use the ADC, CAN and SPI
  drivers.
- CHANGE: Removed the MII from the standard drivers, now it is part of the
  AT91SAM7 support, the header mii.h is still part of the HAL.
- CHANGE: In the STM32 drivers now the DMA errors are handled by hook macros
  rather than by events. The default action is to halt the system but users
  are able to override this and define custom handling.
- CHANGE: In the Cortex-M3 port, modified the NVICEnableVector() function
  to make it clear pending interrupts.
- CHANGE: Minor changes to the ADC driver model.

*** 1.3.4 ***
- FIX: Fixed bug in STM32 PAL port driver (bug 2897636).
- FIX: Fixed problem with ARM-CM3 context switch when compiled at level
  -O0 (bug 2890382).
- FIX: Fixed wrong conditional in chschd.c (bug 2888836).
- FIX: Fixed wrong macro in chheap.c (bug 2888833).
- FIX: Fixed AIC initialization in AT91SAM7X support (bug 2888583).
- NEW: New SPI (master) driver model.
- NEW: SPI driver for STM32 implementing the new SPI driver model.
- NEW: New ADC (streaming capable) driver model.
- NEW: Generic MMC (over SPI) driver.
- NEW: Added a STM32 demo that integrates the MMC driver and the FatFs
  file system.
- NEW: Implemented I/O redirection on a serial driver into syscalls.c, now
  it is possible (but not recommended) to use printf()/scanf() etc. An usage
  example is in the new MMC/FatFs demo. Note the extra -D... into the Makefile.
- CHANGE: Moved the STM32 firmware library under ./ext, this way there is no
  need to duplicate it in each demo program.
- CHANGE: Moved the file stm32f10x.h from the demos to the platforms support
  directory.

*** 1.3.3 ***
- FIX: Fixed bug in the LPC2148 PAL driver (bug 2881380).
- FIX: Fixed bug in the AT91SAM7X PAL driver (bug 2879933).
- NEW: New MAC and MII driver models and implementations for the AT91SAM7X.
  Removed the old EMAC driver, updated the uIP WEB demo to use the new
  driver model.
- NEW: Added a simple lwIP demo (web server) for the AT91SAM7X.
- NEW: Centralized core memory manager. This simple allocator implements a
  sbrk()-like API: chCoreAlloc(). The other allocators now use this manager
  in order to get memory blocks.
- NEW: The heap allocator has been modified, now it is possible to have
  multiple heaps. The default heap gets its memory from the new core memory
  manager.
- NEW: Now memory pools can optionally get new objects automatically from the
  core memory manager.
- NEW: Added newlib interface file syscalls.c under ./os/various for use with
  the newest YAGARTO releases. The file provides bindings between the C
  runtime and the core memory manager.
- CHANGE: Because the changes in the allocators some API prototypes changed:
  chHeapAlloc(), chHeapStatus(), chThdCreateFromHeap().
- CHANGE: Because the changes in the allocators some configuration options
  changed and some were removed, see the new template chconf.h file.
- CHANGE: renamed ./demos/ARM7-AT91SAM7X-WEB-GCC in ARM7-AT91SAM7X-UIP-GCC.
- FIX: Added the most restrictive GCC warning option to the makefiles (-Wextra)
  and fixed some warnings in the code, mostly unused function parameters.

*** 1.3.2 ***
- FIX: Fixed GCC 4.4.x aliasing warnings (bug 2846336)(backported in stable
  branch).
- FIX: Modified linker scripts for GCC 4.4.x (bug 2846302)(backported in stable
  branch).
- FIX: Fixed the CH_OPTIMIZE_SPEED option in the CM3 port (bug 2846278)
  (backported in stable branch).
- FIX: Fixed GCC 4.4.x related problems in CM3 port (bug 2846162)(backported
  in stable branch).
- FIX: Fixed LPC214x UART problem (bug 2841088)(backported in stable branch).
- NEW: Improved the Cortex-M3 preemption code, now less interrupt-related
  jitter is generated and all benchmarks scores improved a bit.
- NEW: Added new APIs chSchDoYieldS() and chThdYield().
- MEW: Added new benchmark about RAM footprint.
- MEW: Added new benchmark about round robin rescheduling.
- NEW: Reorganized and rationalized the distribution tree and the
  documentation.
- NEW: Enhanced serial driver. The driver now supports speed change at runtime
  and low power stop mode.
- NEW: Serial driver removed from the kernel and added to the I/O subsystems
  together with PAL. Note that the related API names changed their prefix from
  chFDDxxx to sdxxx because of this.
- NEW: Added standard CMSIS 1.2.0 support to the Cortex-M3 port. The kernel
  does not use it (the OS uses its own optimized code) but the functionality
  is available to the applications. The CMSIS files were patched in order
  to correct some warnings.
- NEW: Updated the STM32 port to use the newest ST firmware library files
  (version 3.1.0). Note that now the ST drivers are included in the STM32
  demo directory.
- NEW: Improved makefiles and makefile fragments, now the paths are not fixed,
  the fragments can be included also from projects outside the ChibiOS/RT files
  structure by simply defining the variable ${CHIBIOS}.
- CHANGE: Removed the CH_USE_SERIAL_FULLDUPLEX configuration option because
  the serial driver is no more part of the kernel.
- CHANGE: Reorganized the PAL and Serial identifiers now IOPORT1..N and
  SD1..N rather than IOPORT_A..Z and COM1..N, some of the old names were
  conflicting with some AVR libraries.

*** 1.3.1 ***
- FIX: Removed mention of an obsolete option from the documentation (bug
  2799507).
- NEW: Abstract digital I/O ports driver (PAL), this driver defines a common
  interface for digital I/O operations, this should help to create more
  portable applications and, in general, make easier to work with ChibiOS/RT
  on multiple architectures.
- NEW: Port drivers for STM32, LPC214x, AT91SAM7X and MSP430, cleaned up the
  initialization code in board.c. All the demos now use PAL for I/O. AVR is
  not supported because its "sparse" registers layout, it would not be
  efficient enough for my taste.
- Modified the STM32 demo to use the bit definitions in the ST header file,
  removed the bit definitions in board.h and stm32_serial.h.
- Documentation section reorganization and fixes.
- Changed the STM32 demo stack sizes, it was incorrectly adjusted in version
  1.3.0 but it did not create problems (not a bug).

*** 1.3.0 ***
- FIX: Fixed regression in MinGW demo (bug 2745153)(backported in stable
  branch).
- FIX: Fixed problem with the timeout constant TIME_IMMEDIATE, added a
  specific test in the test suite (bug 2755170)(backported in stable branch).
- FIX: Fixed a problem in semaphores test case #2 (bug  2755195)(backported
  in stable branch).
- FIX: Removed unused list functions (bug 2755230)(backported in stable
  branch).
- FIX: Added license notice to several files (bug 2772160)(backported in
  stable branch).
- FIX: Found new instances of the obsolete function chSysGetTime() in the
  C++ wrapper and in the WEB demo (bug 2772237)(backported in stable branch).
- FIX: Fixed macro in test.h (bug 2781176)(backported in stable branch).
- FIX: Fixed sequence assertion in test.c (bug 2789377)(backported in stable
  branch).
- FIX: Fixed test_cpu_pulse() incorrect behavior (bug 2789383)(backported in
  stable branch).
- FIX: Fixed missing volatile modifier for p_time field in Thread structure
  (bug 2789501)(backported in stable branch).
- FIX: Fixed C99-style variable declarations (bug 2792919)(backported in
  stable branch).
- FIX: Fixed instance of obsolete CH_USE_TERMINATE option in the C++ wrapper
  (bug 2796065)(backported in stable branch).
- FIX: Insufficient stack allocated to the C++ LPC2148 demo (bug 2796069)
  (backported in stable branch).
- FIX: Fixed errors in events test case (bug 2796081)(backported in stable
  branch).
- NEW: Abstract I/O Channels mechanism introduced. This mechanism allows to
  access I/O resources through a standard interface and hides implementation
  details. The existing serial drivers were modified to offer a standard
  channel interface to the applications (the old APIs are retained as macros).
- NEW: The I/O queues code was improved, now there are 2 separate structures:
  InputQueue and OutputQueue. There are some changes in the queue APIs
  in order to make them more symmetrical and functional. Improved the queues
  documentation. Some of the changes were needed in order to support the new
  channels mechanism as a backend for queued serial drivers.
- NEW: Static initializers macros introduced for most kernel objects. The
  static initializers allow to not have to chXXXInit() any object and save some
  code space. The initialization functions are retained in order to allow
  initialization of dynamic objects and re-initializations.
- NEW: Added more test cases in order to improve the test suite code coverage
  (it was 74% in version 1.2.0, it is now close to 100%).
- NEW: Added test cases for the improved queues and serial drivers.
- NEW: Added a code coverage analysis application under ./tests/coverage.
- NEW: Added the test suite documentation to the general documentation.
- NEW: Added a new "naked" context switch benchmark that better defines the
  real context switch time, previous benchmarks introduced too much overhead
  to the measurement. The STM32 performs the context switch in under 1.48uS.
- NEW: Improved priority inheritance test cases.
- NEW: Added architecture name strings to the port code.
- NEW: Linux x86 simulator demo added. It is still work in progress.
- CHANGE: Removed the half duplex queues and half duplex serial drivers because
  it was never extensively tested. The code is still available but not as part
  of the kernel.
- CHANGE: Removed the chMsgSendWithEvent() function. It is rarely used and
  the functionality can be re-created with a compound atomic operation. Also
  removed the CH_USE_MESSAGES_EVENT configuration option.
- CHANGE: Modified the test suite assertions in order to save RAM on the AVR
  targets. The test suite now uses much less string space.
- CHANGE: Removed the CH_USE_SERIAL_HALFDUPLEX, CH_USE_QUEUES_TIMEOUT,
  CH_USE_QUEUES_HALFDUPLEX, CH_USE_SEMAPHORES_TIMEOUT configuration options.
- CHANGE: Made CH_DBG_THREADS_PROFILING default to TRUE in all demos because
  the changes to the function test_cpu_pulse().
- CHANGE: Increased main stack size to 1KiB for all the ARMx demos, 2KiB for
  the C++ LPC2148 demo. This should make things easier for unexperienced
  users.

*** 1.2.0 ***
- Added license exception text to the 1.2.0 branch.
- FIX: Fixed serious AVR regression (bug 2731578).
- FIX: Fixed build failure when CH_USE_MUTEXES=FALSE (bug 2730706).
- FIX: Removed reference to an obsolete function (bug 2731661).
- Full test cycle and test reports updated.
- Small fixes to the documentation.

*** 1.1.3unstable ***
- FIX: Fixed makefile in STM32 demo, this bug was reported fixed in
  version 1.1.2 but it was still there (bug 2686451).
- FIX: Fixed makefile in MSP430 demo (bug 2700690).
- FIX: Fixed thumb mode build error in AT91SAM7X demos (bug 2700695).

*** 1.1.2unstable ***
- FIX: Fixed priority inheritance problem with condvars (bug 2674756) and
  added a specific test case to the test suite (backported in stable branch).
- FIX: Fixed a problem in time ranges (bug 2680425)(backported in stable
  branch).
- FIX: Build error with option CH_DBG_FILL_THREADS (bug 2683965).
- FIX: Fixed a wrong parameter check in chVTSetI() and chThdSleep()
  (bug 2679155).
- FIX: Build error with options CH_USE_NESTED_LOCKS && !CH_OPTIMIZE_SPEED
  (bug 2678928).
- FIX: Removed unused chSysPuts() macro (bug 2672678).
- FIX: Renamed function chSysInTimeWindow() as chTimeIsWithin() and renamed
  the macro chSysGetTime() in chTimeNow(), the old names are still recognized
  but marked as deprecated (fixes the bug 2678953 but goes a bit further by
  introducing a new API category "Time").
- FIX: Fixed makefile problems in the AT91SAM7X256 and STM32 demos (bugs
  2686347 and 2686451).
- FIX: Fixed AT91SAM7X256 EMAC driver (bug 2686349).
- FIX: Fixed small some errors in the documentation (bug 2692510).
- OPT: Small optimization to the Cortex-M3 thread startup code, improved thread
  related performance scores and smaller code.
- OPT: Alternative, non-inlined and more compact, implementations for
  port_lock() and port_unlock() in the Cortex-M3 port when CH_OPTIMIZE_SPEED
  is FALSE.
- OPT: Improved ready list and priority ordered lists code, some space saved,
  better context switch performance.
- Modified the test thread function to return the global test result flag.
- Removed testcond.c|h and moved the test cases into testmtx.c. Mutexes and
  condvars have to be tested together.
- Added architecture diagram to the documentation.
- Removed from the documentation some references to long gone functions...

*** 1.1.1unstable ***
- FIX: Fixed a problem into the STACK_ALIGN() macro (backported in stable
  branch).
- FIX: Fixed a problem with a wrong declaration of the PLL structure in the
  file lpc214x.h (backported in stable branch).
- FIX: Fixed build problem with the C++ demo (bug 2687489).
- FIX: Removed EMAC driver from the AT91SAM7X256 demo makefile (bug 2686347).
- FIX: Removed C++ wrapper from the STM32 demo makefile (bug 2686451).
- FIX: Fixed a problem with some event APIs not showing in the documentation
  (backported in stable branch).
- FIX: Fixed wrong assertions in chThdWait() and chHeapFree() (backported in
  stable branch).
- FIX: Fixed @file tag in sam7x_serial.c (bug 2788573) (backported in stable
  branch).
- FIX: Fixed a small problem in the chcore.c template file.
- NEW: Mailboxes (asynchronous messages) subsystem and test cases added.
- NEW: Most APIs with a timeout specification now accept the constant
  TIME_IMMEDIATE (-1) that triggers an immediate timeout when trying to enter
  a sleep state.
- NEW: Mode flexible debug configuration options, removed the old CH_USE_DEBUG
  and CH_USE_TRACE. Replaced with CH_DBG_ENABLE_CHECKS, SCH_DBG_ENABLE_ASSERTS,
  CH_DBG_ENABLE_TRACE and CH_DBG_FILL_THREADS.
- NEW: Added a debug option CH_DBG_THREADS_PROFILING for threads profiling.
  A field into the Thread structure counts the consumed time. The information
  is not used into the kernel, it is meant for debugging.
- NEW: Added a debug option CH_DBG_ENABLE_STACK_CHECK for stack overflow
  checking. The check is not performed in the kernel but in the port code.
  Currently only the ARM7 and ARMCM3 ports implements it.
- NEW: Unified makefiles for ARM7, ARMCM3 MSP430 projects, the new makefiles
  share a common part making them easier to maintain. Also reorganized the
  demo-specific part of the makefile, now it is easier to configure and the
  option can be overridden from outside.
- CHANGE: Changed the chSemFastWaitS() macro in chSemFastWaitI() and
  chSemGetCounter() in chSemGetCounterI().
- CHANGE: Removed the port_puts() function from the port templates. It was not
  implemented on all ports.
- Improvements to the test suite, added a new level of indirection that allows
  to make tests depend on the configuration options without have to put #ifs
  into the test main module. New benchmarks about semaphores and mutexes.

*** 1.1.0unstable ***
- FIX: Modified the default value for the STM32 HSI setup it was 1, it should
  be 0x10 (backported in stable branch).
- FIX: Removed an obsolete constant (P_SUSPENDED) from thread.h (backported in
  stable branch).
- FIX: Removed unused field mp_grow in the MemoryPool structure (backported in
  stable branch).
- NEW: Added to the STM32 demo makefile an option to build ChibiOS/RT with the
  full STM32 FWLib 2.03. **NOTE**, except for the makefile option, the
  library is not used by the OS nor required (backported in stable branch).
- NEW: Better separation between the port code and the system APIs, now an
  architecture-specific "driver" contains all the port related code.
  Port functions/macros are no more directly exposed as APIs to the user code.
- NEW: Added a configuration option to enable nested system locks/unlocks.
- NEW: Improved the interrupt handlers related code. Now interrupts are
  handled in a very similar way in every architecture. See the "Concepts"
  section and the "Writing interrupt handlers under ChibiOS/RT" article in the
  documentation.
- NEW: Added the chEvtSignal() and chEvtSignalI() APIs that allows direct
  thread signaling, much more efficient that chEvtBroadcast() when the target
  is a known single thread.
- NEW: Added a configuration option that enables the priority enqueuing on
  semaphores. It is defaulted to off because usually semaphores are used for
  I/O related tasks without hard realtime requirements.
- NEW: Now the all the options in chconf.h and the various driver headers
  can be overridden externally, for example from within the Makefile.
  The options are no mode a simple define but a define with an assigned
  TRUE/FALSE value within an #ifndef block.
- NEW: Idle thread hook macro added to the configuration file.
- NEW: Changed the ARM7 and Cortex-M3 startup files, now the action when
  the main() function returns can be overridden by redefining the symbol
  MainExitHandler.
- OPT: Improved ARM7 thumb port code, thanks to some GCC tricks involving
  registers usage now the kernel is much smaller, faster and most OS APIs
  use less RAM in stack frames (note, this is an ARM7 thumb mode specific
  optimization).
- CHANGE: Now the API chThdSetPriority() returns the old priority instead
  of void.
- CHANGE: Modified the signature of the chMsgSendWithEvent() API, it now uses
  a more efficient event signaling method.
- CHANGE: Removed the field p_tid from the Thread structure and the related
  code, this improved the thread creation scores (~2%) and saves some RAM.
  The trace buffer field cse_tid is now populated with a simple hash of the
  thread pointer as thread identifier.
- CHANGE: Renamed the macros chSysIRQEnter() and chSysIRQExit() in
  CH_IRQ_PROLOGUE() and CH_IRQ_EPILOGUE() in order to make very clear that
  those are not functions but inlined code. Also introduced a new macro
  CH_IRQ_HANDLER that should be used when declaring an interrupt handler.
- CHANGE: Renamed several internal initialization functions by removing the
  "ch" prefix because could not be considered system APIs.
- Improved ARM7 and Cortex-M3 support, new configuration options.
- Introduced the concept of interrupt classes, see the documentation.
- Introduced the concept of system states, see the documentation.
- Huge improvements to the documentation.
- Articles and notes previously in the wiki now merged in the general
  documentation and updated, the wiki entries are obsolete and will be removed.
- New application notes and articles added.
- Added kernel size metrics to the test reports.
- Removed the inclusion graph from the documentation because the little
  info they add and the size of all the images. It is possible to configure
  Doxygen to have them again (and more graph types).

*** 1.0.0 ***
- License switch, added GPL exception, see exception.txt.
- Full test cycle and test reports updated.
- Renamed some occurrences of "Conditional Variable" in "Condition Variable" in
  the documentation.
- FIX: Fixed some images in the documentation because problems when seen in
  Internet Explorer.

*** 1.0.0rc3 ***
- FIX: Fixed a nasty regression to the timeout unified code that affected
  some APIs since version 0.5.3. See the bug tracker for more details.
  Added a test case about this.
- FIX: Removed the API chThdSuspend() there was a conceptual flaw and I want
  to think about the whole concept again before introducing something similar
  in future. Anyway, it is possible to replicate the functionality using
  chSchGoSleepS().
- Fixed typos here and there.
- Updated the states diagram in the documentation.

*** 1.0.0rc2 ***
- FIX: Removed unused variable "retaddr" from the Cortex-M3 port.
- FIX: The macro THD_WA_SIZE was defined wrongly in the file
  ./src/templates/chcore.h.
- Fixed some errors in the documentation.

*** 1.0.0rc1 ***
- NEW: Added new macros CH_KERNEL_VERSION set to "1.0.0rc1", CH_KERNEL_MAJOR
  set to 1, CH_KERNEL_MINOR set to 0, CH_KERNEL_PATCH set to 0.
  The macros will be updated to reflect the actual kernel version number.
- NEW: Made all the port-specific configuration settings externally
  configurable, see the documentation.
- FIX: Disabled the configuration option CH_USE_MESSAGES_PRIORITY from the
  MSP430 demo, the default for this option should be off.
- FIX: Fixed a bug that prevented the THREAD_EXT_FIELDS to be compiled into
  the Thread structure.
- FIX: Removed some references to deprecated APIs from the test suite.
- FIX: Set the INT_REQUIRED_STACK configuration value for the ARM7 port to a
  safer 0x10, it was previously 0 (correct but trimmed to specific compiler
  settings).
- FIX: Set the INT_REQUIRED_STACK configuration value for the AVR port to a
  safer 32.
- FIX: Fixed the MinGW demo in order to not use any deprecated construct.
- Removed deprecated threads APIs: chThdCreate() and chThdCreateFast().
- Removed deprecated events APIs: chEvtWait(), chEvtWaitTimeout(), chEvtSend(),
  chEvtSendI(), EventMask().
- Removed deprecated configuration feature CH_USE_EXIT_EVENT and the related
  API chThdGetExitEventSource(). The feature can be reimplemented in user code
  as shown by the MinGW demo.
- Removed deprecated macros: WorkingArea(), UserStackSize(), StackAlign().
- Added usage note into the readme of the MinGW demo.
- Added usage notes for programmers to the ARM7 port documentation about
  interrupt handlers.
- Port-specific settings added to the documentation.
- Added source browser to the documentation.
- Fixes and improvements through the documentation.

*** 0.8.3 ***
- NEW: Introduced new API chThdSleepS() as a macro, no real changes in the
  kernel code.
- FIX: The MinGW simulated demo now works again after breaking in 0.8.2
  because the changes to the macro names.
- FIX: Adjusted the test suite stack sizes for the MinGW simulated demo, now
  the demo passes all the tests.
- FIX: Added fflush(stdout) to the MinGW simulation code output in order to
  make the Eclipse console work correctly.
- FIX: Renamed the MinGW demo main source from demo.c to main.c in order to
  follow the pattern of all the other demos.
- FIX:  Added debug switches to the MinGW simulated demo, not it is possible to
  debug the demo (and the kernel) inside Eclipse without a physical board.
- Removed lots of old deprecated constructs from the MinGW simulated demo.
  There are still some, the demo will need some rework before version 1.0.0.
- Updated the C++ wrapper with the latest APIs changes and fixed some bugs.
- Small fixes to the documentation.

*** 0.8.2 ***
- FIX: Included the files that were missing from version 0.8.1 distribution.
- FIX: Duplicated sections in the documentation removed.
- FIX: Minor problem in Cortex-M3 and AVR ports when the kernel is compiled
  using G++.
- NEW: Added chPoolAllocI() and chPoolFreeI() APIs in order to allow the use
  of memory pools from interrupt handlers and timer callbacks.
- CHANGE: Simplified the code for chThdWait(), it is now both smaller and
  faster. Added an important usage note to the documentation of this API.
- CHANGE: The macros WorkingArea(), UserStackSize() and StackAlign() are now
  deprecated and will be removed in version 1.0.0. Use the new equivalents
  WORKING_AREA(), THD_WA_SIZE() and STACK_ALIGN() instead.
- CHANGE: Renamed the default idle thread function from _IdleThread() to
          _idle().
- Added to the LPC2148 and STM32 load scripts the options "ALIGN(16)
  SUBALIGN(16)" to the flash loading section in order to enforce the alignment
  for both the code and read only data. This is done in order to obtain more
  accurate timings from benchmarks, those families have 16 bytes
  prefetch buffers and are very sensitive to alignment changes.
  You can remove those options in order to save some flash space if accurate
  response time is not on top of your priorities, it mainly depends on your
  requirements.

*** 0.8.1 ***
- FIX: Fixed a regression in version 0.8.0, the configuration switch
  CH_USE_EVENTS_TIMEOUT was redefined as CH_USE_EVENT_TIMEOUT and this broke
  the code using events timeouts (the LPC2148 C++ demo).

*** 0.8.0 ***
- NEW: Added condvars mechanism on top of the mutexes subsystem.
- NEW: Improved events subsystems, now it is also possible to use it just as
  "event flags" without have to use event handler callbacks.
  Some new APIs were introduced:
  * chEvtWaitOne()      - Wait for a single event.
  * chEvtWaitAny()      - Wait with OR condition.
  * chEvtWaitAll()      - Wait with AND condition.
  * chEvtDispatch()     - Invokes the event handlers associated to a mask.
  * chEvtPend()         - Quickly self-pends some events.
  * chEvtRegisterMask() - Registers a set of flags on a single source.
  * EVENT_MASK()        - Replaces the old EventMask() macro.
  All the "wait"-type APIs have a timeout-capable variant.
- CHANGE: The old EventMask(), chEvtWait() and chEvtWaitTimeout() APIs are
  now deprecated and will be removed in version 1.0.0.
- CHANGE: Modified chDbgAssert() to syntax check the condition even when the
  CH_USE_DEBUG is disabled, it produces no code but allows to check the
  optional code without have to compile twice.
- FIX: Fixed a warning generated by the chEvtIsListening() macro.
- Added new test cases to the test suite about condvars and the new events
  APIs.
- Added a new benchmark to the test suite (timers set/reset performance).
- Renamed the macro fifo_init() to queue_init() because it is used to init
  both FIFO queues and priority queues.
- Fixes and improvements to the documentation.
- Cleaned demo applications of old events code.

*** 0.7.3 ***
- FIX: Fixed a bug in chThdSleepUntil(), this API is no more a macro now.
- NEW: New chThdSleepSeconds(), chThdSleepMilliseconds() and
  chThdSleepMicroseconds() utility macros.
- CHANGE: Zero is no more a valid time specification for the chVTSetI() API.
- CHANGE: Removed the files chsleep.c and sleep.h.
- CHANGE: Renamed the files chdelta.c and delta.h to chvt.c and vt.h. All the
  system time related functions and macros are now there.
- CHANGE: Renamed the structure DeltaList to VTList, it includes the system
  time counter too now.
- CHANGE: Removed the CH_USE_SYSTEMTIME and CH_USE_VIRTUAL_TIMER configuration
  options in order to make the chconf.h file simpler. The related subsystems
  are almost always required and are now always included.
- Small optimization to the MSP430 serial driver.
- Improvements to the test code, now a failed assert terminates the test case.
- Added dependency informations handling to the MSP430 demo Makefile.
- Removed the performance spreadsheet (it was *very* old) and added a
  directory containing the test reports ./docs/reports. Each report shows the
  results from the latest test run on each target.
- Small fixes to the documentation.

*** 0.7.2 ***
- NEW: Added a serial driver to the MSP430 port, the MSP430 port now has been
  tested on hardware and passes the test suite.
- NEW: Added to the MSP demo program the option to run from the internal DCO
  or from an external xtal. The default is the internal DCO.
- NEW: Added macros to convert from seconds, milliseconds and microseconds to
  system ticks. This improves application code portability among different
  ports.
- CHANGE: Modified the test suite to use the new time conversion macros.
- CHANGE: Modified the CM3 startup file in order to implement an early
  initialization phase: hwinit0, the late initialization phase is now named
  hwinit1. The demo now initializes the PLL before initializing the BSS and
  DATA segments, this greatly optimizes the system start up time.
- NEW: Unified ARM7 startup file, it is shared by the LPC and SAM7 demo
  projects. The new startup file implements early and late initialization
  phases as described above for the CM3 startup file.
  The architecture specific vector tables are now encapsulated into the
  vectors.s files.
- Modified the STM32 demo makefile to use the latest YAGARTO toolchain as
  default (arm-elf-gcc).
- Documentation improvements, added collaboration diagrams and call graphs.
  Added a documentation-related readme under ./docs.

*** 0.7.1 ***
- NEW: New chThdInit() and chThdCreateStatic() APIs now replace the old
  chThdCreate() and chThdCreateFast() that are thus marked as deprecated.
  The new APIs use one less parameter and are faster.
- NEW: New dynamic chThdCreateFromHeap() and chthdCreateFromMemoryPool() APIs.
  The dynamic APIs are only included if the CH_USE_DYNAMIC option is specified
  into the project configuration file.
- NEW: Added an THREAD_EXT_EXIT macro in chconf.h to add finalization code to
  the chThdExit() API.
- CHANGE: chThdCreateFast() is now a macro that uses chThdCreateStatic().
- CHANGE: chThdWait() now releases the memory allocated by
  chThdCreateFromHeap() and chthdCreateFromMemoryPool(). Threads created
  through the static APIs are not affected thus the behavior is backward
  compatible.
- CHANGE: Modified the chThdResume() API to return the resumed thread pointer
  instead of void. This allowed few optimization into the threads creation
  code.
- CHANGE: The chThdGetExitEventSource() API and the CH_USE_EXIT_EVENT
  configuration option and the are now deprecated. Use the THREAD_EXT_EXIT
  finalization macro in order to implement a similar functionality if needed.
- FIX: The chThdCreate() had a regression in 0.7.0, the mode parameter was
  ignored.
- FIX: Removed duplicated call to chHeapInit() into chSysInit().
- FIX: Fixed a syntax error in chheap.c triggered by the CH_USE_DEBUG option.
- Added new test cases to the test suite for the new dynamic APIs.
- Documentation fixes.

*** 0.7.0 ***
- NEW: Memory Heap Allocator functionality added. The allocator implements a
  first-fit strategy but there is an option that allow it to wrap the compiler
  provided malloc() that may implement a different strategy. The heap
  allocator is thread-safe and can use both a mutex or a semaphore as
  internal synchronization primitive.
- NEW: Memory Pools functionality added, this mechanism allows constant-time
  allocation/freeing of constant-size objects. It can be used to dynamically
  allocate kernel objects like Semaphores, Mutexes, Threads etc fully in real
  time, of course it is also possible to manage application-defined objects.
  The pool allocator is thread-safe.
  It is worth remembering that the kernel is still entirely static, it does
  not use the allocation services internally, it is up to the application
  code to use the allocators in order to use dynamic system objects.
  Both the allocators can be disabled and removed from the memory image.
- NEW: Added option macros in chconf.h to add custom fields and initialization
  code to the Thread structure.
- FIX: Corrected the wrong definition of the chThdResumeI() macro.
- FIX: The API chSemWaitTimeout() was missing in the documentation.
- CHANGE: Modified the chMtxUnlock() and chMtxUnlockS() APIs to return the
  pointer to the released mutex instead of void.
- CHANGE: Now the chThdResume() API asserts that the thread is in PRSUSPEND
  state rather than test it.
- CHANGE: Removed the CH_USE_TERMINATE, CH_USE_SLEEP, CH_USE_SUSPEND and
  CH_USE_RESUME configuration options in order to make the chconf.h file
  simpler. The related functions are very small and almost always required.
- CHANGE: The P_MSGBYPRIO thread option has been removed, now the threads
  always serve messages in priority order if the CH_USE_MESSAGES_PRIORITY
  configuration option is active.
- Added new test cases to the test suite.

*** 0.6.10 ***
- FIX: Fixed a case-sensitiveness error in lpc214x_ssp.c, it affected only
  linux/unix users.
- FIX: Fixed a regression introduced in version 0.6.9, the queues benchmark
  test case was missing from the tests list.
- NEW: Added an option to the ARM7 ports, by specifying -DREENTRANT_LOCKS in
  the makefile options makes the chSysLock() and chSysUnlock() become
  reentrant. The code becomes a bit larger and slower, use it only if your
  application really needs to invoke system API under lock.
- NEW: Added an option to the ARM7 and CM3 makefiles to strip any unused code
  and data from the binary file (the default is on).

*** 0.6.9 ***
- NEW: Added an option to exclude the support for the round robin scheduling,
  this can save some extra program space and makes the context switch a bit
  faster if the feature is not required. Threads at the same priority level
  are still supported when the feature is disabled but the scheduling among
  them becomes cooperative.
- OPT: Improved reschedule time by reordering the sequence of operations,
  now during enqueuing the ready list contains one less element. This change
  also slightly improves the interrupt latency.
- OPT: Optimization to the chSemReset(), reversed the order of dequeuing.
- FIX: Fixed a bug in the chThdSetPriority() API.
- FIX: Modified the structure names into nvic.h in order to not make them
  collide with external libraries.
- Added a benchmark to the test suit that measures the mass reschedule
  performance.
- Added a test_terminate_threads() function to the test framework.
- Made the Cortex-M3 port preemption code more readable.
- Added a ENABLE_WFI_IDLE option to the chcore.h file in the Cortex-M3 port,
  setting this option to 1 enables the kernel to enter a low power mode when
  executing the idle thread. Be careful however, this option can be not
  compatible with some JTAG probes, it is better to enable it only on final
  builds and not when debugging.

*** 0.6.8 ***
- FIX: Fixed a bug in the priority inheritance mechanism, the bug was only a
  problems when the CH_USE_MESSAGES_PRIORITY was enabled, this option is
  disabled by default in ChibiOS/RT so it should not affect any user.
- CHANGE: The function chEvtSend() and chEvtSendI() are now renamed in
  chEvtBroadcast() and chEvtBroadcastI(), the old names are still available
  but are deprecated.
- Made the default BASEPRI levels (CM3 port) configurable into chcore.h.
- Many improvements to the documentation.
- All the fixes and changes in this release were suggested/submitted by
  Leon Woestenberg (thank you).

*** 0.6.7 ***
- NEW: New chThdCreateFast() API, it is a simplified form of chThdCreate()
  that allows even faster threads creation. The new API does not support
  the "mode" and "arg" parameters (still available in the old API).
- OPT: Removed an unrequired initialization and made other small optimizations
  to the chThdCreate().
- OPT: Improvements to the test framework, now a virtual timer is used instead
  of software loops into the benchmarks in order to have more stable results.
- New benchmark added to the test suite.
- Added the C++ wrapper entries to the documentation.
- Fixed the documentation entry for the chThdCreate() API.
- Removed redundant ifdefs from the ch.h header.

*** 0.6.6 ***
- NEW: Improved test suite, now the suite is divided in modules and the code
  is much easier to understand. The new framework simplifies the inclusion of
  new test cases and makes possible to verify the exact sequence and the
  timing of test events.
- NEW: New API chSysInTimeWindow() that checks if the current system time is
  within the specified time window.
- FIX: Mutex test #1 in the test suite corrected, it failed to... fail.
- FIX: Fixed a problem in the STM32 port USART1 driver.
- FIX: Fixed a problem in the MMC/SD driver in the LPC2148 demo.
- Added the definitions for packed structures to the chtypes.h files.
- Improvements to the makefiles, now each source group has its own .mk include
  file. Now it is no more required to rewrite everything in each makefile.

*** 0.6.5 ***
- NEW: Web server demo for the AT91SAM7X256, the demo integrates the uIP
  stack and its demo applications.
- NEW: EMAC driver added to the AT91SAM7X port.
- FIX: Small fix to the ARM7 startup files. It used a short jump in the reset
  vector and that could fail in some memory configurations.
- Documentation improvements.

*** 0.6.4 ***
- NEW: MSP430 port, the port code compiles correctly but it is not tested yet.
  The port requires the MSPGCC toolchain.
- NEW: Added a CH_ARCHITECTURE_xxx define to the various chcore.h files, it
  allows to write port-dependent code.
- NEW: Added to the documentation the technical notes about the currently
  supported ports.
- FIX: In the ARM7 and ARMCM3 ports chanced the bool_t base type from int8_t
  to int32_t, this produces a bit faster and smaller code.
  It is nowhere required the bool_t type to be one byte sized.
- FIX: Small fixes to the template files, there were some leftovers of the old
  type names.
- FIX: Modified the ARM demos makefiles in order to make them more compatible
  with GCC 4.3.0, it seems the new GCC assumes -mthumb-interworking and
  -mabi=apcs by default, at least the builds I tested did so, now the makefiles
  explicitly assert -mno-thumb-interworking and -mabi=apcs-gnu in order to
  produce better code.
- Added an Ethernet driver for AT91SAM7X EMAC, not complete yet, it will be
  required by a uIP web server demo under ChibiOS/RT coming in some next
  release.

*** 0.6.3 ***
- NEW: ARM Cortex-M3 port completed. The demo program targets the STM32F103
  chip from ST Microelectronics on an Olimex STM32-P103 board.
- FIX: Fixed a minor error in ./ports/ARM7-LPC214x/vic.h, it should not affect
  anything.
- FIX: Minor fix: in chThdCreate() a working area size equal to
  UserStackSize(0) was asserted as an error when in debug mode. It is now
  allowed.
- FIX: Increased the stack size for the threads in the test suite to 128 bytes
  because THUMB/THUMB2 modes seem to use a lot more stack than ARM mode.

*** 0.6.2 ***
- NEW: Added C++ wrapper around the ChibiOS/RT core APIs, now it is possible
  to use the OS in a fully object oriented application. The wrapper offers
  classes that encapsulate threads, semaphores, mutexes, timers etc. Normal C
  APIs are still accessible from C++ code as usual.
- NEW: Added a new LPC2148 demo using the new C++ wrapper, it is a good
  example of C++ used for an embedded application. The demo does not use RTTI
  nor standard libraries so the resulting code is very compact.
- Enhanced the chSemSignalWait() API to return the wakeup message just like
  the other "Wait" semaphore functions do.
- Fixed a minor problem in the ARM7 port, the extctx structure definition was
  missing one field, the effect was to allocate stacks 4 bytes shorter than
  the declared size.
- Fixed a compile time error into the chThdSleepUntil() macro.
- Fixes in various headers to make some macros compatible with both C and C++.
- Fixed a regression in the LPC214x minimal demo that broke interrupt
  handling.
- Some fixes to the doxygen documentation.
- More work done on the ARM-CM3 port but it is still not complete.

*** 0.6.1 ***
- Removed some redundant checks from the scheduler code: improved threads
  flyback time, reduced interrupts service time.
- Nice scheduler speed improvement obtained by removing the 2nd parameter to
  the chSchReadyI() API and manually assigning the message value only where
  is really needed (very few points in the code).
- More space savings and speed improvements obtained by removing the
  -fno-strict-aliasing option from the makefiles, now the kernel compiles
  without any warning even without this option.
- Removed the -falign-functions=16 option from the AT91SAM7X demo makefiles,
  the Atmel chip does not require it, the option is still present on the
  LPC21xx demos. This saves significant program space.
- Started work on ARM Cortex-M3 architecture. The target chip is the STM32F103
  on a Olimex STM32-P103 board.
- Added a threads state diagram to the documentation.
- Various fixes to the doxygen documentation.

*** 0.6.0 ***
- Code refactory, all the old sized-integer definitions like LONG32, UWORD16
  etc are now replaced by the proper definitions provided by the compiler
  into stdint.h.
- Code refactory, the previous system types style using a t_ in front of the
  name has been replaced with the standard trailing _t. The system now uses
  the size_t type defined into stddef.h. Some type names were modified in
  order to not match commonly used type names.
- The above changes have an impact on some API prototypes but we can't help
  it, the changes were required because the type names were a concern for
  some users.
- Implemented a serial driver in the AVR port.
- Implemented a simple HD44780 LCD driver into the AVRmega128 demo.
- Reworked the AVR AT90CAN128 port to share the common AVR code.
- Modified the test suite to be compatible with 8 bit micros.
- MSVC demo dropped, it is still possible to use the MinGW demo as simulator
  in Win32.
- Fixed a minor error in sam7x_serial.h and lpc214x_serial.h.
- The kernel is *unchanged* compared to version 0.5.3 except for the type
  names but the change is important enough to make this a recommended update.

*** 0.5.5 ***
- Added an AVRmega128 port. The previous AT90CANx port is still present but
  it will be redone after the AVRmega128 port is complete because it will
  share most of it. The demo is very simple, it will be expanded in next
  releases.
- Reorganized the code of the two ARM7 ports, now all the common ARM7 code
  is in ./ports/ARM7. This will make maintenance and new ARM7 ports much much
  easier.
- Simplified the directory structure under ./ports.
- Added to the readme a section with our future plans/ideas.
- The kernel is *unchanged* compared to version 0.5.3, just the new port and
  the new demo were added.

*** 0.5.4 ***
- Port for Atmel AT91SAM7X256 introduced, the port should be usable also on
  SAM7S and SAM7XC but no tests were performed. Other SAM7 processors should
  also be usable with limited changes.
  The demo currently just performs basic operations, will be enhanced in next
  ChibiOS/RT releases, see the demo readme.txt file.
- Small fix to the thumb mode IRQ code on the LPC214x port, removed some extra
  code.
- The kernel is *unchanged* compared to version 0.5.3, just the new port and
  the new demo were added.

*** 0.5.3 ***
- Removed the chMsgSendTimeout() API, it was conceptually flawed because,
  after sending a message, the sender *has* to wait for the answer or
  the next sender in queue would receive it instead (the messages server has
  no way to know that the sender is gone because a timeout).
  A workaround would make the messages subsystem much heavier and this is
  not acceptable.
- Removed the test case for chMsgSendTimeout() from the test suite.
- Space saved by reorganizing the timeout code into a single scheduler
  function chSchGoSleepTimeoutS().
- Space optimizations in the semaphores code.
- The API chThdSleepUntil() become a macro saving some more code space.
- Because all the above changes the kernel code (ARM) is over 700 bytes
  smaller.

*** 0.5.2 ***
- Fixed a small problem in the main header file ch.h.
- Small reordering in the fields of the Thread structure in order to optimize
  the space when messages are not used.

*** 0.5.1 ***
- NEW: Priority enqueing for messages can be optionally enabled by specifying
  the P_MSGBYPRIO option when creating a message server thread.
  This change allows the implementation of a priority ceiling protocol into
  message servers threads. Threads serving messages by priority and threads
  serving messages in FIFO order can exist at the same time in the system.
  This feature can be enabled or disabled by toggling the option
  CH_USE_MESSAGES_PRIORITY into the chconf.h file (disabled by default, old
  behavior).
  Note: This option brings a small overhead when sending a message regardless
  if in FIFO or priority order, if you don't need priority ordering for your
  messages it is better to keep the feature disabled in chconf.h.
- Added to the ARM demos load scripts the capability to load code in RAM
  instead flash, the function must be marked as:
    __attribute__((section(".ramtext")))
  The option -mlong-calls should be specified in the makefile too or the
  function declared with the "long-call" attribute.
- Fixed the MSVC demo project files.
- Fixed some syntax incompatibilities between GCC and MSVC into chmtx.c.

*** 0.5.0 ***
- NEW: Mutexes, the new mechanism provides a complete implementation of the
  "priority inheritance" algorithm as a tool for work around the priority
  inversion problem.
  The Mutexes are not meant to replace the Semaphores that still are the best
  synchronization mechanism between interrupt handlers and high level
  code, something that Mutexes cannot do.
  Soon an article will be added to the wiki describing pro and cons of the
  various mechanisms and the correct use cases.
- RT Semaphores subsystem removed, the Mutexes implements a better solution
  for the same problem.
- Fixed a bug in the round robin scheduling mode, see the bug tracker for
  details and a fix for previous versions.
- More performance improvements to the scheduler. The ready list insertion
  sequence is now reversed, it is scanned starting from the highest priority
  end. This has an important side effect into the chSchWakeupS() that makes
  most of the ready list insertions happen in constant time (extraction is
  done always in constant time).
  The worst case is always proportional to the number of threads in the ready
  list but the normal case is much more often constant than linear. See the
  new benchmarks added to the test suite.
- Added mutexes test cases and new benchmarks to the test suite.
- Modified the test suite in order to have each test case to have the same
  alignment enforced on functions. This is done to reduce MAM/Cache alignment
  effects on the measurement.
- IRQ entry/exit code is now encapsulated into two new macros, see chcore.h
  for details.
- All the asm code previously in chcore2.s is now inline asm code in chcore.c
  (ARM port), chcore2.s removed.
- Moved all the board specific definitions/code into two new files: board.c
  and board.h. Moved all the files no more board-dependent under ports/
  (ARM port).
- Improved the kernel performance in THUMB mode by better exploiting MAM
  locality in some critical functions. The context switch benchmark shows
  5% improved speed.

*** 0.4.5 ***
- Moved the serial IRQ handlers and VIC vectors initialization inside the
  serial drivers. Now the serial-related code is all inside the driver.
- Moved all the other interrupt handlers from chcore2.s into chcore.c as
  inline asm code. The interrupt code now is faster because one less call
  level.
- Fixed a minor problem in chSysHalt() now it disables FIQ too and makes sure
  to keep the processor in the state it had when it was halted.
  Note: This is not a kernel bug but something specific with the ARM port, the
        other ports are not affected.
- Fixed the macro chThdResumeI(), it had a regression.

*** 0.4.4 ***
- Fixed a very important bug in the preemption ARM code, important enough to
  make this update *mandatory*.
  Note: This is not a kernel bug but something specific with the ARM port, the
        other ports are not affected.
- Fixed a nasty bug in the pure THUMB mode threads trampoline code (chcore2.s,
  threadstart), it failed on THUMB threads returning with a "bx" instruction.
  The bug did not affect ARM mode or THUMB with interworking mode.
  Note: This is not a kernel bug but something specific with the ARM port, the
        other ports are not affected.
- Fixed a bug in chIQGetTimeout(), interrupts were not re-enabled when exiting
  the function because a timeout. The problem affected that API only.
- Fixed a potential problem in chSysInit(), it should not affect any past
  application.
- Added a chDbgAssert() API to the debug subsystem.
- Cleaned up the kernel source code using chDbgAssert() instead of a lot of
  "#ifdef CH_USE_DEBUG", it is much more readable now.
- Now the threads working area is filled with a 0x55 when in debug mode, this
  will make easier to track stack usage using a JTAG probe.
- Added an I/O Queues benchmark to the test suite.
- Removed the chSchTimerHandlerI() routine from chschd.c and moved it into
  chinit.c renaming it chSysTimerHandlerI() because it is not part of the
  scheduler.

*** 0.4.3 ***
- Size optimization in the events code, now the chEvtWait() reuses the
  chEvtWaitTimeout() code if it is enabled.
- Size optimization in the semaphores code, now the chSemWaitTimeout() just
  invokes the chSemWaitTimeoutS() inside its system mutex zone. Same thing
  done with chSemWait() and chSemWaitS().
- Size optimization in the queues code.
- Modified the return type of chSemWait() and chSemWaitS() from void to t_msg,
  this allows to understand if the semaphore was signaled or reset without
  have to access the Thread structure.
- Added a threads create/exit/wait benchmark to the test suite, the system
  is capable of 81712 threads started/terminated per second on the reference
  LPC2148 board. The figure is inclusive of two context switch operations
  for each thread.
- Minor improvement in the LPC214x serial driver, unneeded events were
  generated in some rare cases.
- Fixed a chSysInit() documentation error.
- Fixed a chEvtWaitTimeout() documentation error.
- Added a new debug switch: CH_USE_TRACE, previously the trace functionality
  was associated to the CH_USE_DEBUG switch.

*** 0.4.2 ***
- Added a minimal ARM7-LPC demo, you can use this one as template in order to
  create your application. It is easier to add subsystems back to the small
  demo than remove stuff from the large one.
- Introduced support for "pure" THUMB mode, it is activated when all the
  source files are compiled in THUMB mode, the option -mthumb-interworking is
  not used in this scenario and this greatly improves both code size and
  speed.
  It is recommended to either use ARM mode or THUMB mode and not mix them
  unless you know exactly what you are doing. Mixing modes is still supported
  anyway.
- More optimizations in the scheduler, updated the performance spreadsheet.
- Fixed a problem with the thread working area declarations, the alignment to
  4 bytes boundary was not enforced. Now it is defined a new macro
  WorkingArea(name, length) that takes care of both the allocation and the
  alignment.
  Example:
    static WorkingArea(waThread1, 32);
  It is expanded as:
    ULONG32 waThread1[UserStackSpace(32) >> 2];
  Now the demos use the new declaration style.
- Fixed a small problem in sleep functions introduced in 0.4.1.

*** 0.4.1 ***
- Modified the initialization code in order to have a dedicated idle thread in
  the system, now the main() function behaves like a normal thread after
  executing chSysInit() and can use all the ChibiOS/RT APIs (it was required
  to run the idle loop in previous versions).
  Now it is also possible to use ChibiOS/RT with a single main() thread and
  just use it for the I/O capabilities, Virtual Timers and events. Now you
  don't have to use multiple threads if you don't really need to.
- Added a spreadsheet in the documentation that describes the advantages
  and disadvantages of the various optimization options (both GCC options and
  ChibiOS/RT options), very interesting read IMO.
- The GCC option -falign-functions=16 is now default in the Makefile, it is
  required because of the MAM unit into the LPC chips, without this option
  the code performance is less predictable and can change of some % points
  depending on how the code is aligned in the flash memory, unpredictability
  is bad for a RTOS. This option however increases the code size slightly
  because of the alignment gaps.
- Fine tuning in the scheduler code for improved performance, deeper
  inlining and other small changes, about 5% better scheduler performance.
- Increased the default system-mode stack size from 128 to 256 bytes because
  some optimizations and the THUMB mode seem to eat more stack space.
- Included a Makefile in the LPC2148 demo that builds in THUMB mode.
- Const-ified a parameter in the chEvtWait() and chEvtWaitTimeout() APIs.
- Removed the CPU register clearing on thread start, it was not really useful,
  it is better to maximize performance instead.
- Cleaned up the ARM port code. Now it is easier to understand.
- Cleaned up the LPC2148 demo in main.c, it is now well documented and
  explains everything, I assumed too much stuff to be "obvious".

*** 0.4.0 ***
- NEW, added a benchmark functionality to the test suite. The benchmark
  measures the kernel throughput as messages per second and context switches
  per second. The benchmark will be useful for fine tuning the compiler
  options and the kernel itself.
- NEW, implemented a debug subsystem, it supports debug messages and a context
  switch circular trace buffer. The debug code can be enabled/disabled by
  using the CH_USE_DEBUG in chconf.h.
  The trace buffer is meant to be fetched and decoded by an external tool
  (coming soon, it can be accessed using JTAG in the meanwhile).
- Added new API chThdGetPriority() as a macro.
- Implemented panic messages when CH_USE_DEBUG is enabled.
- Added a thread identifier field to the Thread structure, it is used only
  for debug.
- Global variable stime modified as volatile.
- API chSysGetTime() reimplemented as a macro.
- Fixed a regression with the CH_CURRP_REGISTER_CACHE option.
- Fixed a problem in the LPC2148 interrupt handling code, a spurious
  interrupts fix recommended on the NXP data sheet proved to be a very bad
  idea and not about real spurious interrupts also...
- Fixed an harmless warning message in buzzer.c.

*** 0.3.6 ***
- Added SSP (SPI1) and ext.interrupts definitions to the lpc214x.h file.
- Added SSP driver for the LPC2148.
- Added experimental MMC/SD block driver to the LPC2148 demo in order to
  support file systems. The driver features also events generation on card
  insert/remove, hot plugging supported.
- Added missing chThdSuspend() declaration in threads.h.

*** 0.3.5 ***
- Space optimization in events code.
- Changed the behavior of chEvtWaitTimeout() when the timeout parameter is
  set to zero, now it is consistent with all the other syscalls that have a
  timeout option.
- Reorganized all the kernel inline definitions into a single file (inline.h).
- Fixed a minor problem in the interrupt initialization code for the LPC214x
  demo, regrouped the VIC-specific code into vic.c/vic.h.
- Fixed a bug into the LPC2148 serial driver (limited to the serial port 2).
- Implemented HW transmit FIFO preloading in the LPC2148 serial driver in
  order to minimize the number of interrupts generated, it is possible to
  disable the feature and return to the old code which is a bit smaller, see
  the configuration parameters in ./ARM7-LPC214x/GCC/lpc214x_serial.h.
- Some more work done on the AVR port, it is almost complete but not tested
  yet because my JTAG probe broke...

*** 0.3.4 ***
- Fixed a problem in chVTSetI().
- New API, chVTIsArmedI(), it is a macro in delta.h.
- New API, chThdResumeI(), it is a macro in threads.h. This function is just
  an alias for chSchReadyI() but makes the code more readable.
- New API, chThdSuspend(). New switch CH_USE_SUSPEND added to chconf.h.

*** 0.3.3 ***
- Modified the chVTSetI(), now for the "time" parameter can have value zero
  with meaning "infinite". This allows all the APIs with timeout parameters
  to be invoked with no timeout.
- Fixes in the documentation.
- Renamed some APIs in the "Sch" group to have an S suffix instead of I.

*** 0.3.2 ***
- Modified the chSysInit() to give the idle thread absolute priority, the
  priority is then lowered to the minimum value into the chSysPause(). This
  is done in order to ensure that the initializations performed into the
  main() procedure are finished before any thread starts.
- Added chThdSetPriority() new API.
- Added a generic events generator timer module to the library code.
- Modified the ARM7-LPC214x-GCC demo to show the use of the event timer.
- Added the "#ifdef __cplusplus" stuff to the header files.
- Removed an obsolete definition in ./src/templates/chtypes.h.

*** 0.3.1 ***
- Test program added to the demos. Telnet the MinGW and MSVS demos and type
  "test" at the "ch>" prompt. On the LPC214x demo the test is activated by
  pressing both the board buttons. The test performs tests on the ChibiOS/RT
  functionalities.
  The test code is also a good example of APIs usage and ChibiOS/RT behavior.
- Fixed bug in chEvtWaitTimeout(), the timeout code performed an useless
  dequeue operation.
- Fixed a bug in chSemWaitTimeoutS() and chSemWaitTimeout(), the semaphore
  counter was not atomically updated on a timeout condition.
- Fixed bug on RT semaphores, the priority queuing was broken.
- Fixed a bug in the MinGW demo, the chThdExit() code was not correctly
  reported to the thread waiting in chThdWait().
- Fixed a function declaration in semaphores.h.
- Lists code moved into chlists.c from various other places optimized and
  reorganized.
- The list of the threads waiting in chThdWait() is now a single link list,
  this saves some space.
- Cleaned the template files code, the files contained some obsolete
  declarations.
- Code optimization in chSemWaitTimeoutS(), chSemWaitTimeout() and
  chSemSignalWait().
- Code optimization in chEvtSend().
- Code optimization in chVTDoTickI().
- Added a Semaphore pointer to the Thread structure, this allows to know on
  which semaphore a thread is waiting on. It takes no space because it is
  located in the union inside the Thread structure. This also allowed a minor
  optimization inside chSemWaitTimeout() and chSemWaitTimeoutS().
- Changed the priority type to unsigned in order to make it compatible
  with a byte value, this is very important for 8 bits architectures.
- Modified the MinGW and MSVS demos to use 1ms ticks instead of 10ms as
  before.

*** 0.3.0 ***
- ChibiOS/RT goes beta.
- Diet for the threads code, some simple APIs become macros.
- Thread Local Storage implemented as a single API: chThdLS().
  The API simply returns a pointer into the thread working area, see the
  documentation on the web site.
- Moved some documentation and images from the web site into the Doxygen
  generated HTMLs.

*** 0.2.1 ***
- Optimizations in the RT semaphores subsystem. The support for this
  subsystem should still be considered experimental and further changes may
  happen in future versions.
- Bug fix in the virtual timers handling code, now the timers can be re-armed
  from within the callback code in order to create periodic virtual timers.
- Modified the t_prio type in the demos to be 32bits wide instead of 16bits,
  this results in a better code in critical sections of the kernel.

*** 0.2.0 ***
- Introduced support for ARM in thumb mode.
- Optimized context switching when thumb-interworking is not required, one
  less instruction.
- Minor fixes to the ARM demo.

*** 0.1.1 ***
- Some fixes into the documentation
- Renamed the makefiles to Makefile, upper case M.

*** 0.1.0 ***
- First alpha release
GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: <program> Copyright (C) <year> <name of author> This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.

简介

暂无描述 展开 收起
GPL-3.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/bigmagic/ChibiOS-RPi.git
git@gitee.com:bigmagic/ChibiOS-RPi.git
bigmagic
ChibiOS-RPi
ChibiOS-RPi
master

搜索帮助