SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
Hands-on VeriFast with STM32
microcontroller
Hands-on VeriFast with STM32
microcontroller
Hands-on VeriFast with STM32
microcontroller
Hands-on VeriFast with STM32
microcontroller
Hands-on VeriFast with STM32
microcontroller
Kiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu Okabe
Table of ContentsTable of ContentsTable of ContentsTable of ContentsTable of Contents
☆ Introduce ChibiOS/RT which is a RTOS☆ Introduce ChibiOS/RT which is a RTOS☆ Introduce ChibiOS/RT which is a RTOS☆ Introduce ChibiOS/RT which is a RTOS☆ Introduce ChibiOS/RT which is a RTOS
☆ Get development environment for ChibiOS/RT☆ Get development environment for ChibiOS/RT☆ Get development environment for ChibiOS/RT☆ Get development environment for ChibiOS/RT☆ Get development environment for ChibiOS/RT
☆ Build sample application on ChibiOS/RT☆ Build sample application on ChibiOS/RT☆ Build sample application on ChibiOS/RT☆ Build sample application on ChibiOS/RT☆ Build sample application on ChibiOS/RT
☆ Introduce STM32 microcontroller☆ Introduce STM32 microcontroller☆ Introduce STM32 microcontroller☆ Introduce STM32 microcontroller☆ Introduce STM32 microcontroller
☆ Run the application on STM32 board☆ Run the application on STM32 board☆ Run the application on STM32 board☆ Run the application on STM32 board☆ Run the application on STM32 board
☆ Introduce VeriFast☆ Introduce VeriFast☆ Introduce VeriFast☆ Introduce VeriFast☆ Introduce VeriFast
☆ Verify the application using VeriFast☆ Verify the application using VeriFast☆ Verify the application using VeriFast☆ Verify the application using VeriFast☆ Verify the application using VeriFast
What's ChibiOS/RT?What's ChibiOS/RT?What's ChibiOS/RT?What's ChibiOS/RT?What's ChibiOS/RT?
☆ http://www.chibios.org/☆ http://www.chibios.org/☆ http://www.chibios.org/☆ http://www.chibios.org/☆ http://www.chibios.org/
☆ Simple/Small/Fast/Portable real-time OS☆ Simple/Small/Fast/Portable real-time OS☆ Simple/Small/Fast/Portable real-time OS☆ Simple/Small/Fast/Portable real-time OS☆ Simple/Small/Fast/Portable real-time OS
☆ Run on ARM Cortex-M, Arduino Uno, PowerPC
e200
☆ Run on ARM Cortex-M, Arduino Uno, PowerPC
e200
☆ Run on ARM Cortex-M, Arduino Uno, PowerPC
e200
☆ Run on ARM Cortex-M, Arduino Uno, PowerPC
e200
☆ Run on ARM Cortex-M, Arduino Uno, PowerPC
e200
☆ Context Switch (STM32F4xx): 0.40 µsec☆ Context Switch (STM32F4xx): 0.40 µsec☆ Context Switch (STM32F4xx): 0.40 µsec☆ Context Switch (STM32F4xx): 0.40 µsec☆ Context Switch (STM32F4xx): 0.40 µsec
☆ Kernel Size (STM32F4xx): 6172 byte☆ Kernel Size (STM32F4xx): 6172 byte☆ Kernel Size (STM32F4xx): 6172 byte☆ Kernel Size (STM32F4xx): 6172 byte☆ Kernel Size (STM32F4xx): 6172 byte
Get the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #Windows
Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/
README.Windows.en.md
Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/
README.Windows.en.md
Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/
README.Windows.en.md
Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/
README.Windows.en.md
Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/
README.Windows.en.md
☆ Install following:☆ Install following:☆ Install following:☆ Install following:☆ Install following:
*�https://git-for-windows.github.io/
*�https://launchpad.net/gcc-arm-embedded/+download
*�https://ttssh2.osdn.jp/index.html.en
*�https://cygwin.com/
*�https://git-for-windows.github.io/
*�https://launchpad.net/gcc-arm-embedded/+download
*�https://ttssh2.osdn.jp/index.html.en
*�https://cygwin.com/
*�https://git-for-windows.github.io/
*�https://launchpad.net/gcc-arm-embedded/+download
*�https://ttssh2.osdn.jp/index.html.en
*�https://cygwin.com/
*�https://git-for-windows.github.io/
*�https://launchpad.net/gcc-arm-embedded/+download
*�https://ttssh2.osdn.jp/index.html.en
*�https://cygwin.com/
*�https://git-for-windows.github.io/
*�https://launchpad.net/gcc-arm-embedded/+download
*�https://ttssh2.osdn.jp/index.html.en
*�https://cygwin.com/
☆ Install following cygwin packages☆ Install following cygwin packages☆ Install following cygwin packages☆ Install following cygwin packages☆ Install following cygwin packages
*�cmake
*�libusb1.0-devel
*�cmake
*�libusb1.0-devel
*�cmake
*�libusb1.0-devel
*�cmake
*�libusb1.0-devel
*�cmake
*�libusb1.0-devel
Get the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #Windows
☆ Open cygwin terminal, and install "stlink":☆ Open cygwin terminal, and install "stlink":☆ Open cygwin terminal, and install "stlink":☆ Open cygwin terminal, and install "stlink":☆ Open cygwin terminal, and install "stlink":
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�make�install)
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�make�install)
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�make�install)
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�make�install)
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�make�install)
☆ Download VeriFast from following URL, unzip it
and set PATH to "verifast-XXXXXXX/bin" directory.
☆ Download VeriFast from following URL, unzip it
and set PATH to "verifast-XXXXXXX/bin" directory.
☆ Download VeriFast from following URL, unzip it
and set PATH to "verifast-XXXXXXX/bin" directory.
☆ Download VeriFast from following URL, unzip it
and set PATH to "verifast-XXXXXXX/bin" directory.
☆ Download VeriFast from following URL, unzip it
and set PATH to "verifast-XXXXXXX/bin" directory.
https://github.com/verifast/verifast#binarieshttps://github.com/verifast/verifast#binarieshttps://github.com/verifast/verifast#binarieshttps://github.com/verifast/verifast#binarieshttps://github.com/verifast/verifast#binaries
Get the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #Windows
☆ Open cygwin terminal, and checkout custom
ChibiOS/RT source code:w
☆ Open cygwin terminal, and checkout custom
ChibiOS/RT source code:w
☆ Open cygwin terminal, and checkout custom
ChibiOS/RT source code:w
☆ Open cygwin terminal, and checkout custom
ChibiOS/RT source code:w
☆ Open cygwin terminal, and checkout custom
ChibiOS/RT source code:w
$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git
Get the devel-environment #MacOSGet the devel-environment #MacOSGet the devel-environment #MacOSGet the devel-environment #MacOSGet the devel-environment #MacOS
Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/
README.MacOS.en.md
Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/
README.MacOS.en.md
Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/
README.MacOS.en.md
Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/
README.MacOS.en.md
Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/
README.MacOS.en.md
☆ Install brew packages:☆ Install brew packages:☆ Install brew packages:☆ Install brew packages:☆ Install brew packages:
$�brew�tap�PX4/homebrew-px4
$�brew�update
$�brew�install�wget�git�gcc-arm-none-eabi�cmake�picocom�libusb
$�brew�tap�PX4/homebrew-px4
$�brew�update
$�brew�install�wget�git�gcc-arm-none-eabi�cmake�picocom�libusb
$�brew�tap�PX4/homebrew-px4
$�brew�update
$�brew�install�wget�git�gcc-arm-none-eabi�cmake�picocom�libusb
$�brew�tap�PX4/homebrew-px4
$�brew�update
$�brew�install�wget�git�gcc-arm-none-eabi�cmake�picocom�libusb
$�brew�tap�PX4/homebrew-px4
$�brew�update
$�brew�install�wget�git�gcc-arm-none-eabi�cmake�picocom�libusb
☆ Install "stlink":☆ Install "stlink":☆ Install "stlink":☆ Install "stlink":☆ Install "stlink":
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�sudo�make�install)
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�sudo�make�install)
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�sudo�make�install)
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�sudo�make�install)
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�sudo�make�install)
Get the devel-environment #MacOSGet the devel-environment #MacOSGet the devel-environment #MacOSGet the devel-environment #MacOSGet the devel-environment #MacOS
☆ Download VeriFast, unzip it and set PATH:☆ Download VeriFast, unzip it and set PATH:☆ Download VeriFast, unzip it and set PATH:☆ Download VeriFast, unzip it and set PATH:☆ Download VeriFast, unzip it and set PATH:
$�wget�
http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn.
com/verifast-nightly-osx.tar.gz
$�tar�xf�verifast-nightly-osx.tar.gz
$�mv�verifast-*/�verifast
$�export�PATH=`pwd`/verifast/bin:$PATH
$�wget�
http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn.
com/verifast-nightly-osx.tar.gz
$�tar�xf�verifast-nightly-osx.tar.gz
$�mv�verifast-*/�verifast
$�export�PATH=`pwd`/verifast/bin:$PATH
$�wget�
http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn.
com/verifast-nightly-osx.tar.gz
$�tar�xf�verifast-nightly-osx.tar.gz
$�mv�verifast-*/�verifast
$�export�PATH=`pwd`/verifast/bin:$PATH
$�wget�
http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn.
com/verifast-nightly-osx.tar.gz
$�tar�xf�verifast-nightly-osx.tar.gz
$�mv�verifast-*/�verifast
$�export�PATH=`pwd`/verifast/bin:$PATH
$�wget�
http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn.
com/verifast-nightly-osx.tar.gz
$�tar�xf�verifast-nightly-osx.tar.gz
$�mv�verifast-*/�verifast
$�export�PATH=`pwd`/verifast/bin:$PATH
☆ Checkout custom ChibiOS/RT source code:☆ Checkout custom ChibiOS/RT source code:☆ Checkout custom ChibiOS/RT source code:☆ Checkout custom ChibiOS/RT source code:☆ Checkout custom ChibiOS/RT source code:
$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git
Get the devel-environment #LinuxGet the devel-environment #LinuxGet the devel-environment #LinuxGet the devel-environment #LinuxGet the devel-environment #Linux
Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/
README.Linux.en.md
Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/
README.Linux.en.md
Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/
README.Linux.en.md
Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/
README.Linux.en.md
Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/
README.Linux.en.md
☆ Install deb packages:☆ Install deb packages:☆ Install deb packages:☆ Install deb packages:☆ Install deb packages:
$�sudo�apt-get�install�wget�git�libgtk2.0-0�libusb-1.0-0-dev�libgtk-3-dev�
build-essential�cmake�gcc-arm-none-eabi�gdb-arm-none-eabi�picocom
$�sudo�apt-get�install�wget�git�libgtk2.0-0�libusb-1.0-0-dev�libgtk-3-dev�
build-essential�cmake�gcc-arm-none-eabi�gdb-arm-none-eabi�picocom
$�sudo�apt-get�install�wget�git�libgtk2.0-0�libusb-1.0-0-dev�libgtk-3-dev�
build-essential�cmake�gcc-arm-none-eabi�gdb-arm-none-eabi�picocom
$�sudo�apt-get�install�wget�git�libgtk2.0-0�libusb-1.0-0-dev�libgtk-3-dev�
build-essential�cmake�gcc-arm-none-eabi�gdb-arm-none-eabi�picocom
$�sudo�apt-get�install�wget�git�libgtk2.0-0�libusb-1.0-0-dev�libgtk-3-dev�
build-essential�cmake�gcc-arm-none-eabi�gdb-arm-none-eabi�picocom
☆ Install "stlink":☆ Install "stlink":☆ Install "stlink":☆ Install "stlink":☆ Install "stlink":
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�sudo�make�install)
$�sudo�ldconfig
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�sudo�make�install)
$�sudo�ldconfig
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�sudo�make�install)
$�sudo�ldconfig
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�sudo�make�install)
$�sudo�ldconfig
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�sudo�make�install)
$�sudo�ldconfig
Get the devel-environment #LinuxGet the devel-environment #LinuxGet the devel-environment #LinuxGet the devel-environment #LinuxGet the devel-environment #Linux
☆ Download VeriFast, unzip it and set PATH:☆ Download VeriFast, unzip it and set PATH:☆ Download VeriFast, unzip it and set PATH:☆ Download VeriFast, unzip it and set PATH:☆ Download VeriFast, unzip it and set PATH:
$�wget�
http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn.
com/verifast-nightly.tar.gz
$�tar�xf�verifast-nightly.tar.gz
$�mv�verifast-*/�verifast
$�export�PATH=`pwd`/verifast/bin:$PATH
$�wget�
http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn.
com/verifast-nightly.tar.gz
$�tar�xf�verifast-nightly.tar.gz
$�mv�verifast-*/�verifast
$�export�PATH=`pwd`/verifast/bin:$PATH
$�wget�
http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn.
com/verifast-nightly.tar.gz
$�tar�xf�verifast-nightly.tar.gz
$�mv�verifast-*/�verifast
$�export�PATH=`pwd`/verifast/bin:$PATH
$�wget�
http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn.
com/verifast-nightly.tar.gz
$�tar�xf�verifast-nightly.tar.gz
$�mv�verifast-*/�verifast
$�export�PATH=`pwd`/verifast/bin:$PATH
$�wget�
http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn.
com/verifast-nightly.tar.gz
$�tar�xf�verifast-nightly.tar.gz
$�mv�verifast-*/�verifast
$�export�PATH=`pwd`/verifast/bin:$PATH
☆ Checkout custom ChibiOS/RT source code:☆ Checkout custom ChibiOS/RT source code:☆ Checkout custom ChibiOS/RT source code:☆ Checkout custom ChibiOS/RT source code:☆ Checkout custom ChibiOS/RT source code:
$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git
Build a ChibiOS applicationBuild a ChibiOS applicationBuild a ChibiOS applicationBuild a ChibiOS applicationBuild a ChibiOS application
☆ Finally build the code:☆ Finally build the code:☆ Finally build the code:☆ Finally build the code:☆ Finally build the code:
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make
Coffee break #1Coffee break #1Coffee break #1Coffee break #1Coffee break #1
What's STM32?What's STM32?What's STM32?What's STM32?What's STM32?
http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-
arm-cortex-mcus.html
http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-
arm-cortex-mcus.html
http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-
arm-cortex-mcus.html
http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-
arm-cortex-mcus.html
http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-
arm-cortex-mcus.html
The STM32 family of 32-bit Flash microcontrollers
based on the ARM Cortex-M processor is designed
to offer new degrees of freedom to MCU users. It
offers a 32-bit product range that combines very
high performance, real-time capabilities, digital
signal processing, and low-power, low-voltage
operation, while maintaining full integration and
ease of development.
The STM32 family of 32-bit Flash microcontrollers
based on the ARM Cortex-M processor is designed
to offer new degrees of freedom to MCU users. It
offers a 32-bit product range that combines very
high performance, real-time capabilities, digital
signal processing, and low-power, low-voltage
operation, while maintaining full integration and
ease of development.
The STM32 family of 32-bit Flash microcontrollers
based on the ARM Cortex-M processor is designed
to offer new degrees of freedom to MCU users. It
offers a 32-bit product range that combines very
high performance, real-time capabilities, digital
signal processing, and low-power, low-voltage
operation, while maintaining full integration and
ease of development.
The STM32 family of 32-bit Flash microcontrollers
based on the ARM Cortex-M processor is designed
to offer new degrees of freedom to MCU users. It
offers a 32-bit product range that combines very
high performance, real-time capabilities, digital
signal processing, and low-power, low-voltage
operation, while maintaining full integration and
ease of development.
The STM32 family of 32-bit Flash microcontrollers
based on the ARM Cortex-M processor is designed
to offer new degrees of freedom to MCU users. It
offers a 32-bit product range that combines very
high performance, real-time capabilities, digital
signal processing, and low-power, low-voltage
operation, while maintaining full integration and
ease of development.
You can free to get own STM32 board!You can free to get own STM32 board!You can free to get own STM32 board!You can free to get own STM32 board!You can free to get own STM32 board!
https://developer.mbed.org/platforms/ST-Nucleo-F091RC/https://developer.mbed.org/platforms/ST-Nucleo-F091RC/https://developer.mbed.org/platforms/ST-Nucleo-F091RC/https://developer.mbed.org/platforms/ST-Nucleo-F091RC/https://developer.mbed.org/platforms/ST-Nucleo-F091RC/
☆ "NUCLEO-F091RC"☆ "NUCLEO-F091RC"☆ "NUCLEO-F091RC"☆ "NUCLEO-F091RC"☆ "NUCLEO-F091RC"
☆ ARM Cortex-M0 CPU / 256 KB Flash / 32 KB SRAM☆ ARM Cortex-M0 CPU / 256 KB Flash / 32 KB SRAM☆ ARM Cortex-M0 CPU / 256 KB Flash / 32 KB SRAM☆ ARM Cortex-M0 CPU / 256 KB Flash / 32 KB SRAM☆ ARM Cortex-M0 CPU / 256 KB Flash / 32 KB SRAM
☆ ADC / DAC / RTC / I2C / USART / SPI / CAN / HDMI
CEC
☆ ADC / DAC / RTC / I2C / USART / SPI / CAN / HDMI
CEC
☆ ADC / DAC / RTC / I2C / USART / SPI / CAN / HDMI
CEC
☆ ADC / DAC / RTC / I2C / USART / SPI / CAN / HDMI
CEC
☆ ADC / DAC / RTC / I2C / USART / SPI / CAN / HDMI
CEC
☆ Able to download fiwmware and debug it using
GDB
☆ Able to download fiwmware and debug it using
GDB
☆ Able to download fiwmware and debug it using
GDB
☆ Able to download fiwmware and debug it using
GDB
☆ Able to download fiwmware and debug it using
GDB
☆ Thanks a lot, STMicroelectronics!☆ Thanks a lot, STMicroelectronics!☆ Thanks a lot, STMicroelectronics!☆ Thanks a lot, STMicroelectronics!☆ Thanks a lot, STMicroelectronics!
How to run application? #WindowsHow to run application? #WindowsHow to run application? #WindowsHow to run application? #WindowsHow to run application? #Windows
☆ Connect the board to your PC using USB cable☆ Connect the board to your PC using USB cable☆ Connect the board to your PC using USB cable☆ Connect the board to your PC using USB cable☆ Connect the board to your PC using USB cable
☆ Open cygwin terminal, kick "st-util":☆ Open cygwin terminal, kick "st-util":☆ Open cygwin terminal, kick "st-util":☆ Open cygwin terminal, kick "st-util":☆ Open cygwin terminal, kick "st-util":
$�(cd�/usr/local/lib�&&�st-util)$�(cd�/usr/local/lib�&&�st-util)$�(cd�/usr/local/lib�&&�st-util)$�(cd�/usr/local/lib�&&�st-util)$�(cd�/usr/local/lib�&&�st-util)
☆ Open another cygwin terminal, and dowload
application into the board:
☆ Open another cygwin terminal, and dowload
application into the board:
☆ Open another cygwin terminal, and dowload
application into the board:
☆ Open another cygwin terminal, and dowload
application into the board:
☆ Open another cygwin terminal, and dowload
application into the board:
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�gdbwrite
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�gdbwrite
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�gdbwrite
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�gdbwrite
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�gdbwrite
How to run application? #WindowsHow to run application? #WindowsHow to run application? #WindowsHow to run application? #WindowsHow to run application? #Windows
☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:
(gdb)�c(gdb)�c(gdb)�c(gdb)�c(gdb)�c
☆ Open serial console using TeraTerm with baud
rate 38400
☆ Open serial console using TeraTerm with baud
rate 38400
☆ Open serial console using TeraTerm with baud
rate 38400
☆ Open serial console using TeraTerm with baud
rate 38400
☆ Open serial console using TeraTerm with baud
rate 38400
☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board
How to run application? #MacOSHow to run application? #MacOSHow to run application? #MacOSHow to run application? #MacOSHow to run application? #MacOS
☆ Connect the board to your Mac using USB cable☆ Connect the board to your Mac using USB cable☆ Connect the board to your Mac using USB cable☆ Connect the board to your Mac using USB cable☆ Connect the board to your Mac using USB cable
☆ Kick "st-util":☆ Kick "st-util":☆ Kick "st-util":☆ Kick "st-util":☆ Kick "st-util":
$�st-util$�st-util$�st-util$�st-util$�st-util
☆ Open another terminal, and download
application into the board:
☆ Open another terminal, and download
application into the board:
☆ Open another terminal, and download
application into the board:
☆ Open another terminal, and download
application into the board:
☆ Open another terminal, and download
application into the board:
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�gdbwrite
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�gdbwrite
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�gdbwrite
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�gdbwrite
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�gdbwrite
How to run application? #MacOSHow to run application? #MacOSHow to run application? #MacOSHow to run application? #MacOSHow to run application? #MacOS
☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:
(gdb)�c(gdb)�c(gdb)�c(gdb)�c(gdb)�c
☆ Open another terminal, and open serial console:☆ Open another terminal, and open serial console:☆ Open another terminal, and open serial console:☆ Open another terminal, and open serial console:☆ Open another terminal, and open serial console:
$�picocom�-b�38400�/dev/tty.usbmodem1423$�picocom�-b�38400�/dev/tty.usbmodem1423$�picocom�-b�38400�/dev/tty.usbmodem1423$�picocom�-b�38400�/dev/tty.usbmodem1423$�picocom�-b�38400�/dev/tty.usbmodem1423
☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board
How to run application? #LinuxHow to run application? #LinuxHow to run application? #LinuxHow to run application? #LinuxHow to run application? #Linux
☆ Connect the board to your PC using USB cable☆ Connect the board to your PC using USB cable☆ Connect the board to your PC using USB cable☆ Connect the board to your PC using USB cable☆ Connect the board to your PC using USB cable
☆ Kick "st-util":☆ Kick "st-util":☆ Kick "st-util":☆ Kick "st-util":☆ Kick "st-util":
$�sudo�st-util$�sudo�st-util$�sudo�st-util$�sudo�st-util$�sudo�st-util
☆ Open another terminal, and download
application into the board:
☆ Open another terminal, and download
application into the board:
☆ Open another terminal, and download
application into the board:
☆ Open another terminal, and download
application into the board:
☆ Open another terminal, and download
application into the board:
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�gdbwrite
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�gdbwrite
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�gdbwrite
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�gdbwrite
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�gdbwrite
How to run application? #LinuxHow to run application? #LinuxHow to run application? #LinuxHow to run application? #LinuxHow to run application? #Linux
☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:
(gdb)�c(gdb)�c(gdb)�c(gdb)�c(gdb)�c
☆ Open another terminal, and open serial console:☆ Open another terminal, and open serial console:☆ Open another terminal, and open serial console:☆ Open another terminal, and open serial console:☆ Open another terminal, and open serial console:
$�picocom�-b�38400�/dev/ttyACM0$�picocom�-b�38400�/dev/ttyACM0$�picocom�-b�38400�/dev/ttyACM0$�picocom�-b�38400�/dev/ttyACM0$�picocom�-b�38400�/dev/ttyACM0
☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board
Do you see test log of ChibiOS?Do you see test log of ChibiOS?Do you see test log of ChibiOS?Do you see test log of ChibiOS?Do you see test log of ChibiOS?
☆ You will see following log on serial console:☆ You will see following log on serial console:☆ You will see following log on serial console:☆ You will see following log on serial console:☆ You will see following log on serial console:
***�ChibiOS/RT�test�suite
***
***�Kernel:�������3.1.5
***�Compiled:�����Jan�15�2017�-�20:38:01
***�Compiler:�����GCC�4.8.4�20140725�(release)�[ARM/embedded-4_8-branch�
revision�213147]
***�Architecture:�ARMv6-M
***�Core�Variant:�Cortex-M0
***�Port�Info:����Preemption�through�NMI
***�Platform:�����STM32F091xC�Entry�Level�Access�Line�devices
***�Test�Board:���STMicroelectronics�NUCLEO-F091RC
***�ChibiOS/RT�test�suite
***
***�Kernel:�������3.1.5
***�Compiled:�����Jan�15�2017�-�20:38:01
***�Compiler:�����GCC�4.8.4�20140725�(release)�[ARM/embedded-4_8-branch�
revision�213147]
***�Architecture:�ARMv6-M
***�Core�Variant:�Cortex-M0
***�Port�Info:����Preemption�through�NMI
***�Platform:�����STM32F091xC�Entry�Level�Access�Line�devices
***�Test�Board:���STMicroelectronics�NUCLEO-F091RC
***�ChibiOS/RT�test�suite
***
***�Kernel:�������3.1.5
***�Compiled:�����Jan�15�2017�-�20:38:01
***�Compiler:�����GCC�4.8.4�20140725�(release)�[ARM/embedded-4_8-branch�
revision�213147]
***�Architecture:�ARMv6-M
***�Core�Variant:�Cortex-M0
***�Port�Info:����Preemption�through�NMI
***�Platform:�����STM32F091xC�Entry�Level�Access�Line�devices
***�Test�Board:���STMicroelectronics�NUCLEO-F091RC
***�ChibiOS/RT�test�suite
***
***�Kernel:�������3.1.5
***�Compiled:�����Jan�15�2017�-�20:38:01
***�Compiler:�����GCC�4.8.4�20140725�(release)�[ARM/embedded-4_8-branch�
revision�213147]
***�Architecture:�ARMv6-M
***�Core�Variant:�Cortex-M0
***�Port�Info:����Preemption�through�NMI
***�Platform:�����STM32F091xC�Entry�Level�Access�Line�devices
***�Test�Board:���STMicroelectronics�NUCLEO-F091RC
***�ChibiOS/RT�test�suite
***
***�Kernel:�������3.1.5
***�Compiled:�����Jan�15�2017�-�20:38:01
***�Compiler:�����GCC�4.8.4�20140725�(release)�[ARM/embedded-4_8-branch�
revision�213147]
***�Architecture:�ARMv6-M
***�Core�Variant:�Cortex-M0
***�Port�Info:����Preemption�through�NMI
***�Platform:�����STM32F091xC�Entry�Level�Access�Line�devices
***�Test�Board:���STMicroelectronics�NUCLEO-F091RC
Coffee break #2Coffee break #2Coffee break #2Coffee break #2Coffee break #2
What's VeriFast?What's VeriFast?What's VeriFast?What's VeriFast?What's VeriFast?
☆ https://github.com/verifast/verifast☆ https://github.com/verifast/verifast☆ https://github.com/verifast/verifast☆ https://github.com/verifast/verifast☆ https://github.com/verifast/verifast
☆ A verifier for single-threaded and multithreaded
C language programs annotated with
preconditions and postconditions written in
separation logic.
☆ A verifier for single-threaded and multithreaded
C language programs annotated with
preconditions and postconditions written in
separation logic.
☆ A verifier for single-threaded and multithreaded
C language programs annotated with
preconditions and postconditions written in
separation logic.
☆ A verifier for single-threaded and multithreaded
C language programs annotated with
preconditions and postconditions written in
separation logic.
☆ A verifier for single-threaded and multithreaded
C language programs annotated with
preconditions and postconditions written in
separation logic.
☆ VeriFast is easy to use with the graphical IDE.☆ VeriFast is easy to use with the graphical IDE.☆ VeriFast is easy to use with the graphical IDE.☆ VeriFast is easy to use with the graphical IDE.☆ VeriFast is easy to use with the graphical IDE.
How to verify C code using VeriFast?How to verify C code using VeriFast?How to verify C code using VeriFast?How to verify C code using VeriFast?How to verify C code using VeriFast?
Please read VeriFast Tutorial:Please read VeriFast Tutorial:Please read VeriFast Tutorial:Please read VeriFast Tutorial:Please read VeriFast Tutorial:
☆ English:☆ English:☆ English:☆ English:☆ English:
https://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdfhttps://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdfhttps://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdfhttps://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdfhttps://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdf
☆ Japanese:☆ Japanese:☆ Japanese:☆ Japanese:☆ Japanese:
https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/
Tutorial.md
https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/
Tutorial.md
https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/
Tutorial.md
https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/
Tutorial.md
https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/
Tutorial.md
How to verify application?How to verify application?How to verify application?How to verify application?How to verify application?
Simply kick GNU make on your terminal:Simply kick GNU make on your terminal:Simply kick GNU make on your terminal:Simply kick GNU make on your terminal:Simply kick GNU make on your terminal:
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�vfide
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�vfide
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�vfide
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�vfide
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�vfide
What should be verified on ChibiOS?What should be verified on ChibiOS?What should be verified on ChibiOS?What should be verified on ChibiOS?What should be verified on ChibiOS?
☆ ChibiOS has own system states☆ ChibiOS has own system states☆ ChibiOS has own system states☆ ChibiOS has own system states☆ ChibiOS has own system states
The state chart means...The state chart means...The state chart means...The state chart means...The state chart means...
☆ Application start at "Init" state☆ Application start at "Init" state☆ Application start at "Init" state☆ Application start at "Init" state☆ Application start at "Init" state
☆ Change into "HALInited" state calling halInit()☆ Change into "HALInited" state calling halInit()☆ Change into "HALInited" state calling halInit()☆ Change into "HALInited" state calling halInit()☆ Change into "HALInited" state calling halInit()
☆ Change into "Thread" state calling chSysInit()☆ Change into "Thread" state calling chSysInit()☆ Change into "Thread" state calling chSysInit()☆ Change into "Thread" state calling chSysInit()☆ Change into "Thread" state calling chSysInit()
☆ You can call some ChibiOS API on "Thread" state☆ You can call some ChibiOS API on "Thread" state☆ You can call some ChibiOS API on "Thread" state☆ You can call some ChibiOS API on "Thread" state☆ You can call some ChibiOS API on "Thread" state
But run-time error is caused by violation. We would
like to capture it on verification using VeriFast.
But run-time error is caused by violation. We would
like to capture it on verification using VeriFast.
But run-time error is caused by violation. We would
like to capture it on verification using VeriFast.
But run-time error is caused by violation. We would
like to capture it on verification using VeriFast.
But run-time error is caused by violation. We would
like to capture it on verification using VeriFast.
Your code already has assertionYour code already has assertionYour code already has assertionYour code already has assertionYour code already has assertion
$�cat�chibios-verifast/verifast_inc/ghost-chibios.gh
--snip--
inductive�SystemState�=
��│�InitState
��│�HALInitedState
��│�ThreadState
��│�IRQSuspendedState
��│�IRQDisabledState
��│�IRQWaitState
��│�ISRState
��│�SLockedState
��│�ILockedState
��;
predicate�chibios_sys_state_context(int�threadId;�SystemState�state);
$�cat�chibios-verifast/verifast_inc/ghost-chibios.gh
--snip--
inductive�SystemState�=
��│�InitState
��│�HALInitedState
��│�ThreadState
��│�IRQSuspendedState
��│�IRQDisabledState
��│�IRQWaitState
��│�ISRState
��│�SLockedState
��│�ILockedState
��;
predicate�chibios_sys_state_context(int�threadId;�SystemState�state);
$�cat�chibios-verifast/verifast_inc/ghost-chibios.gh
--snip--
inductive�SystemState�=
��│�InitState
��│�HALInitedState
��│�ThreadState
��│�IRQSuspendedState
��│�IRQDisabledState
��│�IRQWaitState
��│�ISRState
��│�SLockedState
��│�ILockedState
��;
predicate�chibios_sys_state_context(int�threadId;�SystemState�state);
$�cat�chibios-verifast/verifast_inc/ghost-chibios.gh
--snip--
inductive�SystemState�=
��│�InitState
��│�HALInitedState
��│�ThreadState
��│�IRQSuspendedState
��│�IRQDisabledState
��│�IRQWaitState
��│�ISRState
��│�SLockedState
��│�ILockedState
��;
predicate�chibios_sys_state_context(int�threadId;�SystemState�state);
$�cat�chibios-verifast/verifast_inc/ghost-chibios.gh
--snip--
inductive�SystemState�=
��│�InitState
��│�HALInitedState
��│�ThreadState
��│�IRQSuspendedState
��│�IRQDisabledState
��│�IRQWaitState
��│�ISRState
��│�SLockedState
��│�ILockedState
��;
predicate�chibios_sys_state_context(int�threadId;�SystemState�state);
ChibiOS API has pre/postconditionChibiOS API has pre/postconditionChibiOS API has pre/postconditionChibiOS API has pre/postconditionChibiOS API has pre/postcondition
$�cat�chibios-verifast/verifast_inc/hal.h
--snip--
void�halInit(void);
����//@�requires�chibios_sys_state_context(currentThread,�InitState);
����//@�ensures�chibios_sys_state_context(currentThread,�HALInitedState);
--snip--
$�cat�chibios-verifast/verifast_inc/ch.h
--snip--
void�chSysInit(void);
����//@�requires�chibios_sys_state_context(currentThread,�HALInitedState);
����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState);
void�chThdSleepMilliseconds(uint32_t�msec);
����//@�requires�chibios_sys_state_context(currentThread,�ThreadState);
����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState);
$�cat�chibios-verifast/verifast_inc/hal.h
--snip--
void�halInit(void);
����//@�requires�chibios_sys_state_context(currentThread,�InitState);
����//@�ensures�chibios_sys_state_context(currentThread,�HALInitedState);
--snip--
$�cat�chibios-verifast/verifast_inc/ch.h
--snip--
void�chSysInit(void);
����//@�requires�chibios_sys_state_context(currentThread,�HALInitedState);
����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState);
void�chThdSleepMilliseconds(uint32_t�msec);
����//@�requires�chibios_sys_state_context(currentThread,�ThreadState);
����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState);
$�cat�chibios-verifast/verifast_inc/hal.h
--snip--
void�halInit(void);
����//@�requires�chibios_sys_state_context(currentThread,�InitState);
����//@�ensures�chibios_sys_state_context(currentThread,�HALInitedState);
--snip--
$�cat�chibios-verifast/verifast_inc/ch.h
--snip--
void�chSysInit(void);
����//@�requires�chibios_sys_state_context(currentThread,�HALInitedState);
����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState);
void�chThdSleepMilliseconds(uint32_t�msec);
����//@�requires�chibios_sys_state_context(currentThread,�ThreadState);
����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState);
$�cat�chibios-verifast/verifast_inc/hal.h
--snip--
void�halInit(void);
����//@�requires�chibios_sys_state_context(currentThread,�InitState);
����//@�ensures�chibios_sys_state_context(currentThread,�HALInitedState);
--snip--
$�cat�chibios-verifast/verifast_inc/ch.h
--snip--
void�chSysInit(void);
����//@�requires�chibios_sys_state_context(currentThread,�HALInitedState);
����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState);
void�chThdSleepMilliseconds(uint32_t�msec);
����//@�requires�chibios_sys_state_context(currentThread,�ThreadState);
����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState);
$�cat�chibios-verifast/verifast_inc/hal.h
--snip--
void�halInit(void);
����//@�requires�chibios_sys_state_context(currentThread,�InitState);
����//@�ensures�chibios_sys_state_context(currentThread,�HALInitedState);
--snip--
$�cat�chibios-verifast/verifast_inc/ch.h
--snip--
void�chSysInit(void);
����//@�requires�chibios_sys_state_context(currentThread,�HALInitedState);
����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState);
void�chThdSleepMilliseconds(uint32_t�msec);
����//@�requires�chibios_sys_state_context(currentThread,�ThreadState);
����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState);
Let's violate the assertionLet's violate the assertionLet's violate the assertionLet's violate the assertionLet's violate the assertion
$�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO/main.c
int�main(void)
����//@�requires�chibios_sys_state_context(currentThread,�InitState);
����//@�ensures�false;
{
��chSysInit();�//�<===�SWAP!
��halInit();���//�<===�SWAP!
��sdStart(&SD2,�NULL);
��while�(true)
����//@�invariant�chibios_sys_state_context(currentThread,�ThreadState);
��{
����if�(!palReadPad(GPIOC,�GPIOC_BUTTON))
������TestThread(&SD2);
����chThdSleepMilliseconds(500);
��}
}
$�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO/main.c
int�main(void)
����//@�requires�chibios_sys_state_context(currentThread,�InitState);
����//@�ensures�false;
{
��chSysInit();�//�<===�SWAP!
��halInit();���//�<===�SWAP!
��sdStart(&SD2,�NULL);
��while�(true)
����//@�invariant�chibios_sys_state_context(currentThread,�ThreadState);
��{
����if�(!palReadPad(GPIOC,�GPIOC_BUTTON))
������TestThread(&SD2);
����chThdSleepMilliseconds(500);
��}
}
$�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO/main.c
int�main(void)
����//@�requires�chibios_sys_state_context(currentThread,�InitState);
����//@�ensures�false;
{
��chSysInit();�//�<===�SWAP!
��halInit();���//�<===�SWAP!
��sdStart(&SD2,�NULL);
��while�(true)
����//@�invariant�chibios_sys_state_context(currentThread,�ThreadState);
��{
����if�(!palReadPad(GPIOC,�GPIOC_BUTTON))
������TestThread(&SD2);
����chThdSleepMilliseconds(500);
��}
}
$�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO/main.c
int�main(void)
����//@�requires�chibios_sys_state_context(currentThread,�InitState);
����//@�ensures�false;
{
��chSysInit();�//�<===�SWAP!
��halInit();���//�<===�SWAP!
��sdStart(&SD2,�NULL);
��while�(true)
����//@�invariant�chibios_sys_state_context(currentThread,�ThreadState);
��{
����if�(!palReadPad(GPIOC,�GPIOC_BUTTON))
������TestThread(&SD2);
����chThdSleepMilliseconds(500);
��}
}
$�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO/main.c
int�main(void)
����//@�requires�chibios_sys_state_context(currentThread,�InitState);
����//@�ensures�false;
{
��chSysInit();�//�<===�SWAP!
��halInit();���//�<===�SWAP!
��sdStart(&SD2,�NULL);
��while�(true)
����//@�invariant�chibios_sys_state_context(currentThread,�ThreadState);
��{
����if�(!palReadPad(GPIOC,�GPIOC_BUTTON))
������TestThread(&SD2);
����chThdSleepMilliseconds(500);
��}
}
Then you will see error on verificationThen you will see error on verificationThen you will see error on verificationThen you will see error on verificationThen you will see error on verification
HomeworkHomeworkHomeworkHomeworkHomework
☆ Verify ChibiOS/RT thread blinking LED☆ Verify ChibiOS/RT thread blinking LED☆ Verify ChibiOS/RT thread blinking LED☆ Verify ChibiOS/RT thread blinking LED☆ Verify ChibiOS/RT thread blinking LED
☆ Verify chEvtBroadcastI() which can be call from
I-Locked or S-Locked state
☆ Verify chEvtBroadcastI() which can be call from
I-Locked or S-Locked state
☆ Verify chEvtBroadcastI() which can be call from
I-Locked or S-Locked state
☆ Verify chEvtBroadcastI() which can be call from
I-Locked or S-Locked state
☆ Verify chEvtBroadcastI() which can be call from
I-Locked or S-Locked state
http://chibios.sourceforge.net/html/
group__events.html#ga0c3fcdef2ba14d8b6b6da5aa4113f18b
http://chibios.sourceforge.net/html/
group__events.html#ga0c3fcdef2ba14d8b6b6da5aa4113f18b
http://chibios.sourceforge.net/html/
group__events.html#ga0c3fcdef2ba14d8b6b6da5aa4113f18b
http://chibios.sourceforge.net/html/
group__events.html#ga0c3fcdef2ba14d8b6b6da5aa4113f18b
http://chibios.sourceforge.net/html/
group__events.html#ga0c3fcdef2ba14d8b6b6da5aa4113f18b
☆ Verify following more complex application:☆ Verify following more complex application:☆ Verify following more complex application:☆ Verify following more complex application:☆ Verify following more complex application:
chibios-verifast/ChibiOS_16.1.6/demos/STM32/RT-STM32F746G-DISCOVERY-LWIP-
FATFS-USB
chibios-verifast/ChibiOS_16.1.6/demos/STM32/RT-STM32F746G-DISCOVERY-LWIP-
FATFS-USB
chibios-verifast/ChibiOS_16.1.6/demos/STM32/RT-STM32F746G-DISCOVERY-LWIP-
FATFS-USB
chibios-verifast/ChibiOS_16.1.6/demos/STM32/RT-STM32F746G-DISCOVERY-LWIP-
FATFS-USB
chibios-verifast/ChibiOS_16.1.6/demos/STM32/RT-STM32F746G-DISCOVERY-LWIP-
FATFS-USB
Special thanksSpecial thanksSpecial thanksSpecial thanksSpecial thanks
☆ STMicroelectronics provides STM32 boards.☆ STMicroelectronics provides STM32 boards.☆ STMicroelectronics provides STM32 boards.☆ STMicroelectronics provides STM32 boards.☆ STMicroelectronics provides STM32 boards.
☆ Eiwa System Management, Inc. provides this
meeting room.
☆ Eiwa System Management, Inc. provides this
meeting room.
☆ Eiwa System Management, Inc. provides this
meeting room.
☆ Eiwa System Management, Inc. provides this
meeting room.
☆ Eiwa System Management, Inc. provides this
meeting room.
☆ @ruicc supports around MacOS environment.☆ @ruicc supports around MacOS environment.☆ @ruicc supports around MacOS environment.☆ @ruicc supports around MacOS environment.☆ @ruicc supports around MacOS environment.
☆ @eldesh supports around Windows
environment, and gives advice usage of VeriFast.
☆ @eldesh supports around Windows
environment, and gives advice usage of VeriFast.
☆ @eldesh supports around Windows
environment, and gives advice usage of VeriFast.
☆ @eldesh supports around Windows
environment, and gives advice usage of VeriFast.
☆ @eldesh supports around Windows
environment, and gives advice usage of VeriFast.
License of photos #1License of photos #1License of photos #1License of photos #1License of photos #1
*�Creative�Commons�BBB�│�Flickr
��https://www.flickr.com/photos/steren/2732488224/
��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0
*�Microsoft�│�Microsoft�Store,�Connecticut,�12/2014�by�Mike�Mo��│�Flickr
��https://www.flickr.com/photos/jeepersmedia/15966145248/
��Copyright:�Mike�Mozart�/�License:�CC�BY�2.0
*�Mac�20th�anniversary�poster�#14:�iMac�│�The�last�in�the�seri��│�Flickr
��https://www.flickr.com/photos/mwichary/2234474972/
��Copyright:�Marcin�Wichary�/�License:�CC�BY�2.0
*�Coffee�break�│�I'm�determined�to�do�my�own�latte�art�one�day��│�Flickr
��https://www.flickr.com/photos/kwl/3457656569/
��Copyright:�Kenny�Louie�/�License:�CC�BY�2.0
*�Coffee�break�│�Matt�Laugier�│�Flickr
��https://www.flickr.com/photos/110206196@N06/14898090455/
��Copyright:�Matt�Laugier�/�License:�CC�BY�2.0
*�Creative�Commons�BBB�│�Flickr
��https://www.flickr.com/photos/steren/2732488224/
��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0
*�Microsoft�│�Microsoft�Store,�Connecticut,�12/2014�by�Mike�Mo��│�Flickr
��https://www.flickr.com/photos/jeepersmedia/15966145248/
��Copyright:�Mike�Mozart�/�License:�CC�BY�2.0
*�Mac�20th�anniversary�poster�#14:�iMac�│�The�last�in�the�seri��│�Flickr
��https://www.flickr.com/photos/mwichary/2234474972/
��Copyright:�Marcin�Wichary�/�License:�CC�BY�2.0
*�Coffee�break�│�I'm�determined�to�do�my�own�latte�art�one�day��│�Flickr
��https://www.flickr.com/photos/kwl/3457656569/
��Copyright:�Kenny�Louie�/�License:�CC�BY�2.0
*�Coffee�break�│�Matt�Laugier�│�Flickr
��https://www.flickr.com/photos/110206196@N06/14898090455/
��Copyright:�Matt�Laugier�/�License:�CC�BY�2.0
*�Creative�Commons�BBB�│�Flickr
��https://www.flickr.com/photos/steren/2732488224/
��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0
*�Microsoft�│�Microsoft�Store,�Connecticut,�12/2014�by�Mike�Mo��│�Flickr
��https://www.flickr.com/photos/jeepersmedia/15966145248/
��Copyright:�Mike�Mozart�/�License:�CC�BY�2.0
*�Mac�20th�anniversary�poster�#14:�iMac�│�The�last�in�the�seri��│�Flickr
��https://www.flickr.com/photos/mwichary/2234474972/
��Copyright:�Marcin�Wichary�/�License:�CC�BY�2.0
*�Coffee�break�│�I'm�determined�to�do�my�own�latte�art�one�day��│�Flickr
��https://www.flickr.com/photos/kwl/3457656569/
��Copyright:�Kenny�Louie�/�License:�CC�BY�2.0
*�Coffee�break�│�Matt�Laugier�│�Flickr
��https://www.flickr.com/photos/110206196@N06/14898090455/
��Copyright:�Matt�Laugier�/�License:�CC�BY�2.0
*�Creative�Commons�BBB�│�Flickr
��https://www.flickr.com/photos/steren/2732488224/
��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0
*�Microsoft�│�Microsoft�Store,�Connecticut,�12/2014�by�Mike�Mo��│�Flickr
��https://www.flickr.com/photos/jeepersmedia/15966145248/
��Copyright:�Mike�Mozart�/�License:�CC�BY�2.0
*�Mac�20th�anniversary�poster�#14:�iMac�│�The�last�in�the�seri��│�Flickr
��https://www.flickr.com/photos/mwichary/2234474972/
��Copyright:�Marcin�Wichary�/�License:�CC�BY�2.0
*�Coffee�break�│�I'm�determined�to�do�my�own�latte�art�one�day��│�Flickr
��https://www.flickr.com/photos/kwl/3457656569/
��Copyright:�Kenny�Louie�/�License:�CC�BY�2.0
*�Coffee�break�│�Matt�Laugier�│�Flickr
��https://www.flickr.com/photos/110206196@N06/14898090455/
��Copyright:�Matt�Laugier�/�License:�CC�BY�2.0
*�Creative�Commons�BBB�│�Flickr
��https://www.flickr.com/photos/steren/2732488224/
��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0
*�Microsoft�│�Microsoft�Store,�Connecticut,�12/2014�by�Mike�Mo��│�Flickr
��https://www.flickr.com/photos/jeepersmedia/15966145248/
��Copyright:�Mike�Mozart�/�License:�CC�BY�2.0
*�Mac�20th�anniversary�poster�#14:�iMac�│�The�last�in�the�seri��│�Flickr
��https://www.flickr.com/photos/mwichary/2234474972/
��Copyright:�Marcin�Wichary�/�License:�CC�BY�2.0
*�Coffee�break�│�I'm�determined�to�do�my�own�latte�art�one�day��│�Flickr
��https://www.flickr.com/photos/kwl/3457656569/
��Copyright:�Kenny�Louie�/�License:�CC�BY�2.0
*�Coffee�break�│�Matt�Laugier�│�Flickr
��https://www.flickr.com/photos/110206196@N06/14898090455/
��Copyright:�Matt�Laugier�/�License:�CC�BY�2.0
License of photos #2License of photos #2License of photos #2License of photos #2License of photos #2
*�WGS7�DeltaIV�Liftoff�│�Shots�from�the�WGS7�DeltaIV�rocket�la��│�Flickr
��https://www.flickr.com/photos/mseeley1/19953519882/
��Copyright:�Michael�Seeley�/�License:�CC�BY�2.0
*�Sumo�│�Better�Than�Bacon�│�Flickr
��https://www.flickr.com/photos/slurm/3989895242/
��Copyright:�Better�Than�Bacon�/�License:�CC�BY�2.0
*�Start�│�Start�up�│�CréAj�│�Flickr
��https://www.flickr.com/photos/103939386@N07/15423955496/
��Copyright:�CréAj�/�License:�CC�BY-ND�2.0
*�Homework�│�ejecutivoagresivo�│�Flickr
��https://www.flickr.com/photos/ejecutivoagresivo/5872031749/
��Copyright:�ejecutivoagresivo�/�License:�CC�BY�2.0
*�ESAT�KULeuven�│�Pues�aquí�es�donde�trabajo�durante�estos�mes��│�Flickr
��https://www.flickr.com/photos/juanvvc/4688054880/
��Copyright:�Juan�V.�Vera�del�Campo�/�License:�CC�BY-SA�2.0
*�WGS7�DeltaIV�Liftoff�│�Shots�from�the�WGS7�DeltaIV�rocket�la��│�Flickr
��https://www.flickr.com/photos/mseeley1/19953519882/
��Copyright:�Michael�Seeley�/�License:�CC�BY�2.0
*�Sumo�│�Better�Than�Bacon�│�Flickr
��https://www.flickr.com/photos/slurm/3989895242/
��Copyright:�Better�Than�Bacon�/�License:�CC�BY�2.0
*�Start�│�Start�up�│�CréAj�│�Flickr
��https://www.flickr.com/photos/103939386@N07/15423955496/
��Copyright:�CréAj�/�License:�CC�BY-ND�2.0
*�Homework�│�ejecutivoagresivo�│�Flickr
��https://www.flickr.com/photos/ejecutivoagresivo/5872031749/
��Copyright:�ejecutivoagresivo�/�License:�CC�BY�2.0
*�ESAT�KULeuven�│�Pues�aquí�es�donde�trabajo�durante�estos�mes��│�Flickr
��https://www.flickr.com/photos/juanvvc/4688054880/
��Copyright:�Juan�V.�Vera�del�Campo�/�License:�CC�BY-SA�2.0
*�WGS7�DeltaIV�Liftoff�│�Shots�from�the�WGS7�DeltaIV�rocket�la��│�Flickr
��https://www.flickr.com/photos/mseeley1/19953519882/
��Copyright:�Michael�Seeley�/�License:�CC�BY�2.0
*�Sumo�│�Better�Than�Bacon�│�Flickr
��https://www.flickr.com/photos/slurm/3989895242/
��Copyright:�Better�Than�Bacon�/�License:�CC�BY�2.0
*�Start�│�Start�up�│�CréAj�│�Flickr
��https://www.flickr.com/photos/103939386@N07/15423955496/
��Copyright:�CréAj�/�License:�CC�BY-ND�2.0
*�Homework�│�ejecutivoagresivo�│�Flickr
��https://www.flickr.com/photos/ejecutivoagresivo/5872031749/
��Copyright:�ejecutivoagresivo�/�License:�CC�BY�2.0
*�ESAT�KULeuven�│�Pues�aquí�es�donde�trabajo�durante�estos�mes��│�Flickr
��https://www.flickr.com/photos/juanvvc/4688054880/
��Copyright:�Juan�V.�Vera�del�Campo�/�License:�CC�BY-SA�2.0
*�WGS7�DeltaIV�Liftoff�│�Shots�from�the�WGS7�DeltaIV�rocket�la��│�Flickr
��https://www.flickr.com/photos/mseeley1/19953519882/
��Copyright:�Michael�Seeley�/�License:�CC�BY�2.0
*�Sumo�│�Better�Than�Bacon�│�Flickr
��https://www.flickr.com/photos/slurm/3989895242/
��Copyright:�Better�Than�Bacon�/�License:�CC�BY�2.0
*�Start�│�Start�up�│�CréAj�│�Flickr
��https://www.flickr.com/photos/103939386@N07/15423955496/
��Copyright:�CréAj�/�License:�CC�BY-ND�2.0
*�Homework�│�ejecutivoagresivo�│�Flickr
��https://www.flickr.com/photos/ejecutivoagresivo/5872031749/
��Copyright:�ejecutivoagresivo�/�License:�CC�BY�2.0
*�ESAT�KULeuven�│�Pues�aquí�es�donde�trabajo�durante�estos�mes��│�Flickr
��https://www.flickr.com/photos/juanvvc/4688054880/
��Copyright:�Juan�V.�Vera�del�Campo�/�License:�CC�BY-SA�2.0
*�WGS7�DeltaIV�Liftoff�│�Shots�from�the�WGS7�DeltaIV�rocket�la��│�Flickr
��https://www.flickr.com/photos/mseeley1/19953519882/
��Copyright:�Michael�Seeley�/�License:�CC�BY�2.0
*�Sumo�│�Better�Than�Bacon�│�Flickr
��https://www.flickr.com/photos/slurm/3989895242/
��Copyright:�Better�Than�Bacon�/�License:�CC�BY�2.0
*�Start�│�Start�up�│�CréAj�│�Flickr
��https://www.flickr.com/photos/103939386@N07/15423955496/
��Copyright:�CréAj�/�License:�CC�BY-ND�2.0
*�Homework�│�ejecutivoagresivo�│�Flickr
��https://www.flickr.com/photos/ejecutivoagresivo/5872031749/
��Copyright:�ejecutivoagresivo�/�License:�CC�BY�2.0
*�ESAT�KULeuven�│�Pues�aquí�es�donde�trabajo�durante�estos�mes��│�Flickr
��https://www.flickr.com/photos/juanvvc/4688054880/
��Copyright:�Juan�V.�Vera�del�Campo�/�License:�CC�BY-SA�2.0
License of photos #3License of photos #3License of photos #3License of photos #3License of photos #3
*�Thank�you...�│�Thank�you�to�everyone�on�Flickr�who�comments���│�Flickr
��https://www.flickr.com/photos/pearlslaceandruffles/4767722515/
��Copyright:�Dee�♥�/�License:�CC�BY-ND�2.0
*�Thank�you...�│�Thank�you�to�everyone�on�Flickr�who�comments���│�Flickr
��https://www.flickr.com/photos/pearlslaceandruffles/4767722515/
��Copyright:�Dee�♥�/�License:�CC�BY-ND�2.0
*�Thank�you...�│�Thank�you�to�everyone�on�Flickr�who�comments���│�Flickr
��https://www.flickr.com/photos/pearlslaceandruffles/4767722515/
��Copyright:�Dee�♥�/�License:�CC�BY-ND�2.0
*�Thank�you...�│�Thank�you�to�everyone�on�Flickr�who�comments���│�Flickr
��https://www.flickr.com/photos/pearlslaceandruffles/4767722515/
��Copyright:�Dee�♥�/�License:�CC�BY-ND�2.0
*�Thank�you...�│�Thank�you�to�everyone�on�Flickr�who�comments���│�Flickr
��https://www.flickr.com/photos/pearlslaceandruffles/4767722515/
��Copyright:�Dee�♥�/�License:�CC�BY-ND�2.0

Más contenido relacionado

La actualidad más candente

Monkey-patching in Python: a magic trick or a powerful tool?
Monkey-patching in Python: a magic trick or a powerful tool?Monkey-patching in Python: a magic trick or a powerful tool?
Monkey-patching in Python: a magic trick or a powerful tool?
Elizaveta Shashkova
 
Ajhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GCAjhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GC
Kiwamu Okabe
 

La actualidad más candente (20)

Static typing and proof in ATS language
Static typing and proof in ATS languageStatic typing and proof in ATS language
Static typing and proof in ATS language
 
Embedded application designed by ATS language
Embedded application designed by ATS languageEmbedded application designed by ATS language
Embedded application designed by ATS language
 
Functional IoT: Programming Language and OS
Functional IoT: Programming Language and OSFunctional IoT: Programming Language and OS
Functional IoT: Programming Language and OS
 
ATS programming on ESP8266
ATS programming on ESP8266ATS programming on ESP8266
ATS programming on ESP8266
 
Functional IoT: Introduction
Functional IoT: IntroductionFunctional IoT: Introduction
Functional IoT: Introduction
 
ATS/LF for Coq users
ATS/LF for Coq usersATS/LF for Coq users
ATS/LF for Coq users
 
Metasepi team meeting #19: ATS application on Arduino
Metasepi team meeting #19: ATS application on ArduinoMetasepi team meeting #19: ATS application on Arduino
Metasepi team meeting #19: ATS application on Arduino
 
ATS2 updates 2017
ATS2 updates 2017ATS2 updates 2017
ATS2 updates 2017
 
Arduino programming of ML-style in ATS
Arduino programming of ML-style in ATSArduino programming of ML-style in ATS
Arduino programming of ML-style in ATS
 
Metasepi team meeting #17: Invariant captured by ATS's API
Metasepi team meeting #17: Invariant captured by ATS's APIMetasepi team meeting #17: Invariant captured by ATS's API
Metasepi team meeting #17: Invariant captured by ATS's API
 
Past and today of Metasepi project
Past and today of Metasepi projectPast and today of Metasepi project
Past and today of Metasepi project
 
"Black Clouds and Silver Linings in Node.js Security" Liran Tal
"Black Clouds and Silver Linings in Node.js Security" Liran Tal"Black Clouds and Silver Linings in Node.js Security" Liran Tal
"Black Clouds and Silver Linings in Node.js Security" Liran Tal
 
Spring, CDI, Jakarta EE good parts
Spring, CDI, Jakarta EE good partsSpring, CDI, Jakarta EE good parts
Spring, CDI, Jakarta EE good parts
 
Ruby - The Hard Bits
Ruby - The Hard BitsRuby - The Hard Bits
Ruby - The Hard Bits
 
2009 Eclipse Con
2009 Eclipse Con2009 Eclipse Con
2009 Eclipse Con
 
Monkey-patching in Python: a magic trick or a powerful tool?
Monkey-patching in Python: a magic trick or a powerful tool?Monkey-patching in Python: a magic trick or a powerful tool?
Monkey-patching in Python: a magic trick or a powerful tool?
 
A Post-Apocalyptic sun.misc.Unsafe World by Christoph engelbert
A Post-Apocalyptic sun.misc.Unsafe World by Christoph engelbertA Post-Apocalyptic sun.misc.Unsafe World by Christoph engelbert
A Post-Apocalyptic sun.misc.Unsafe World by Christoph engelbert
 
Ajhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GCAjhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GC
 
DNSSec
DNSSecDNSSec
DNSSec
 
Managing a R&D Lab with Foreman
Managing a R&D Lab with ForemanManaging a R&D Lab with Foreman
Managing a R&D Lab with Foreman
 

Destacado

Destacado (20)

SecureAssist Enterprise Portal APIガイド
SecureAssist Enterprise Portal APIガイドSecureAssist Enterprise Portal APIガイド
SecureAssist Enterprise Portal APIガイド
 
Does Infer dream of design by contract?
Does Infer dream of design by contract?Does Infer dream of design by contract?
Does Infer dream of design by contract?
 
五軒家スプリント10月度 タイムスケジュール
五軒家スプリント10月度 タイムスケジュール五軒家スプリント10月度 タイムスケジュール
五軒家スプリント10月度 タイムスケジュール
 
OthloEvent #9 Xamarinハンズオン
OthloEvent #9 XamarinハンズオンOthloEvent #9 Xamarinハンズオン
OthloEvent #9 Xamarinハンズオン
 
WebサービスにおけるWebデザイナーの働き方
WebサービスにおけるWebデザイナーの働き方WebサービスにおけるWebデザイナーの働き方
WebサービスにおけるWebデザイナーの働き方
 
名古屋アジャイル勉強会「コンピテンシーを活用した人財育成」
名古屋アジャイル勉強会「コンピテンシーを活用した人財育成」名古屋アジャイル勉強会「コンピテンシーを活用した人財育成」
名古屋アジャイル勉強会「コンピテンシーを活用した人財育成」
 
第8回 Web 動画 サイト講座 〜 Webサイトを完成させ、来シーズンのトピックを考えよう - NAMO (NAgoya Movie Obenkyokai)
第8回 Web 動画 サイト講座 〜 Webサイトを完成させ、来シーズンのトピックを考えよう - NAMO (NAgoya Movie Obenkyokai)第8回 Web 動画 サイト講座 〜 Webサイトを完成させ、来シーズンのトピックを考えよう - NAMO (NAgoya Movie Obenkyokai)
第8回 Web 動画 サイト講座 〜 Webサイトを完成させ、来シーズンのトピックを考えよう - NAMO (NAgoya Movie Obenkyokai)
 
GCC GENERIC
GCC GENERICGCC GENERIC
GCC GENERIC
 
Safer IoT using functional language
Safer IoT using functional languageSafer IoT using functional language
Safer IoT using functional language
 
サーバー構築ハンズオンマニュアル サンプル
サーバー構築ハンズオンマニュアル サンプルサーバー構築ハンズオンマニュアル サンプル
サーバー構築ハンズオンマニュアル サンプル
 
SecureAssist Visual Studio Package 導入ガイド
SecureAssist Visual Studio Package 導入ガイドSecureAssist Visual Studio Package 導入ガイド
SecureAssist Visual Studio Package 導入ガイド
 
SecureAssist Enterprise Portal 導入ガイド
SecureAssist Enterprise Portal 導入ガイドSecureAssist Enterprise Portal 導入ガイド
SecureAssist Enterprise Portal 導入ガイド
 
SecureAssist IntelliJ Plug-in 導入ガイド
SecureAssist IntelliJ Plug-in 導入ガイドSecureAssist IntelliJ Plug-in 導入ガイド
SecureAssist IntelliJ Plug-in 導入ガイド
 
SecureAssist Eclipse Plug-in 導入ガイド
SecureAssist Eclipse Plug-in 導入ガイドSecureAssist Eclipse Plug-in 導入ガイド
SecureAssist Eclipse Plug-in 導入ガイド
 
データ解析のための統計モデリング入門第5章
データ解析のための統計モデリング入門第5章データ解析のための統計モデリング入門第5章
データ解析のための統計モデリング入門第5章
 
伝える・見せる技術
伝える・見せる技術伝える・見せる技術
伝える・見せる技術
 
120901fp key
120901fp key120901fp key
120901fp key
 
鹿児島に引っ越しました
鹿児島に引っ越しました鹿児島に引っ越しました
鹿児島に引っ越しました
 
サーバー構築ハンズオンマニュアル セキュアなプロトコルを使ってみようサンプル
サーバー構築ハンズオンマニュアル セキュアなプロトコルを使ってみようサンプルサーバー構築ハンズオンマニュアル セキュアなプロトコルを使ってみようサンプル
サーバー構築ハンズオンマニュアル セキュアなプロトコルを使ってみようサンプル
 
Hot potato Privilege Escalation
Hot potato Privilege EscalationHot potato Privilege Escalation
Hot potato Privilege Escalation
 

Similar a Hands-on VeriFast with STM32 microcontroller

Similar a Hands-on VeriFast with STM32 microcontroller (20)

Hands-on VeriFast with STM32 microcontroller @ Osaka
Hands-on VeriFast with STM32 microcontroller @ OsakaHands-on VeriFast with STM32 microcontroller @ Osaka
Hands-on VeriFast with STM32 microcontroller @ Osaka
 
Hands-on VeriFast with STM32 microcontroller @ Nagoya
Hands-on VeriFast with STM32 microcontroller @ NagoyaHands-on VeriFast with STM32 microcontroller @ Nagoya
Hands-on VeriFast with STM32 microcontroller @ Nagoya
 
RTOS application verified by VeriFast, and future plan
RTOS application verified by VeriFast, and future planRTOS application verified by VeriFast, and future plan
RTOS application verified by VeriFast, and future plan
 
Introduction to VeriFast @ Kyoto
Introduction to VeriFast @ KyotoIntroduction to VeriFast @ Kyoto
Introduction to VeriFast @ Kyoto
 
Smart.js: JavaScript engine running on tiny MCU
Smart.js: JavaScript engine running on tiny MCUSmart.js: JavaScript engine running on tiny MCU
Smart.js: JavaScript engine running on tiny MCU
 
Emacs verilog-mode is coming to Debian, again
Emacs verilog-mode is coming to Debian, againEmacs verilog-mode is coming to Debian, again
Emacs verilog-mode is coming to Debian, again
 
Spark Summit EU talk by William Benton
Spark Summit EU talk by William BentonSpark Summit EU talk by William Benton
Spark Summit EU talk by William Benton
 
Free The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainFree The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own Domain
 
Ephemeral DevOps: Adventures in Managing Short-Lived Systems
Ephemeral DevOps: Adventures in Managing Short-Lived SystemsEphemeral DevOps: Adventures in Managing Short-Lived Systems
Ephemeral DevOps: Adventures in Managing Short-Lived Systems
 
Repositories as Code
Repositories as CodeRepositories as Code
Repositories as Code
 
Thunderbolts and Lightning: Very Very Frightening
Thunderbolts and Lightning: Very Very FrighteningThunderbolts and Lightning: Very Very Frightening
Thunderbolts and Lightning: Very Very Frightening
 
An OCaml newbie meets Camlp4 parser
An OCaml newbie meets Camlp4 parserAn OCaml newbie meets Camlp4 parser
An OCaml newbie meets Camlp4 parser
 
Containerize vs Virtualize
Containerize vs VirtualizeContainerize vs Virtualize
Containerize vs Virtualize
 
NetDevOps Developer Environments with Vagrant @ SCALE16x
NetDevOps Developer Environments with Vagrant @ SCALE16xNetDevOps Developer Environments with Vagrant @ SCALE16x
NetDevOps Developer Environments with Vagrant @ SCALE16x
 
Git Going With DVCS v1.5.1
Git Going With DVCS v1.5.1Git Going With DVCS v1.5.1
Git Going With DVCS v1.5.1
 
Cfgmgmtcamp 2023 — eBPF Superpowers
Cfgmgmtcamp 2023 — eBPF SuperpowersCfgmgmtcamp 2023 — eBPF Superpowers
Cfgmgmtcamp 2023 — eBPF Superpowers
 
IPv6 for Pentesters
IPv6 for PentestersIPv6 for Pentesters
IPv6 for Pentesters
 
IPv6 for Pentesters
IPv6 for PentestersIPv6 for Pentesters
IPv6 for Pentesters
 
Getting Started with PoolParty and EC2
Getting Started with PoolParty and EC2Getting Started with PoolParty and EC2
Getting Started with PoolParty and EC2
 
The Container Security Checklist
The Container Security Checklist The Container Security Checklist
The Container Security Checklist
 

Último

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Último (20)

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 

Hands-on VeriFast with STM32 microcontroller

  • 1. Hands-on VeriFast with STM32 microcontroller Hands-on VeriFast with STM32 microcontroller Hands-on VeriFast with STM32 microcontroller Hands-on VeriFast with STM32 microcontroller Hands-on VeriFast with STM32 microcontroller Kiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu Okabe
  • 2. Table of ContentsTable of ContentsTable of ContentsTable of ContentsTable of Contents ☆ Introduce ChibiOS/RT which is a RTOS☆ Introduce ChibiOS/RT which is a RTOS☆ Introduce ChibiOS/RT which is a RTOS☆ Introduce ChibiOS/RT which is a RTOS☆ Introduce ChibiOS/RT which is a RTOS ☆ Get development environment for ChibiOS/RT☆ Get development environment for ChibiOS/RT☆ Get development environment for ChibiOS/RT☆ Get development environment for ChibiOS/RT☆ Get development environment for ChibiOS/RT ☆ Build sample application on ChibiOS/RT☆ Build sample application on ChibiOS/RT☆ Build sample application on ChibiOS/RT☆ Build sample application on ChibiOS/RT☆ Build sample application on ChibiOS/RT ☆ Introduce STM32 microcontroller☆ Introduce STM32 microcontroller☆ Introduce STM32 microcontroller☆ Introduce STM32 microcontroller☆ Introduce STM32 microcontroller ☆ Run the application on STM32 board☆ Run the application on STM32 board☆ Run the application on STM32 board☆ Run the application on STM32 board☆ Run the application on STM32 board ☆ Introduce VeriFast☆ Introduce VeriFast☆ Introduce VeriFast☆ Introduce VeriFast☆ Introduce VeriFast ☆ Verify the application using VeriFast☆ Verify the application using VeriFast☆ Verify the application using VeriFast☆ Verify the application using VeriFast☆ Verify the application using VeriFast
  • 3. What's ChibiOS/RT?What's ChibiOS/RT?What's ChibiOS/RT?What's ChibiOS/RT?What's ChibiOS/RT? ☆ http://www.chibios.org/☆ http://www.chibios.org/☆ http://www.chibios.org/☆ http://www.chibios.org/☆ http://www.chibios.org/ ☆ Simple/Small/Fast/Portable real-time OS☆ Simple/Small/Fast/Portable real-time OS☆ Simple/Small/Fast/Portable real-time OS☆ Simple/Small/Fast/Portable real-time OS☆ Simple/Small/Fast/Portable real-time OS ☆ Run on ARM Cortex-M, Arduino Uno, PowerPC e200 ☆ Run on ARM Cortex-M, Arduino Uno, PowerPC e200 ☆ Run on ARM Cortex-M, Arduino Uno, PowerPC e200 ☆ Run on ARM Cortex-M, Arduino Uno, PowerPC e200 ☆ Run on ARM Cortex-M, Arduino Uno, PowerPC e200 ☆ Context Switch (STM32F4xx): 0.40 µsec☆ Context Switch (STM32F4xx): 0.40 µsec☆ Context Switch (STM32F4xx): 0.40 µsec☆ Context Switch (STM32F4xx): 0.40 µsec☆ Context Switch (STM32F4xx): 0.40 µsec ☆ Kernel Size (STM32F4xx): 6172 byte☆ Kernel Size (STM32F4xx): 6172 byte☆ Kernel Size (STM32F4xx): 6172 byte☆ Kernel Size (STM32F4xx): 6172 byte☆ Kernel Size (STM32F4xx): 6172 byte
  • 4. Get the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #Windows Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/ README.Windows.en.md Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/ README.Windows.en.md Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/ README.Windows.en.md Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/ README.Windows.en.md Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/ README.Windows.en.md ☆ Install following:☆ Install following:☆ Install following:☆ Install following:☆ Install following: *�https://git-for-windows.github.io/ *�https://launchpad.net/gcc-arm-embedded/+download *�https://ttssh2.osdn.jp/index.html.en *�https://cygwin.com/ *�https://git-for-windows.github.io/ *�https://launchpad.net/gcc-arm-embedded/+download *�https://ttssh2.osdn.jp/index.html.en *�https://cygwin.com/ *�https://git-for-windows.github.io/ *�https://launchpad.net/gcc-arm-embedded/+download *�https://ttssh2.osdn.jp/index.html.en *�https://cygwin.com/ *�https://git-for-windows.github.io/ *�https://launchpad.net/gcc-arm-embedded/+download *�https://ttssh2.osdn.jp/index.html.en *�https://cygwin.com/ *�https://git-for-windows.github.io/ *�https://launchpad.net/gcc-arm-embedded/+download *�https://ttssh2.osdn.jp/index.html.en *�https://cygwin.com/ ☆ Install following cygwin packages☆ Install following cygwin packages☆ Install following cygwin packages☆ Install following cygwin packages☆ Install following cygwin packages *�cmake *�libusb1.0-devel *�cmake *�libusb1.0-devel *�cmake *�libusb1.0-devel *�cmake *�libusb1.0-devel *�cmake *�libusb1.0-devel
  • 5. Get the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #Windows ☆ Open cygwin terminal, and install "stlink":☆ Open cygwin terminal, and install "stlink":☆ Open cygwin terminal, and install "stlink":☆ Open cygwin terminal, and install "stlink":☆ Open cygwin terminal, and install "stlink": $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�make�install) $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�make�install) $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�make�install) $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�make�install) $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�make�install) ☆ Download VeriFast from following URL, unzip it and set PATH to "verifast-XXXXXXX/bin" directory. ☆ Download VeriFast from following URL, unzip it and set PATH to "verifast-XXXXXXX/bin" directory. ☆ Download VeriFast from following URL, unzip it and set PATH to "verifast-XXXXXXX/bin" directory. ☆ Download VeriFast from following URL, unzip it and set PATH to "verifast-XXXXXXX/bin" directory. ☆ Download VeriFast from following URL, unzip it and set PATH to "verifast-XXXXXXX/bin" directory. https://github.com/verifast/verifast#binarieshttps://github.com/verifast/verifast#binarieshttps://github.com/verifast/verifast#binarieshttps://github.com/verifast/verifast#binarieshttps://github.com/verifast/verifast#binaries
  • 6. Get the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #WindowsGet the devel-environment #Windows ☆ Open cygwin terminal, and checkout custom ChibiOS/RT source code:w ☆ Open cygwin terminal, and checkout custom ChibiOS/RT source code:w ☆ Open cygwin terminal, and checkout custom ChibiOS/RT source code:w ☆ Open cygwin terminal, and checkout custom ChibiOS/RT source code:w ☆ Open cygwin terminal, and checkout custom ChibiOS/RT source code:w $�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git
  • 7. Get the devel-environment #MacOSGet the devel-environment #MacOSGet the devel-environment #MacOSGet the devel-environment #MacOSGet the devel-environment #MacOS Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/ README.MacOS.en.md Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/ README.MacOS.en.md Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/ README.MacOS.en.md Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/ README.MacOS.en.md Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/ README.MacOS.en.md ☆ Install brew packages:☆ Install brew packages:☆ Install brew packages:☆ Install brew packages:☆ Install brew packages: $�brew�tap�PX4/homebrew-px4 $�brew�update $�brew�install�wget�git�gcc-arm-none-eabi�cmake�picocom�libusb $�brew�tap�PX4/homebrew-px4 $�brew�update $�brew�install�wget�git�gcc-arm-none-eabi�cmake�picocom�libusb $�brew�tap�PX4/homebrew-px4 $�brew�update $�brew�install�wget�git�gcc-arm-none-eabi�cmake�picocom�libusb $�brew�tap�PX4/homebrew-px4 $�brew�update $�brew�install�wget�git�gcc-arm-none-eabi�cmake�picocom�libusb $�brew�tap�PX4/homebrew-px4 $�brew�update $�brew�install�wget�git�gcc-arm-none-eabi�cmake�picocom�libusb ☆ Install "stlink":☆ Install "stlink":☆ Install "stlink":☆ Install "stlink":☆ Install "stlink": $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�sudo�make�install) $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�sudo�make�install) $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�sudo�make�install) $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�sudo�make�install) $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�sudo�make�install)
  • 8. Get the devel-environment #MacOSGet the devel-environment #MacOSGet the devel-environment #MacOSGet the devel-environment #MacOSGet the devel-environment #MacOS ☆ Download VeriFast, unzip it and set PATH:☆ Download VeriFast, unzip it and set PATH:☆ Download VeriFast, unzip it and set PATH:☆ Download VeriFast, unzip it and set PATH:☆ Download VeriFast, unzip it and set PATH: $�wget� http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn. com/verifast-nightly-osx.tar.gz $�tar�xf�verifast-nightly-osx.tar.gz $�mv�verifast-*/�verifast $�export�PATH=`pwd`/verifast/bin:$PATH $�wget� http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn. com/verifast-nightly-osx.tar.gz $�tar�xf�verifast-nightly-osx.tar.gz $�mv�verifast-*/�verifast $�export�PATH=`pwd`/verifast/bin:$PATH $�wget� http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn. com/verifast-nightly-osx.tar.gz $�tar�xf�verifast-nightly-osx.tar.gz $�mv�verifast-*/�verifast $�export�PATH=`pwd`/verifast/bin:$PATH $�wget� http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn. com/verifast-nightly-osx.tar.gz $�tar�xf�verifast-nightly-osx.tar.gz $�mv�verifast-*/�verifast $�export�PATH=`pwd`/verifast/bin:$PATH $�wget� http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn. com/verifast-nightly-osx.tar.gz $�tar�xf�verifast-nightly-osx.tar.gz $�mv�verifast-*/�verifast $�export�PATH=`pwd`/verifast/bin:$PATH ☆ Checkout custom ChibiOS/RT source code:☆ Checkout custom ChibiOS/RT source code:☆ Checkout custom ChibiOS/RT source code:☆ Checkout custom ChibiOS/RT source code:☆ Checkout custom ChibiOS/RT source code: $�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git
  • 9. Get the devel-environment #LinuxGet the devel-environment #LinuxGet the devel-environment #LinuxGet the devel-environment #LinuxGet the devel-environment #Linux Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/ README.Linux.en.md Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/ README.Linux.en.md Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/ README.Linux.en.md Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/ README.Linux.en.md Detail:�https://github.com/fpiot/chibios-verifast/blob/master/doc/ README.Linux.en.md ☆ Install deb packages:☆ Install deb packages:☆ Install deb packages:☆ Install deb packages:☆ Install deb packages: $�sudo�apt-get�install�wget�git�libgtk2.0-0�libusb-1.0-0-dev�libgtk-3-dev� build-essential�cmake�gcc-arm-none-eabi�gdb-arm-none-eabi�picocom $�sudo�apt-get�install�wget�git�libgtk2.0-0�libusb-1.0-0-dev�libgtk-3-dev� build-essential�cmake�gcc-arm-none-eabi�gdb-arm-none-eabi�picocom $�sudo�apt-get�install�wget�git�libgtk2.0-0�libusb-1.0-0-dev�libgtk-3-dev� build-essential�cmake�gcc-arm-none-eabi�gdb-arm-none-eabi�picocom $�sudo�apt-get�install�wget�git�libgtk2.0-0�libusb-1.0-0-dev�libgtk-3-dev� build-essential�cmake�gcc-arm-none-eabi�gdb-arm-none-eabi�picocom $�sudo�apt-get�install�wget�git�libgtk2.0-0�libusb-1.0-0-dev�libgtk-3-dev� build-essential�cmake�gcc-arm-none-eabi�gdb-arm-none-eabi�picocom ☆ Install "stlink":☆ Install "stlink":☆ Install "stlink":☆ Install "stlink":☆ Install "stlink": $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�sudo�make�install) $�sudo�ldconfig $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�sudo�make�install) $�sudo�ldconfig $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�sudo�make�install) $�sudo�ldconfig $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�sudo�make�install) $�sudo�ldconfig $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�sudo�make�install) $�sudo�ldconfig
  • 10. Get the devel-environment #LinuxGet the devel-environment #LinuxGet the devel-environment #LinuxGet the devel-environment #LinuxGet the devel-environment #Linux ☆ Download VeriFast, unzip it and set PATH:☆ Download VeriFast, unzip it and set PATH:☆ Download VeriFast, unzip it and set PATH:☆ Download VeriFast, unzip it and set PATH:☆ Download VeriFast, unzip it and set PATH: $�wget� http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn. com/verifast-nightly.tar.gz $�tar�xf�verifast-nightly.tar.gz $�mv�verifast-*/�verifast $�export�PATH=`pwd`/verifast/bin:$PATH $�wget� http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn. com/verifast-nightly.tar.gz $�tar�xf�verifast-nightly.tar.gz $�mv�verifast-*/�verifast $�export�PATH=`pwd`/verifast/bin:$PATH $�wget� http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn. com/verifast-nightly.tar.gz $�tar�xf�verifast-nightly.tar.gz $�mv�verifast-*/�verifast $�export�PATH=`pwd`/verifast/bin:$PATH $�wget� http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn. com/verifast-nightly.tar.gz $�tar�xf�verifast-nightly.tar.gz $�mv�verifast-*/�verifast $�export�PATH=`pwd`/verifast/bin:$PATH $�wget� http://82076e0e62875f063ae8-929808a701855dfb71539d0a4342d4be.r54.cf5.rackcdn. com/verifast-nightly.tar.gz $�tar�xf�verifast-nightly.tar.gz $�mv�verifast-*/�verifast $�export�PATH=`pwd`/verifast/bin:$PATH ☆ Checkout custom ChibiOS/RT source code:☆ Checkout custom ChibiOS/RT source code:☆ Checkout custom ChibiOS/RT source code:☆ Checkout custom ChibiOS/RT source code:☆ Checkout custom ChibiOS/RT source code: $�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git$�git�clone�https://github.com/fpiot/chibios-verifast.git
  • 11. Build a ChibiOS applicationBuild a ChibiOS applicationBuild a ChibiOS applicationBuild a ChibiOS applicationBuild a ChibiOS application ☆ Finally build the code:☆ Finally build the code:☆ Finally build the code:☆ Finally build the code:☆ Finally build the code: $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make
  • 12. Coffee break #1Coffee break #1Coffee break #1Coffee break #1Coffee break #1
  • 13. What's STM32?What's STM32?What's STM32?What's STM32?What's STM32? http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit- arm-cortex-mcus.html http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit- arm-cortex-mcus.html http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit- arm-cortex-mcus.html http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit- arm-cortex-mcus.html http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit- arm-cortex-mcus.html The STM32 family of 32-bit Flash microcontrollers based on the ARM Cortex-M processor is designed to offer new degrees of freedom to MCU users. It offers a 32-bit product range that combines very high performance, real-time capabilities, digital signal processing, and low-power, low-voltage operation, while maintaining full integration and ease of development. The STM32 family of 32-bit Flash microcontrollers based on the ARM Cortex-M processor is designed to offer new degrees of freedom to MCU users. It offers a 32-bit product range that combines very high performance, real-time capabilities, digital signal processing, and low-power, low-voltage operation, while maintaining full integration and ease of development. The STM32 family of 32-bit Flash microcontrollers based on the ARM Cortex-M processor is designed to offer new degrees of freedom to MCU users. It offers a 32-bit product range that combines very high performance, real-time capabilities, digital signal processing, and low-power, low-voltage operation, while maintaining full integration and ease of development. The STM32 family of 32-bit Flash microcontrollers based on the ARM Cortex-M processor is designed to offer new degrees of freedom to MCU users. It offers a 32-bit product range that combines very high performance, real-time capabilities, digital signal processing, and low-power, low-voltage operation, while maintaining full integration and ease of development. The STM32 family of 32-bit Flash microcontrollers based on the ARM Cortex-M processor is designed to offer new degrees of freedom to MCU users. It offers a 32-bit product range that combines very high performance, real-time capabilities, digital signal processing, and low-power, low-voltage operation, while maintaining full integration and ease of development.
  • 14. You can free to get own STM32 board!You can free to get own STM32 board!You can free to get own STM32 board!You can free to get own STM32 board!You can free to get own STM32 board! https://developer.mbed.org/platforms/ST-Nucleo-F091RC/https://developer.mbed.org/platforms/ST-Nucleo-F091RC/https://developer.mbed.org/platforms/ST-Nucleo-F091RC/https://developer.mbed.org/platforms/ST-Nucleo-F091RC/https://developer.mbed.org/platforms/ST-Nucleo-F091RC/ ☆ "NUCLEO-F091RC"☆ "NUCLEO-F091RC"☆ "NUCLEO-F091RC"☆ "NUCLEO-F091RC"☆ "NUCLEO-F091RC" ☆ ARM Cortex-M0 CPU / 256 KB Flash / 32 KB SRAM☆ ARM Cortex-M0 CPU / 256 KB Flash / 32 KB SRAM☆ ARM Cortex-M0 CPU / 256 KB Flash / 32 KB SRAM☆ ARM Cortex-M0 CPU / 256 KB Flash / 32 KB SRAM☆ ARM Cortex-M0 CPU / 256 KB Flash / 32 KB SRAM ☆ ADC / DAC / RTC / I2C / USART / SPI / CAN / HDMI CEC ☆ ADC / DAC / RTC / I2C / USART / SPI / CAN / HDMI CEC ☆ ADC / DAC / RTC / I2C / USART / SPI / CAN / HDMI CEC ☆ ADC / DAC / RTC / I2C / USART / SPI / CAN / HDMI CEC ☆ ADC / DAC / RTC / I2C / USART / SPI / CAN / HDMI CEC ☆ Able to download fiwmware and debug it using GDB ☆ Able to download fiwmware and debug it using GDB ☆ Able to download fiwmware and debug it using GDB ☆ Able to download fiwmware and debug it using GDB ☆ Able to download fiwmware and debug it using GDB ☆ Thanks a lot, STMicroelectronics!☆ Thanks a lot, STMicroelectronics!☆ Thanks a lot, STMicroelectronics!☆ Thanks a lot, STMicroelectronics!☆ Thanks a lot, STMicroelectronics!
  • 15. How to run application? #WindowsHow to run application? #WindowsHow to run application? #WindowsHow to run application? #WindowsHow to run application? #Windows ☆ Connect the board to your PC using USB cable☆ Connect the board to your PC using USB cable☆ Connect the board to your PC using USB cable☆ Connect the board to your PC using USB cable☆ Connect the board to your PC using USB cable ☆ Open cygwin terminal, kick "st-util":☆ Open cygwin terminal, kick "st-util":☆ Open cygwin terminal, kick "st-util":☆ Open cygwin terminal, kick "st-util":☆ Open cygwin terminal, kick "st-util": $�(cd�/usr/local/lib�&&�st-util)$�(cd�/usr/local/lib�&&�st-util)$�(cd�/usr/local/lib�&&�st-util)$�(cd�/usr/local/lib�&&�st-util)$�(cd�/usr/local/lib�&&�st-util) ☆ Open another cygwin terminal, and dowload application into the board: ☆ Open another cygwin terminal, and dowload application into the board: ☆ Open another cygwin terminal, and dowload application into the board: ☆ Open another cygwin terminal, and dowload application into the board: ☆ Open another cygwin terminal, and dowload application into the board: $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�gdbwrite $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�gdbwrite $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�gdbwrite $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�gdbwrite $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�gdbwrite
  • 16. How to run application? #WindowsHow to run application? #WindowsHow to run application? #WindowsHow to run application? #WindowsHow to run application? #Windows ☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt: (gdb)�c(gdb)�c(gdb)�c(gdb)�c(gdb)�c ☆ Open serial console using TeraTerm with baud rate 38400 ☆ Open serial console using TeraTerm with baud rate 38400 ☆ Open serial console using TeraTerm with baud rate 38400 ☆ Open serial console using TeraTerm with baud rate 38400 ☆ Open serial console using TeraTerm with baud rate 38400 ☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board
  • 17. How to run application? #MacOSHow to run application? #MacOSHow to run application? #MacOSHow to run application? #MacOSHow to run application? #MacOS ☆ Connect the board to your Mac using USB cable☆ Connect the board to your Mac using USB cable☆ Connect the board to your Mac using USB cable☆ Connect the board to your Mac using USB cable☆ Connect the board to your Mac using USB cable ☆ Kick "st-util":☆ Kick "st-util":☆ Kick "st-util":☆ Kick "st-util":☆ Kick "st-util": $�st-util$�st-util$�st-util$�st-util$�st-util ☆ Open another terminal, and download application into the board: ☆ Open another terminal, and download application into the board: ☆ Open another terminal, and download application into the board: ☆ Open another terminal, and download application into the board: ☆ Open another terminal, and download application into the board: $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�gdbwrite $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�gdbwrite $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�gdbwrite $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�gdbwrite $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�gdbwrite
  • 18. How to run application? #MacOSHow to run application? #MacOSHow to run application? #MacOSHow to run application? #MacOSHow to run application? #MacOS ☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt: (gdb)�c(gdb)�c(gdb)�c(gdb)�c(gdb)�c ☆ Open another terminal, and open serial console:☆ Open another terminal, and open serial console:☆ Open another terminal, and open serial console:☆ Open another terminal, and open serial console:☆ Open another terminal, and open serial console: $�picocom�-b�38400�/dev/tty.usbmodem1423$�picocom�-b�38400�/dev/tty.usbmodem1423$�picocom�-b�38400�/dev/tty.usbmodem1423$�picocom�-b�38400�/dev/tty.usbmodem1423$�picocom�-b�38400�/dev/tty.usbmodem1423 ☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board
  • 19. How to run application? #LinuxHow to run application? #LinuxHow to run application? #LinuxHow to run application? #LinuxHow to run application? #Linux ☆ Connect the board to your PC using USB cable☆ Connect the board to your PC using USB cable☆ Connect the board to your PC using USB cable☆ Connect the board to your PC using USB cable☆ Connect the board to your PC using USB cable ☆ Kick "st-util":☆ Kick "st-util":☆ Kick "st-util":☆ Kick "st-util":☆ Kick "st-util": $�sudo�st-util$�sudo�st-util$�sudo�st-util$�sudo�st-util$�sudo�st-util ☆ Open another terminal, and download application into the board: ☆ Open another terminal, and download application into the board: ☆ Open another terminal, and download application into the board: ☆ Open another terminal, and download application into the board: ☆ Open another terminal, and download application into the board: $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�gdbwrite $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�gdbwrite $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�gdbwrite $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�gdbwrite $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�gdbwrite
  • 20. How to run application? #LinuxHow to run application? #LinuxHow to run application? #LinuxHow to run application? #LinuxHow to run application? #Linux ☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt:☆ Continue application from GDB prompt: (gdb)�c(gdb)�c(gdb)�c(gdb)�c(gdb)�c ☆ Open another terminal, and open serial console:☆ Open another terminal, and open serial console:☆ Open another terminal, and open serial console:☆ Open another terminal, and open serial console:☆ Open another terminal, and open serial console: $�picocom�-b�38400�/dev/ttyACM0$�picocom�-b�38400�/dev/ttyACM0$�picocom�-b�38400�/dev/ttyACM0$�picocom�-b�38400�/dev/ttyACM0$�picocom�-b�38400�/dev/ttyACM0 ☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board☆ Push "USER" button on the board
  • 21. Do you see test log of ChibiOS?Do you see test log of ChibiOS?Do you see test log of ChibiOS?Do you see test log of ChibiOS?Do you see test log of ChibiOS? ☆ You will see following log on serial console:☆ You will see following log on serial console:☆ You will see following log on serial console:☆ You will see following log on serial console:☆ You will see following log on serial console: ***�ChibiOS/RT�test�suite *** ***�Kernel:�������3.1.5 ***�Compiled:�����Jan�15�2017�-�20:38:01 ***�Compiler:�����GCC�4.8.4�20140725�(release)�[ARM/embedded-4_8-branch� revision�213147] ***�Architecture:�ARMv6-M ***�Core�Variant:�Cortex-M0 ***�Port�Info:����Preemption�through�NMI ***�Platform:�����STM32F091xC�Entry�Level�Access�Line�devices ***�Test�Board:���STMicroelectronics�NUCLEO-F091RC ***�ChibiOS/RT�test�suite *** ***�Kernel:�������3.1.5 ***�Compiled:�����Jan�15�2017�-�20:38:01 ***�Compiler:�����GCC�4.8.4�20140725�(release)�[ARM/embedded-4_8-branch� revision�213147] ***�Architecture:�ARMv6-M ***�Core�Variant:�Cortex-M0 ***�Port�Info:����Preemption�through�NMI ***�Platform:�����STM32F091xC�Entry�Level�Access�Line�devices ***�Test�Board:���STMicroelectronics�NUCLEO-F091RC ***�ChibiOS/RT�test�suite *** ***�Kernel:�������3.1.5 ***�Compiled:�����Jan�15�2017�-�20:38:01 ***�Compiler:�����GCC�4.8.4�20140725�(release)�[ARM/embedded-4_8-branch� revision�213147] ***�Architecture:�ARMv6-M ***�Core�Variant:�Cortex-M0 ***�Port�Info:����Preemption�through�NMI ***�Platform:�����STM32F091xC�Entry�Level�Access�Line�devices ***�Test�Board:���STMicroelectronics�NUCLEO-F091RC ***�ChibiOS/RT�test�suite *** ***�Kernel:�������3.1.5 ***�Compiled:�����Jan�15�2017�-�20:38:01 ***�Compiler:�����GCC�4.8.4�20140725�(release)�[ARM/embedded-4_8-branch� revision�213147] ***�Architecture:�ARMv6-M ***�Core�Variant:�Cortex-M0 ***�Port�Info:����Preemption�through�NMI ***�Platform:�����STM32F091xC�Entry�Level�Access�Line�devices ***�Test�Board:���STMicroelectronics�NUCLEO-F091RC ***�ChibiOS/RT�test�suite *** ***�Kernel:�������3.1.5 ***�Compiled:�����Jan�15�2017�-�20:38:01 ***�Compiler:�����GCC�4.8.4�20140725�(release)�[ARM/embedded-4_8-branch� revision�213147] ***�Architecture:�ARMv6-M ***�Core�Variant:�Cortex-M0 ***�Port�Info:����Preemption�through�NMI ***�Platform:�����STM32F091xC�Entry�Level�Access�Line�devices ***�Test�Board:���STMicroelectronics�NUCLEO-F091RC
  • 22. Coffee break #2Coffee break #2Coffee break #2Coffee break #2Coffee break #2
  • 23. What's VeriFast?What's VeriFast?What's VeriFast?What's VeriFast?What's VeriFast? ☆ https://github.com/verifast/verifast☆ https://github.com/verifast/verifast☆ https://github.com/verifast/verifast☆ https://github.com/verifast/verifast☆ https://github.com/verifast/verifast ☆ A verifier for single-threaded and multithreaded C language programs annotated with preconditions and postconditions written in separation logic. ☆ A verifier for single-threaded and multithreaded C language programs annotated with preconditions and postconditions written in separation logic. ☆ A verifier for single-threaded and multithreaded C language programs annotated with preconditions and postconditions written in separation logic. ☆ A verifier for single-threaded and multithreaded C language programs annotated with preconditions and postconditions written in separation logic. ☆ A verifier for single-threaded and multithreaded C language programs annotated with preconditions and postconditions written in separation logic. ☆ VeriFast is easy to use with the graphical IDE.☆ VeriFast is easy to use with the graphical IDE.☆ VeriFast is easy to use with the graphical IDE.☆ VeriFast is easy to use with the graphical IDE.☆ VeriFast is easy to use with the graphical IDE.
  • 24. How to verify C code using VeriFast?How to verify C code using VeriFast?How to verify C code using VeriFast?How to verify C code using VeriFast?How to verify C code using VeriFast? Please read VeriFast Tutorial:Please read VeriFast Tutorial:Please read VeriFast Tutorial:Please read VeriFast Tutorial:Please read VeriFast Tutorial: ☆ English:☆ English:☆ English:☆ English:☆ English: https://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdfhttps://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdfhttps://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdfhttps://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdfhttps://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdf ☆ Japanese:☆ Japanese:☆ Japanese:☆ Japanese:☆ Japanese: https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/ Tutorial.md https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/ Tutorial.md https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/ Tutorial.md https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/ Tutorial.md https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/ Tutorial.md
  • 25. How to verify application?How to verify application?How to verify application?How to verify application?How to verify application? Simply kick GNU make on your terminal:Simply kick GNU make on your terminal:Simply kick GNU make on your terminal:Simply kick GNU make on your terminal:Simply kick GNU make on your terminal: $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�vfide $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�vfide $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�vfide $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�vfide $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�vfide
  • 26. What should be verified on ChibiOS?What should be verified on ChibiOS?What should be verified on ChibiOS?What should be verified on ChibiOS?What should be verified on ChibiOS? ☆ ChibiOS has own system states☆ ChibiOS has own system states☆ ChibiOS has own system states☆ ChibiOS has own system states☆ ChibiOS has own system states
  • 27. The state chart means...The state chart means...The state chart means...The state chart means...The state chart means... ☆ Application start at "Init" state☆ Application start at "Init" state☆ Application start at "Init" state☆ Application start at "Init" state☆ Application start at "Init" state ☆ Change into "HALInited" state calling halInit()☆ Change into "HALInited" state calling halInit()☆ Change into "HALInited" state calling halInit()☆ Change into "HALInited" state calling halInit()☆ Change into "HALInited" state calling halInit() ☆ Change into "Thread" state calling chSysInit()☆ Change into "Thread" state calling chSysInit()☆ Change into "Thread" state calling chSysInit()☆ Change into "Thread" state calling chSysInit()☆ Change into "Thread" state calling chSysInit() ☆ You can call some ChibiOS API on "Thread" state☆ You can call some ChibiOS API on "Thread" state☆ You can call some ChibiOS API on "Thread" state☆ You can call some ChibiOS API on "Thread" state☆ You can call some ChibiOS API on "Thread" state But run-time error is caused by violation. We would like to capture it on verification using VeriFast. But run-time error is caused by violation. We would like to capture it on verification using VeriFast. But run-time error is caused by violation. We would like to capture it on verification using VeriFast. But run-time error is caused by violation. We would like to capture it on verification using VeriFast. But run-time error is caused by violation. We would like to capture it on verification using VeriFast.
  • 28. Your code already has assertionYour code already has assertionYour code already has assertionYour code already has assertionYour code already has assertion $�cat�chibios-verifast/verifast_inc/ghost-chibios.gh --snip-- inductive�SystemState�= ��│�InitState ��│�HALInitedState ��│�ThreadState ��│�IRQSuspendedState ��│�IRQDisabledState ��│�IRQWaitState ��│�ISRState ��│�SLockedState ��│�ILockedState ��; predicate�chibios_sys_state_context(int�threadId;�SystemState�state); $�cat�chibios-verifast/verifast_inc/ghost-chibios.gh --snip-- inductive�SystemState�= ��│�InitState ��│�HALInitedState ��│�ThreadState ��│�IRQSuspendedState ��│�IRQDisabledState ��│�IRQWaitState ��│�ISRState ��│�SLockedState ��│�ILockedState ��; predicate�chibios_sys_state_context(int�threadId;�SystemState�state); $�cat�chibios-verifast/verifast_inc/ghost-chibios.gh --snip-- inductive�SystemState�= ��│�InitState ��│�HALInitedState ��│�ThreadState ��│�IRQSuspendedState ��│�IRQDisabledState ��│�IRQWaitState ��│�ISRState ��│�SLockedState ��│�ILockedState ��; predicate�chibios_sys_state_context(int�threadId;�SystemState�state); $�cat�chibios-verifast/verifast_inc/ghost-chibios.gh --snip-- inductive�SystemState�= ��│�InitState ��│�HALInitedState ��│�ThreadState ��│�IRQSuspendedState ��│�IRQDisabledState ��│�IRQWaitState ��│�ISRState ��│�SLockedState ��│�ILockedState ��; predicate�chibios_sys_state_context(int�threadId;�SystemState�state); $�cat�chibios-verifast/verifast_inc/ghost-chibios.gh --snip-- inductive�SystemState�= ��│�InitState ��│�HALInitedState ��│�ThreadState ��│�IRQSuspendedState ��│�IRQDisabledState ��│�IRQWaitState ��│�ISRState ��│�SLockedState ��│�ILockedState ��; predicate�chibios_sys_state_context(int�threadId;�SystemState�state);
  • 29. ChibiOS API has pre/postconditionChibiOS API has pre/postconditionChibiOS API has pre/postconditionChibiOS API has pre/postconditionChibiOS API has pre/postcondition $�cat�chibios-verifast/verifast_inc/hal.h --snip-- void�halInit(void); ����//@�requires�chibios_sys_state_context(currentThread,�InitState); ����//@�ensures�chibios_sys_state_context(currentThread,�HALInitedState); --snip-- $�cat�chibios-verifast/verifast_inc/ch.h --snip-- void�chSysInit(void); ����//@�requires�chibios_sys_state_context(currentThread,�HALInitedState); ����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState); void�chThdSleepMilliseconds(uint32_t�msec); ����//@�requires�chibios_sys_state_context(currentThread,�ThreadState); ����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState); $�cat�chibios-verifast/verifast_inc/hal.h --snip-- void�halInit(void); ����//@�requires�chibios_sys_state_context(currentThread,�InitState); ����//@�ensures�chibios_sys_state_context(currentThread,�HALInitedState); --snip-- $�cat�chibios-verifast/verifast_inc/ch.h --snip-- void�chSysInit(void); ����//@�requires�chibios_sys_state_context(currentThread,�HALInitedState); ����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState); void�chThdSleepMilliseconds(uint32_t�msec); ����//@�requires�chibios_sys_state_context(currentThread,�ThreadState); ����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState); $�cat�chibios-verifast/verifast_inc/hal.h --snip-- void�halInit(void); ����//@�requires�chibios_sys_state_context(currentThread,�InitState); ����//@�ensures�chibios_sys_state_context(currentThread,�HALInitedState); --snip-- $�cat�chibios-verifast/verifast_inc/ch.h --snip-- void�chSysInit(void); ����//@�requires�chibios_sys_state_context(currentThread,�HALInitedState); ����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState); void�chThdSleepMilliseconds(uint32_t�msec); ����//@�requires�chibios_sys_state_context(currentThread,�ThreadState); ����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState); $�cat�chibios-verifast/verifast_inc/hal.h --snip-- void�halInit(void); ����//@�requires�chibios_sys_state_context(currentThread,�InitState); ����//@�ensures�chibios_sys_state_context(currentThread,�HALInitedState); --snip-- $�cat�chibios-verifast/verifast_inc/ch.h --snip-- void�chSysInit(void); ����//@�requires�chibios_sys_state_context(currentThread,�HALInitedState); ����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState); void�chThdSleepMilliseconds(uint32_t�msec); ����//@�requires�chibios_sys_state_context(currentThread,�ThreadState); ����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState); $�cat�chibios-verifast/verifast_inc/hal.h --snip-- void�halInit(void); ����//@�requires�chibios_sys_state_context(currentThread,�InitState); ����//@�ensures�chibios_sys_state_context(currentThread,�HALInitedState); --snip-- $�cat�chibios-verifast/verifast_inc/ch.h --snip-- void�chSysInit(void); ����//@�requires�chibios_sys_state_context(currentThread,�HALInitedState); ����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState); void�chThdSleepMilliseconds(uint32_t�msec); ����//@�requires�chibios_sys_state_context(currentThread,�ThreadState); ����//@�ensures�chibios_sys_state_context(currentThread,�ThreadState);
  • 30. Let's violate the assertionLet's violate the assertionLet's violate the assertionLet's violate the assertionLet's violate the assertion $�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO/main.c int�main(void) ����//@�requires�chibios_sys_state_context(currentThread,�InitState); ����//@�ensures�false; { ��chSysInit();�//�<===�SWAP! ��halInit();���//�<===�SWAP! ��sdStart(&SD2,�NULL); ��while�(true) ����//@�invariant�chibios_sys_state_context(currentThread,�ThreadState); ��{ ����if�(!palReadPad(GPIOC,�GPIOC_BUTTON)) ������TestThread(&SD2); ����chThdSleepMilliseconds(500); ��} } $�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO/main.c int�main(void) ����//@�requires�chibios_sys_state_context(currentThread,�InitState); ����//@�ensures�false; { ��chSysInit();�//�<===�SWAP! ��halInit();���//�<===�SWAP! ��sdStart(&SD2,�NULL); ��while�(true) ����//@�invariant�chibios_sys_state_context(currentThread,�ThreadState); ��{ ����if�(!palReadPad(GPIOC,�GPIOC_BUTTON)) ������TestThread(&SD2); ����chThdSleepMilliseconds(500); ��} } $�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO/main.c int�main(void) ����//@�requires�chibios_sys_state_context(currentThread,�InitState); ����//@�ensures�false; { ��chSysInit();�//�<===�SWAP! ��halInit();���//�<===�SWAP! ��sdStart(&SD2,�NULL); ��while�(true) ����//@�invariant�chibios_sys_state_context(currentThread,�ThreadState); ��{ ����if�(!palReadPad(GPIOC,�GPIOC_BUTTON)) ������TestThread(&SD2); ����chThdSleepMilliseconds(500); ��} } $�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO/main.c int�main(void) ����//@�requires�chibios_sys_state_context(currentThread,�InitState); ����//@�ensures�false; { ��chSysInit();�//�<===�SWAP! ��halInit();���//�<===�SWAP! ��sdStart(&SD2,�NULL); ��while�(true) ����//@�invariant�chibios_sys_state_context(currentThread,�ThreadState); ��{ ����if�(!palReadPad(GPIOC,�GPIOC_BUTTON)) ������TestThread(&SD2); ����chThdSleepMilliseconds(500); ��} } $�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO/main.c int�main(void) ����//@�requires�chibios_sys_state_context(currentThread,�InitState); ����//@�ensures�false; { ��chSysInit();�//�<===�SWAP! ��halInit();���//�<===�SWAP! ��sdStart(&SD2,�NULL); ��while�(true) ����//@�invariant�chibios_sys_state_context(currentThread,�ThreadState); ��{ ����if�(!palReadPad(GPIOC,�GPIOC_BUTTON)) ������TestThread(&SD2); ����chThdSleepMilliseconds(500); ��} }
  • 31. Then you will see error on verificationThen you will see error on verificationThen you will see error on verificationThen you will see error on verificationThen you will see error on verification
  • 32. HomeworkHomeworkHomeworkHomeworkHomework ☆ Verify ChibiOS/RT thread blinking LED☆ Verify ChibiOS/RT thread blinking LED☆ Verify ChibiOS/RT thread blinking LED☆ Verify ChibiOS/RT thread blinking LED☆ Verify ChibiOS/RT thread blinking LED ☆ Verify chEvtBroadcastI() which can be call from I-Locked or S-Locked state ☆ Verify chEvtBroadcastI() which can be call from I-Locked or S-Locked state ☆ Verify chEvtBroadcastI() which can be call from I-Locked or S-Locked state ☆ Verify chEvtBroadcastI() which can be call from I-Locked or S-Locked state ☆ Verify chEvtBroadcastI() which can be call from I-Locked or S-Locked state http://chibios.sourceforge.net/html/ group__events.html#ga0c3fcdef2ba14d8b6b6da5aa4113f18b http://chibios.sourceforge.net/html/ group__events.html#ga0c3fcdef2ba14d8b6b6da5aa4113f18b http://chibios.sourceforge.net/html/ group__events.html#ga0c3fcdef2ba14d8b6b6da5aa4113f18b http://chibios.sourceforge.net/html/ group__events.html#ga0c3fcdef2ba14d8b6b6da5aa4113f18b http://chibios.sourceforge.net/html/ group__events.html#ga0c3fcdef2ba14d8b6b6da5aa4113f18b ☆ Verify following more complex application:☆ Verify following more complex application:☆ Verify following more complex application:☆ Verify following more complex application:☆ Verify following more complex application: chibios-verifast/ChibiOS_16.1.6/demos/STM32/RT-STM32F746G-DISCOVERY-LWIP- FATFS-USB chibios-verifast/ChibiOS_16.1.6/demos/STM32/RT-STM32F746G-DISCOVERY-LWIP- FATFS-USB chibios-verifast/ChibiOS_16.1.6/demos/STM32/RT-STM32F746G-DISCOVERY-LWIP- FATFS-USB chibios-verifast/ChibiOS_16.1.6/demos/STM32/RT-STM32F746G-DISCOVERY-LWIP- FATFS-USB chibios-verifast/ChibiOS_16.1.6/demos/STM32/RT-STM32F746G-DISCOVERY-LWIP- FATFS-USB
  • 33. Special thanksSpecial thanksSpecial thanksSpecial thanksSpecial thanks ☆ STMicroelectronics provides STM32 boards.☆ STMicroelectronics provides STM32 boards.☆ STMicroelectronics provides STM32 boards.☆ STMicroelectronics provides STM32 boards.☆ STMicroelectronics provides STM32 boards. ☆ Eiwa System Management, Inc. provides this meeting room. ☆ Eiwa System Management, Inc. provides this meeting room. ☆ Eiwa System Management, Inc. provides this meeting room. ☆ Eiwa System Management, Inc. provides this meeting room. ☆ Eiwa System Management, Inc. provides this meeting room. ☆ @ruicc supports around MacOS environment.☆ @ruicc supports around MacOS environment.☆ @ruicc supports around MacOS environment.☆ @ruicc supports around MacOS environment.☆ @ruicc supports around MacOS environment. ☆ @eldesh supports around Windows environment, and gives advice usage of VeriFast. ☆ @eldesh supports around Windows environment, and gives advice usage of VeriFast. ☆ @eldesh supports around Windows environment, and gives advice usage of VeriFast. ☆ @eldesh supports around Windows environment, and gives advice usage of VeriFast. ☆ @eldesh supports around Windows environment, and gives advice usage of VeriFast.
  • 34. License of photos #1License of photos #1License of photos #1License of photos #1License of photos #1 *�Creative�Commons�BBB�│�Flickr ��https://www.flickr.com/photos/steren/2732488224/ ��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0 *�Microsoft�│�Microsoft�Store,�Connecticut,�12/2014�by�Mike�Mo��│�Flickr ��https://www.flickr.com/photos/jeepersmedia/15966145248/ ��Copyright:�Mike�Mozart�/�License:�CC�BY�2.0 *�Mac�20th�anniversary�poster�#14:�iMac�│�The�last�in�the�seri��│�Flickr ��https://www.flickr.com/photos/mwichary/2234474972/ ��Copyright:�Marcin�Wichary�/�License:�CC�BY�2.0 *�Coffee�break�│�I'm�determined�to�do�my�own�latte�art�one�day��│�Flickr ��https://www.flickr.com/photos/kwl/3457656569/ ��Copyright:�Kenny�Louie�/�License:�CC�BY�2.0 *�Coffee�break�│�Matt�Laugier�│�Flickr ��https://www.flickr.com/photos/110206196@N06/14898090455/ ��Copyright:�Matt�Laugier�/�License:�CC�BY�2.0 *�Creative�Commons�BBB�│�Flickr ��https://www.flickr.com/photos/steren/2732488224/ ��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0 *�Microsoft�│�Microsoft�Store,�Connecticut,�12/2014�by�Mike�Mo��│�Flickr ��https://www.flickr.com/photos/jeepersmedia/15966145248/ ��Copyright:�Mike�Mozart�/�License:�CC�BY�2.0 *�Mac�20th�anniversary�poster�#14:�iMac�│�The�last�in�the�seri��│�Flickr ��https://www.flickr.com/photos/mwichary/2234474972/ ��Copyright:�Marcin�Wichary�/�License:�CC�BY�2.0 *�Coffee�break�│�I'm�determined�to�do�my�own�latte�art�one�day��│�Flickr ��https://www.flickr.com/photos/kwl/3457656569/ ��Copyright:�Kenny�Louie�/�License:�CC�BY�2.0 *�Coffee�break�│�Matt�Laugier�│�Flickr ��https://www.flickr.com/photos/110206196@N06/14898090455/ ��Copyright:�Matt�Laugier�/�License:�CC�BY�2.0 *�Creative�Commons�BBB�│�Flickr ��https://www.flickr.com/photos/steren/2732488224/ ��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0 *�Microsoft�│�Microsoft�Store,�Connecticut,�12/2014�by�Mike�Mo��│�Flickr ��https://www.flickr.com/photos/jeepersmedia/15966145248/ ��Copyright:�Mike�Mozart�/�License:�CC�BY�2.0 *�Mac�20th�anniversary�poster�#14:�iMac�│�The�last�in�the�seri��│�Flickr ��https://www.flickr.com/photos/mwichary/2234474972/ ��Copyright:�Marcin�Wichary�/�License:�CC�BY�2.0 *�Coffee�break�│�I'm�determined�to�do�my�own�latte�art�one�day��│�Flickr ��https://www.flickr.com/photos/kwl/3457656569/ ��Copyright:�Kenny�Louie�/�License:�CC�BY�2.0 *�Coffee�break�│�Matt�Laugier�│�Flickr ��https://www.flickr.com/photos/110206196@N06/14898090455/ ��Copyright:�Matt�Laugier�/�License:�CC�BY�2.0 *�Creative�Commons�BBB�│�Flickr ��https://www.flickr.com/photos/steren/2732488224/ ��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0 *�Microsoft�│�Microsoft�Store,�Connecticut,�12/2014�by�Mike�Mo��│�Flickr ��https://www.flickr.com/photos/jeepersmedia/15966145248/ ��Copyright:�Mike�Mozart�/�License:�CC�BY�2.0 *�Mac�20th�anniversary�poster�#14:�iMac�│�The�last�in�the�seri��│�Flickr ��https://www.flickr.com/photos/mwichary/2234474972/ ��Copyright:�Marcin�Wichary�/�License:�CC�BY�2.0 *�Coffee�break�│�I'm�determined�to�do�my�own�latte�art�one�day��│�Flickr ��https://www.flickr.com/photos/kwl/3457656569/ ��Copyright:�Kenny�Louie�/�License:�CC�BY�2.0 *�Coffee�break�│�Matt�Laugier�│�Flickr ��https://www.flickr.com/photos/110206196@N06/14898090455/ ��Copyright:�Matt�Laugier�/�License:�CC�BY�2.0 *�Creative�Commons�BBB�│�Flickr ��https://www.flickr.com/photos/steren/2732488224/ ��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0 *�Microsoft�│�Microsoft�Store,�Connecticut,�12/2014�by�Mike�Mo��│�Flickr ��https://www.flickr.com/photos/jeepersmedia/15966145248/ ��Copyright:�Mike�Mozart�/�License:�CC�BY�2.0 *�Mac�20th�anniversary�poster�#14:�iMac�│�The�last�in�the�seri��│�Flickr ��https://www.flickr.com/photos/mwichary/2234474972/ ��Copyright:�Marcin�Wichary�/�License:�CC�BY�2.0 *�Coffee�break�│�I'm�determined�to�do�my�own�latte�art�one�day��│�Flickr ��https://www.flickr.com/photos/kwl/3457656569/ ��Copyright:�Kenny�Louie�/�License:�CC�BY�2.0 *�Coffee�break�│�Matt�Laugier�│�Flickr ��https://www.flickr.com/photos/110206196@N06/14898090455/ ��Copyright:�Matt�Laugier�/�License:�CC�BY�2.0
  • 35. License of photos #2License of photos #2License of photos #2License of photos #2License of photos #2 *�WGS7�DeltaIV�Liftoff�│�Shots�from�the�WGS7�DeltaIV�rocket�la��│�Flickr ��https://www.flickr.com/photos/mseeley1/19953519882/ ��Copyright:�Michael�Seeley�/�License:�CC�BY�2.0 *�Sumo�│�Better�Than�Bacon�│�Flickr ��https://www.flickr.com/photos/slurm/3989895242/ ��Copyright:�Better�Than�Bacon�/�License:�CC�BY�2.0 *�Start�│�Start�up�│�CréAj�│�Flickr ��https://www.flickr.com/photos/103939386@N07/15423955496/ ��Copyright:�CréAj�/�License:�CC�BY-ND�2.0 *�Homework�│�ejecutivoagresivo�│�Flickr ��https://www.flickr.com/photos/ejecutivoagresivo/5872031749/ ��Copyright:�ejecutivoagresivo�/�License:�CC�BY�2.0 *�ESAT�KULeuven�│�Pues�aquí�es�donde�trabajo�durante�estos�mes��│�Flickr ��https://www.flickr.com/photos/juanvvc/4688054880/ ��Copyright:�Juan�V.�Vera�del�Campo�/�License:�CC�BY-SA�2.0 *�WGS7�DeltaIV�Liftoff�│�Shots�from�the�WGS7�DeltaIV�rocket�la��│�Flickr ��https://www.flickr.com/photos/mseeley1/19953519882/ ��Copyright:�Michael�Seeley�/�License:�CC�BY�2.0 *�Sumo�│�Better�Than�Bacon�│�Flickr ��https://www.flickr.com/photos/slurm/3989895242/ ��Copyright:�Better�Than�Bacon�/�License:�CC�BY�2.0 *�Start�│�Start�up�│�CréAj�│�Flickr ��https://www.flickr.com/photos/103939386@N07/15423955496/ ��Copyright:�CréAj�/�License:�CC�BY-ND�2.0 *�Homework�│�ejecutivoagresivo�│�Flickr ��https://www.flickr.com/photos/ejecutivoagresivo/5872031749/ ��Copyright:�ejecutivoagresivo�/�License:�CC�BY�2.0 *�ESAT�KULeuven�│�Pues�aquí�es�donde�trabajo�durante�estos�mes��│�Flickr ��https://www.flickr.com/photos/juanvvc/4688054880/ ��Copyright:�Juan�V.�Vera�del�Campo�/�License:�CC�BY-SA�2.0 *�WGS7�DeltaIV�Liftoff�│�Shots�from�the�WGS7�DeltaIV�rocket�la��│�Flickr ��https://www.flickr.com/photos/mseeley1/19953519882/ ��Copyright:�Michael�Seeley�/�License:�CC�BY�2.0 *�Sumo�│�Better�Than�Bacon�│�Flickr ��https://www.flickr.com/photos/slurm/3989895242/ ��Copyright:�Better�Than�Bacon�/�License:�CC�BY�2.0 *�Start�│�Start�up�│�CréAj�│�Flickr ��https://www.flickr.com/photos/103939386@N07/15423955496/ ��Copyright:�CréAj�/�License:�CC�BY-ND�2.0 *�Homework�│�ejecutivoagresivo�│�Flickr ��https://www.flickr.com/photos/ejecutivoagresivo/5872031749/ ��Copyright:�ejecutivoagresivo�/�License:�CC�BY�2.0 *�ESAT�KULeuven�│�Pues�aquí�es�donde�trabajo�durante�estos�mes��│�Flickr ��https://www.flickr.com/photos/juanvvc/4688054880/ ��Copyright:�Juan�V.�Vera�del�Campo�/�License:�CC�BY-SA�2.0 *�WGS7�DeltaIV�Liftoff�│�Shots�from�the�WGS7�DeltaIV�rocket�la��│�Flickr ��https://www.flickr.com/photos/mseeley1/19953519882/ ��Copyright:�Michael�Seeley�/�License:�CC�BY�2.0 *�Sumo�│�Better�Than�Bacon�│�Flickr ��https://www.flickr.com/photos/slurm/3989895242/ ��Copyright:�Better�Than�Bacon�/�License:�CC�BY�2.0 *�Start�│�Start�up�│�CréAj�│�Flickr ��https://www.flickr.com/photos/103939386@N07/15423955496/ ��Copyright:�CréAj�/�License:�CC�BY-ND�2.0 *�Homework�│�ejecutivoagresivo�│�Flickr ��https://www.flickr.com/photos/ejecutivoagresivo/5872031749/ ��Copyright:�ejecutivoagresivo�/�License:�CC�BY�2.0 *�ESAT�KULeuven�│�Pues�aquí�es�donde�trabajo�durante�estos�mes��│�Flickr ��https://www.flickr.com/photos/juanvvc/4688054880/ ��Copyright:�Juan�V.�Vera�del�Campo�/�License:�CC�BY-SA�2.0 *�WGS7�DeltaIV�Liftoff�│�Shots�from�the�WGS7�DeltaIV�rocket�la��│�Flickr ��https://www.flickr.com/photos/mseeley1/19953519882/ ��Copyright:�Michael�Seeley�/�License:�CC�BY�2.0 *�Sumo�│�Better�Than�Bacon�│�Flickr ��https://www.flickr.com/photos/slurm/3989895242/ ��Copyright:�Better�Than�Bacon�/�License:�CC�BY�2.0 *�Start�│�Start�up�│�CréAj�│�Flickr ��https://www.flickr.com/photos/103939386@N07/15423955496/ ��Copyright:�CréAj�/�License:�CC�BY-ND�2.0 *�Homework�│�ejecutivoagresivo�│�Flickr ��https://www.flickr.com/photos/ejecutivoagresivo/5872031749/ ��Copyright:�ejecutivoagresivo�/�License:�CC�BY�2.0 *�ESAT�KULeuven�│�Pues�aquí�es�donde�trabajo�durante�estos�mes��│�Flickr ��https://www.flickr.com/photos/juanvvc/4688054880/ ��Copyright:�Juan�V.�Vera�del�Campo�/�License:�CC�BY-SA�2.0
  • 36. License of photos #3License of photos #3License of photos #3License of photos #3License of photos #3 *�Thank�you...�│�Thank�you�to�everyone�on�Flickr�who�comments���│�Flickr ��https://www.flickr.com/photos/pearlslaceandruffles/4767722515/ ��Copyright:�Dee�♥�/�License:�CC�BY-ND�2.0 *�Thank�you...�│�Thank�you�to�everyone�on�Flickr�who�comments���│�Flickr ��https://www.flickr.com/photos/pearlslaceandruffles/4767722515/ ��Copyright:�Dee�♥�/�License:�CC�BY-ND�2.0 *�Thank�you...�│�Thank�you�to�everyone�on�Flickr�who�comments���│�Flickr ��https://www.flickr.com/photos/pearlslaceandruffles/4767722515/ ��Copyright:�Dee�♥�/�License:�CC�BY-ND�2.0 *�Thank�you...�│�Thank�you�to�everyone�on�Flickr�who�comments���│�Flickr ��https://www.flickr.com/photos/pearlslaceandruffles/4767722515/ ��Copyright:�Dee�♥�/�License:�CC�BY-ND�2.0 *�Thank�you...�│�Thank�you�to�everyone�on�Flickr�who�comments���│�Flickr ��https://www.flickr.com/photos/pearlslaceandruffles/4767722515/ ��Copyright:�Dee�♥�/�License:�CC�BY-ND�2.0