SlideShare ist ein Scribd-Unternehmen logo
1 von 50
Downloaden Sie, um offline zu lesen
Hands-on VeriFast with STM32
microcontroller @ Osaka
Hands-on VeriFast with STM32
microcontroller @ Osaka
Hands-on VeriFast with STM32
microcontroller @ Osaka
Hands-on VeriFast with STM32
microcontroller @ Osaka
Hands-on VeriFast with STM32
microcontroller @ Osaka
Kiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu Okabe
Table of ContentsTable of ContentsTable of ContentsTable of ContentsTable of Contents
☆ Introduce ChibiOS/RT as a RTOS☆ Introduce ChibiOS/RT as a RTOS☆ Introduce ChibiOS/RT as a RTOS☆ Introduce ChibiOS/RT as a RTOS☆ Introduce ChibiOS/RT as 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 a sample application on ChibiOS/RT☆ Build a sample application on ChibiOS/RT☆ Build a sample application on ChibiOS/RT☆ Build a sample application on ChibiOS/RT☆ Build a 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 / AVR / PowerPC e200☆ Run on ARM Cortex-M / AVR / PowerPC e200☆ Run on ARM Cortex-M / AVR / PowerPC e200☆ Run on ARM Cortex-M / AVR / PowerPC e200☆ Run on ARM Cortex-M / AVR / 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
Overview of the devel-environmentOverview of the devel-environmentOverview of the devel-environmentOverview of the devel-environmentOverview of the devel-environment
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/
*�http://www.st.com/en/embedded-software/stsw-link009.html
*�https://git-for-windows.github.io/
*�https://launchpad.net/gcc-arm-embedded/+download
*�https://ttssh2.osdn.jp/index.html.en
*�https://cygwin.com/
*�http://www.st.com/en/embedded-software/stsw-link009.html
*�https://git-for-windows.github.io/
*�https://launchpad.net/gcc-arm-embedded/+download
*�https://ttssh2.osdn.jp/index.html.en
*�https://cygwin.com/
*�http://www.st.com/en/embedded-software/stsw-link009.html
*�https://git-for-windows.github.io/
*�https://launchpad.net/gcc-arm-embedded/+download
*�https://ttssh2.osdn.jp/index.html.en
*�https://cygwin.com/
*�http://www.st.com/en/embedded-software/stsw-link009.html
*�https://git-for-windows.github.io/
*�https://launchpad.net/gcc-arm-embedded/+download
*�https://ttssh2.osdn.jp/index.html.en
*�https://cygwin.com/
*�http://www.st.com/en/embedded-software/stsw-link009.html
☆ Install following cygwin packages☆ Install following cygwin packages☆ Install following cygwin packages☆ Install following cygwin packages☆ Install following cygwin packages
cmake�/�gcc-core�(5.3.0)�/�libusb1.0-devel�/�makecmake�/�gcc-core�(5.3.0)�/�libusb1.0-devel�/�makecmake�/�gcc-core�(5.3.0)�/�libusb1.0-devel�/�makecmake�/�gcc-core�(5.3.0)�/�libusb1.0-devel�/�makecmake�/�gcc-core�(5.3.0)�/�libusb1.0-devel�/�make
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)
$�cp�/usr/local/lib/cygstlink-shared-1.dll�/usr/local/bin/
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�make�install)
$�cp�/usr/local/lib/cygstlink-shared-1.dll�/usr/local/bin/
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�make�install)
$�cp�/usr/local/lib/cygstlink-shared-1.dll�/usr/local/bin/
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�make�install)
$�cp�/usr/local/lib/cygstlink-shared-1.dll�/usr/local/bin/
$�git�clone�https://github.com/texane/stlink.git
$�(cd�stlink�&&�make)
$�(cd�stlink/build/Release�&&�make�install)
$�cp�/usr/local/lib/cygstlink-shared-1.dll�/usr/local/bin/
☆ 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:
☆ Open cygwin terminal, and checkout custom
ChibiOS/RT source code:
☆ Open cygwin terminal, and checkout custom
ChibiOS/RT source code:
☆ Open cygwin terminal, and checkout custom
ChibiOS/RT source code:
☆ Open cygwin terminal, and 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 #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, untar it and set PATH:☆ Download VeriFast, untar it and set PATH:☆ Download VeriFast, untar it and set PATH:☆ Download VeriFast, untar it and set PATH:☆ Download VeriFast, untar 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�libgtksourceview2.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�libgtksourceview2.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�libgtksourceview2.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�libgtksourceview2.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�libgtksourceview2.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, untar it and set PATH:☆ Download VeriFast, untar it and set PATH:☆ Download VeriFast, untar it and set PATH:☆ Download VeriFast, untar it and set PATH:☆ Download VeriFast, untar 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/RT applicationBuild a ChibiOS/RT applicationBuild a ChibiOS/RT applicationBuild a ChibiOS/RT applicationBuild a ChibiOS/RT 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 board, today!You can free to get own board, today!You can free to get own board, today!You can free to get own board, today!You can free to get own board, today!
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/
☆ Board name: "NUCLEO-F091RC"☆ Board name: "NUCLEO-F091RC"☆ Board name: "NUCLEO-F091RC"☆ Board name: "NUCLEO-F091RC"☆ Board name: "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
☆ Include ADC / DAC / RTC / I2C / USART / SPI /
CAN / HDMI CEC
☆ Include ADC / DAC / RTC / I2C / USART / SPI /
CAN / HDMI CEC
☆ Include ADC / DAC / RTC / I2C / USART / SPI /
CAN / HDMI CEC
☆ Include ADC / DAC / RTC / I2C / USART / SPI /
CAN / HDMI CEC
☆ Include ADC / DAC / RTC / I2C / USART / SPI /
CAN / HDMI CEC
☆ Download fiwmware and debug it using GDB☆ Download fiwmware and debug it using GDB☆ Download fiwmware and debug it using GDB☆ Download fiwmware and debug it using GDB☆ 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, and download
application into the board:
☆ Open cygwin terminal, and download
application into the board:
☆ Open cygwin terminal, and download
application into the board:
☆ Open cygwin terminal, and download
application into the board:
☆ Open cygwin terminal, and download
application into the board:
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�flash
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�flash
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�flash
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�flash
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�flash
☆ Open serial console using TeraTerm with baud
rate 9600
☆ Open serial console using TeraTerm with baud
rate 9600
☆ Open serial console using TeraTerm with baud
rate 9600
☆ Open serial console using TeraTerm with baud
rate 9600
☆ Open serial console using TeraTerm with baud
rate 9600
☆ 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
☆ Download application into the board:☆ Download application into the board:☆ Download application into the board:☆ Download application into the board:☆ Download application into the board:
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�flash
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�flash
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�flash
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�flash
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�flash
☆ Open serial console:☆ Open serial console:☆ Open serial console:☆ Open serial console:☆ Open serial console:
$�picocom�-b�9600�/dev/tty.usbmodem1423$�picocom�-b�9600�/dev/tty.usbmodem1423$�picocom�-b�9600�/dev/tty.usbmodem1423$�picocom�-b�9600�/dev/tty.usbmodem1423$�picocom�-b�9600�/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
☆ Download application into the board:☆ Download application into the board:☆ Download application into the board:☆ Download application into the board:☆ Download application into the board:
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�flash
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�flash
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�flash
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�flash
$�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO
$�make�flash
☆ Open serial console:☆ Open serial console:☆ Open serial console:☆ Open serial console:☆ Open serial console:
$�picocom�-b�9600�/dev/ttyACM0$�picocom�-b�9600�/dev/ttyACM0$�picocom�-b�9600�/dev/ttyACM0$�picocom�-b�9600�/dev/ttyACM0$�picocom�-b�9600�/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/RT?Do you see test log of ChibiOS/RT?Do you see test log of ChibiOS/RT?Do you see test log of ChibiOS/RT?Do you see test log of ChibiOS/RT?
☆ 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 multi-
threaded C and Java language programs
annotated with preconditions and
postconditions written in separation logic.
☆ A verifier for single-threaded and multi-
threaded C and Java language programs
annotated with preconditions and
postconditions written in separation logic.
☆ A verifier for single-threaded and multi-
threaded C and Java language programs
annotated with preconditions and
postconditions written in separation logic.
☆ A verifier for single-threaded and multi-
threaded C and Java language programs
annotated with preconditions and
postconditions written in separation logic.
☆ A verifier for single-threaded and multi-
threaded C and Java language programs
annotated with preconditions and
postconditions written in separation logic.
☆ VeriFast avoids illegal memory accesses such
like buffer overflow.
☆ VeriFast avoids illegal memory accesses such
like buffer overflow.
☆ VeriFast avoids illegal memory accesses such
like buffer overflow.
☆ VeriFast avoids illegal memory accesses such
like buffer overflow.
☆ VeriFast avoids illegal memory accesses such
like buffer overflow.
☆ VeriFast is easy to use with own graphical IDE.☆ VeriFast is easy to use with own graphical IDE.☆ VeriFast is easy to use with own graphical IDE.☆ VeriFast is easy to use with own graphical IDE.☆ VeriFast is easy to use with own graphical IDE.
Get started with simple exampleGet started with simple exampleGet started with simple exampleGet started with simple exampleGet started with simple example
//�File:�verifast/tutorial_solutions/illegal_access.c
#include�"stdlib.h"
struct�account�{
����int�balance;
};
int�main()
����//@�requires�true;
����//@�ensures�true;
{
����struct�account�*myAccount�=�malloc(sizeof(struct�account));
����//if�(myAccount�==�0)�{�abort();�}�//�Not�checked!
����myAccount->balance�=�5;
����free(myAccount);
����return�0;
}
//�File:�verifast/tutorial_solutions/illegal_access.c
#include�"stdlib.h"
struct�account�{
����int�balance;
};
int�main()
����//@�requires�true;
����//@�ensures�true;
{
����struct�account�*myAccount�=�malloc(sizeof(struct�account));
����//if�(myAccount�==�0)�{�abort();�}�//�Not�checked!
����myAccount->balance�=�5;
����free(myAccount);
����return�0;
}
//�File:�verifast/tutorial_solutions/illegal_access.c
#include�"stdlib.h"
struct�account�{
����int�balance;
};
int�main()
����//@�requires�true;
����//@�ensures�true;
{
����struct�account�*myAccount�=�malloc(sizeof(struct�account));
����//if�(myAccount�==�0)�{�abort();�}�//�Not�checked!
����myAccount->balance�=�5;
����free(myAccount);
����return�0;
}
//�File:�verifast/tutorial_solutions/illegal_access.c
#include�"stdlib.h"
struct�account�{
����int�balance;
};
int�main()
����//@�requires�true;
����//@�ensures�true;
{
����struct�account�*myAccount�=�malloc(sizeof(struct�account));
����//if�(myAccount�==�0)�{�abort();�}�//�Not�checked!
����myAccount->balance�=�5;
����free(myAccount);
����return�0;
}
//�File:�verifast/tutorial_solutions/illegal_access.c
#include�"stdlib.h"
struct�account�{
int�balance;
};
int�main()
//@�requires�true;
//@�ensures�true;
{
struct�account�*myAccount�=�malloc(sizeof(struct�account));
//if�(myAccount�==�0)�{�abort();�}�//�Not�checked!
����myAccount->balance�=�5;
����free(myAccount);
����return�0;
}
Example is compilable and runnable...Example is compilable and runnable...Example is compilable and runnable...Example is compilable and runnable...Example is compilable and runnable...
$�gcc�--version
gcc�(Debian�6.3.0-18)�6.3.0�20170516
Copyright�(C)�2016�Free�Software�Foundation,�Inc.
This�is�free�software;�see�the�source�for�copying�conditions.��There�is�NO
warranty;�not�even�for�MERCHANTABILITY�or�FITNESS�FOR�A�PARTICULAR�PURPOSE.
$�gcc�-Wall�-Wextra�illegal_access.c�#�<=�No�error�shown
$�./a.out����������������������������#�<=�No�segmentation�fault
$�gcc�--version
gcc�(Debian�6.3.0-18)�6.3.0�20170516
Copyright�(C)�2016�Free�Software�Foundation,�Inc.
This�is�free�software;�see�the�source�for�copying�conditions.��There�is�NO
warranty;�not�even�for�MERCHANTABILITY�or�FITNESS�FOR�A�PARTICULAR�PURPOSE.
$�gcc�-Wall�-Wextra�illegal_access.c�#�<=�No�error�shown
$�./a.out����������������������������#�<=�No�segmentation�fault
$�gcc�--version
gcc�(Debian�6.3.0-18)�6.3.0�20170516
Copyright�(C)�2016�Free�Software�Foundation,�Inc.
This�is�free�software;�see�the�source�for�copying�conditions.��There�is�NO
warranty;�not�even�for�MERCHANTABILITY�or�FITNESS�FOR�A�PARTICULAR�PURPOSE.
$�gcc�-Wall�-Wextra�illegal_access.c�#�<=�No�error�shown
$�./a.out����������������������������#�<=�No�segmentation�fault
$�gcc�--version
gcc�(Debian�6.3.0-18)�6.3.0�20170516
Copyright�(C)�2016�Free�Software�Foundation,�Inc.
This�is�free�software;�see�the�source�for�copying�conditions.��There�is�NO
warranty;�not�even�for�MERCHANTABILITY�or�FITNESS�FOR�A�PARTICULAR�PURPOSE.
$�gcc�-Wall�-Wextra�illegal_access.c�#�<=�No�error�shown
$�./a.out����������������������������#�<=�No�segmentation�fault
$�gcc�--version
gcc�(Debian�6.3.0-18)�6.3.0�20170516
Copyright�(C)�2016�Free�Software�Foundation,�Inc.
This�is�free�software;�see�the�source�for�copying�conditions.��There�is�NO
warranty;�not�even�for�MERCHANTABILITY�or�FITNESS�FOR�A�PARTICULAR�PURPOSE.
$�gcc�-Wall�-Wextra�illegal_access.c�#�<=�No�error�shown
$�./a.out����������������������������#�<=�No�segmentation�fault
But SEGV occurs if malloc return NULLBut SEGV occurs if malloc return NULLBut SEGV occurs if malloc return NULLBut SEGV occurs if malloc return NULLBut SEGV occurs if malloc return NULL
$�w3m�http://www.nongnu.org/failmalloc/
$�wget�http://download.savannah.nongnu.org/releases/failmalloc/
failmalloc-1.0.tar.gz
$�tar�xf�failmalloc-1.0.tar.gz
$�(cd�failmalloc-1.0�&&�./configure�&&�make�&&�sudo�make�install)
$�gcc�-Wall�illegal_access.c
$�env�LD_PRELOAD=libfailmalloc.so�./a.out
Segmentation�fault
$�w3m�http://www.nongnu.org/failmalloc/
$�wget�http://download.savannah.nongnu.org/releases/failmalloc/
failmalloc-1.0.tar.gz
$�tar�xf�failmalloc-1.0.tar.gz
$�(cd�failmalloc-1.0�&&�./configure�&&�make�&&�sudo�make�install)
$�gcc�-Wall�illegal_access.c
$�env�LD_PRELOAD=libfailmalloc.so�./a.out
Segmentation�fault
$�w3m�http://www.nongnu.org/failmalloc/
$�wget�http://download.savannah.nongnu.org/releases/failmalloc/
failmalloc-1.0.tar.gz
$�tar�xf�failmalloc-1.0.tar.gz
$�(cd�failmalloc-1.0�&&�./configure�&&�make�&&�sudo�make�install)
$�gcc�-Wall�illegal_access.c
$�env�LD_PRELOAD=libfailmalloc.so�./a.out
Segmentation�fault
$�w3m�http://www.nongnu.org/failmalloc/
$�wget�http://download.savannah.nongnu.org/releases/failmalloc/
failmalloc-1.0.tar.gz
$�tar�xf�failmalloc-1.0.tar.gz
$�(cd�failmalloc-1.0�&&�./configure�&&�make�&&�sudo�make�install)
$�gcc�-Wall�illegal_access.c
$�env�LD_PRELOAD=libfailmalloc.so�./a.out
Segmentation�fault
$�w3m�http://www.nongnu.org/failmalloc/
$�wget�http://download.savannah.nongnu.org/releases/failmalloc/
failmalloc-1.0.tar.gz
$�tar�xf�failmalloc-1.0.tar.gz
$�(cd�failmalloc-1.0�&&�./configure�&&�make�&&�sudo�make�install)
$�gcc�-Wall�illegal_access.c
$�env�LD_PRELOAD=libfailmalloc.so�./a.out
Segmentation�fault
How to verify the simple example?How to verify the simple example?How to verify the simple example?How to verify the simple example?How to verify the simple example?
Run "vfide" command on your terminal:Run "vfide" command on your terminal:Run "vfide" command on your terminal:Run "vfide" command on your terminal:Run "vfide" command on your terminal:
$�vfide�illegal_access.c$�vfide�illegal_access.c$�vfide�illegal_access.c$�vfide�illegal_access.c$�vfide�illegal_access.c
You should see "No matching heap chunks" error,
after push "Verify" button.
You should see "No matching heap chunks" error,
after push "Verify" button.
You should see "No matching heap chunks" error,
after push "Verify" button.
You should see "No matching heap chunks" error,
after push "Verify" button.
You should see "No matching heap chunks" error,
after push "Verify" button.
How to fix the error?How to fix the error?How to fix the error?How to fix the error?How to fix the error?
//�File:�verifast/tutorial_solutions/illegal_access.c�--�fixed
#include�"stdlib.h"
struct�account�{
����int�balance;
};
int�main()
����//@�requires�true;
����//@�ensures�true;
{
����struct�account�*myAccount�=�malloc(sizeof(struct�account));
����if�(myAccount�==�0)�{�abort();�}�//�Uncomment
����myAccount->balance�=�5;
����free(myAccount);
����return�0;
}
//�File:�verifast/tutorial_solutions/illegal_access.c�--�fixed
#include�"stdlib.h"
struct�account�{
����int�balance;
};
int�main()
����//@�requires�true;
����//@�ensures�true;
{
����struct�account�*myAccount�=�malloc(sizeof(struct�account));
����if�(myAccount�==�0)�{�abort();�}�//�Uncomment
����myAccount->balance�=�5;
����free(myAccount);
����return�0;
}
//�File:�verifast/tutorial_solutions/illegal_access.c�--�fixed
#include�"stdlib.h"
struct�account�{
����int�balance;
};
int�main()
����//@�requires�true;
����//@�ensures�true;
{
����struct�account�*myAccount�=�malloc(sizeof(struct�account));
����if�(myAccount�==�0)�{�abort();�}�//�Uncomment
����myAccount->balance�=�5;
����free(myAccount);
����return�0;
}
//�File:�verifast/tutorial_solutions/illegal_access.c�--�fixed
#include�"stdlib.h"
struct�account�{
����int�balance;
};
int�main()
����//@�requires�true;
����//@�ensures�true;
{
����struct�account�*myAccount�=�malloc(sizeof(struct�account));
����if�(myAccount�==�0)�{�abort();�}�//�Uncomment
����myAccount->balance�=�5;
����free(myAccount);
����return�0;
}
//�File:�verifast/tutorial_solutions/illegal_access.c�--�fixed
#include�"stdlib.h"
struct�account�{
int�balance;
};
int�main()
//@�requires�true;
//@�ensures�true;
{
struct�account�*myAccount�=�malloc(sizeof(struct�account));
����if�(myAccount�==�0)�{�abort();�}�//�Uncomment
����myAccount->balance�=�5;
����free(myAccount);
����return�0;
}
Yeah, get green on verification!Yeah, get green on verification!Yeah, get green on verification!Yeah, get green on verification!Yeah, get green on verification!
Why capture the error on verification?Why capture the error on verification?Why capture the error on verification?Why capture the error on verification?Why capture the error on verification?
VeriFast has own header to define malloc():VeriFast has own header to define malloc():VeriFast has own header to define malloc():VeriFast has own header to define malloc():VeriFast has own header to define malloc():
//�File:�verifast/bin/malloc.h
void�*malloc(int�size);
����//@�requires�0�<=�size;
����/*@
����ensures
��������result�==�0�?
������������emp
��������:
������������chars(result,�size,�?cs)�&*&�malloc_block(result,�size)�&*&
������������true�==�((char�*)0�<�result�&&
���������������������result�+�size�<=�(char�*)UINTPTR_MAX);
����@*/
//�File:�verifast/bin/malloc.h
void�*malloc(int�size);
����//@�requires�0�<=�size;
����/*@
����ensures
��������result�==�0�?
������������emp
��������:
������������chars(result,�size,�?cs)�&*&�malloc_block(result,�size)�&*&
������������true�==�((char�*)0�<�result�&&
���������������������result�+�size�<=�(char�*)UINTPTR_MAX);
����@*/
//�File:�verifast/bin/malloc.h
void�*malloc(int�size);
����//@�requires�0�<=�size;
����/*@
����ensures
��������result�==�0�?
������������emp
��������:
������������chars(result,�size,�?cs)�&*&�malloc_block(result,�size)�&*&
������������true�==�((char�*)0�<�result�&&
���������������������result�+�size�<=�(char�*)UINTPTR_MAX);
����@*/
//�File:�verifast/bin/malloc.h
void�*malloc(int�size);
����//@�requires�0�<=�size;
����/*@
����ensures
��������result�==�0�?
������������emp
��������:
������������chars(result,�size,�?cs)�&*&�malloc_block(result,�size)�&*&
������������true�==�((char�*)0�<�result�&&
���������������������result�+�size�<=�(char�*)UINTPTR_MAX);
����@*/
//�File:�verifast/bin/malloc.h
void�*malloc(int�size);
//@�requires�0�<=�size;
/*@
����ensures
��������result�==�0�?
������������emp
��������:
������������chars(result,�size,�?cs)�&*&�malloc_block(result,�size)�&*&
������������true�==�((char�*)0�<�result�&&
���������������������result�+�size�<=�(char�*)UINTPTR_MAX);
����@*/
How to verify ChibiOS/RT application?How to verify ChibiOS/RT application?How to verify ChibiOS/RT application?How to verify ChibiOS/RT application?How to verify ChibiOS/RT application?
Run GNU make on your terminal:Run GNU make on your terminal:Run GNU make on your terminal:Run GNU make on your terminal:Run 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's invariant on ChibiOS/RT?What's invariant on ChibiOS/RT?What's invariant on ChibiOS/RT?What's invariant on ChibiOS/RT?What's invariant on ChibiOS/RT?
☆ ChibiOS/RT has own system states☆ ChibiOS/RT has own system states☆ ChibiOS/RT has own system states☆ ChibiOS/RT has own system states☆ ChibiOS/RT has own system states
The state chart means some invariantThe state chart means some invariantThe state chart means some invariantThe state chart means some invariantThe state chart means some invariant
☆ Application starts at "Init" state☆ Application starts at "Init" state☆ Application starts at "Init" state☆ Application starts at "Init" state☆ Application starts 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/RT API on "Thread"
state
☆ You can call some ChibiOS/RT API on "Thread"
state
☆ You can call some ChibiOS/RT API on "Thread"
state
☆ You can call some ChibiOS/RT API on "Thread"
state
☆ You can call some ChibiOS/RT 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 annotationYour code already has annotationYour code already has annotationYour code already has annotationYour code already has annotation
$�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/RT API has pre/postconditionChibiOS/RT API has pre/postconditionChibiOS/RT API has pre/postconditionChibiOS/RT API has pre/postconditionChibiOS/RT 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 annotationLet's violate the annotationLet's violate the annotationLet's violate the annotationLet's violate the annotation
$�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);
��chThdCreateStatic(waThread1,�THD_WORKING_AREA_SIZE(128),�NORMALPRIO,�
Thread1,�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);
��chThdCreateStatic(waThread1,�THD_WORKING_AREA_SIZE(128),�NORMALPRIO,�
Thread1,�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);
��chThdCreateStatic(waThread1,�THD_WORKING_AREA_SIZE(128),�NORMALPRIO,�
Thread1,�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);
��chThdCreateStatic(waThread1,�THD_WORKING_AREA_SIZE(128),�NORMALPRIO,�
Thread1,�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);
��chThdCreateStatic(waThread1,�THD_WORKING_AREA_SIZE(128),�NORMALPRIO,�
Thread1,�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
More complex application #1More complex application #1More complex application #1More complex application #1More complex application #1
https://developer.mbed.org/platforms/ST-Discovery-F746NG/https://developer.mbed.org/platforms/ST-Discovery-F746NG/https://developer.mbed.org/platforms/ST-Discovery-F746NG/https://developer.mbed.org/platforms/ST-Discovery-F746NG/https://developer.mbed.org/platforms/ST-Discovery-F746NG/
☆ Board name: "DISCO-F746NG"☆ Board name: "DISCO-F746NG"☆ Board name: "DISCO-F746NG"☆ Board name: "DISCO-F746NG"☆ Board name: "DISCO-F746NG"
☆ ChibiOS/RT application shows directories and
files on SD card onto serial console
☆ ChibiOS/RT application shows directories and
files on SD card onto serial console
☆ ChibiOS/RT application shows directories and
files on SD card onto serial console
☆ ChibiOS/RT application shows directories and
files on SD card onto serial console
☆ ChibiOS/RT application shows directories and
files on SD card onto serial console
☆ Two functions are already verified☆ Two functions are already verified☆ Two functions are already verified☆ Two functions are already verified☆ Two functions are already verified
☆ First: tmrfunc() run on "ISR" state☆ First: tmrfunc() run on "ISR" state☆ First: tmrfunc() run on "ISR" state☆ First: tmrfunc() run on "ISR" state☆ First: tmrfunc() run on "ISR" state
☆ Second: tmr_init() run on "Thread" state☆ Second: tmr_init() run on "Thread" state☆ Second: tmr_init() run on "Thread" state☆ Second: tmr_init() run on "Thread" state☆ Second: tmr_init() run on "Thread" state
More complex application #2More complex application #2More complex application #2More complex application #2More complex application #2
☆ These functions use some APIs which have
following invariant:
☆ These functions use some APIs which have
following invariant:
☆ These functions use some APIs which have
following invariant:
☆ These functions use some APIs which have
following invariant:
☆ These functions use some APIs which have
following invariant:
*�chEvtBroadcastI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state
*�chVTSetI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state
*�chSysLock()�should�be�called�on�"Thread"�state,
��and�change�state�into�"S-Locked"
*�chSysUnlock()�should�be�called�on�"S-Locked"�state,
��and�change�state�into�"Thread"
*�chSysLockFromISR()�should�be�called�on�"ISR"�state,
��and�change�state�into�"I-Locked"
*�chSysUnlockFromISR()�should�be�called�on�"I-Locked"�state,
��and�change�state�into�"ISR"
*�chEvtBroadcastI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state
*�chVTSetI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state
*�chSysLock()�should�be�called�on�"Thread"�state,
��and�change�state�into�"S-Locked"
*�chSysUnlock()�should�be�called�on�"S-Locked"�state,
��and�change�state�into�"Thread"
*�chSysLockFromISR()�should�be�called�on�"ISR"�state,
��and�change�state�into�"I-Locked"
*�chSysUnlockFromISR()�should�be�called�on�"I-Locked"�state,
��and�change�state�into�"ISR"
*�chEvtBroadcastI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state
*�chVTSetI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state
*�chSysLock()�should�be�called�on�"Thread"�state,
��and�change�state�into�"S-Locked"
*�chSysUnlock()�should�be�called�on�"S-Locked"�state,
��and�change�state�into�"Thread"
*�chSysLockFromISR()�should�be�called�on�"ISR"�state,
��and�change�state�into�"I-Locked"
*�chSysUnlockFromISR()�should�be�called�on�"I-Locked"�state,
��and�change�state�into�"ISR"
*�chEvtBroadcastI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state
*�chVTSetI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state
*�chSysLock()�should�be�called�on�"Thread"�state,
��and�change�state�into�"S-Locked"
*�chSysUnlock()�should�be�called�on�"S-Locked"�state,
��and�change�state�into�"Thread"
*�chSysLockFromISR()�should�be�called�on�"ISR"�state,
��and�change�state�into�"I-Locked"
*�chSysUnlockFromISR()�should�be�called�on�"I-Locked"�state,
��and�change�state�into�"ISR"
*�chEvtBroadcastI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state
*�chVTSetI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state
*�chSysLock()�should�be�called�on�"Thread"�state,
��and�change�state�into�"S-Locked"
*�chSysUnlock()�should�be�called�on�"S-Locked"�state,
��and�change�state�into�"Thread"
*�chSysLockFromISR()�should�be�called�on�"ISR"�state,
��and�change�state�into�"I-Locked"
*�chSysUnlockFromISR()�should�be�called�on�"I-Locked"�state,
��and�change�state�into�"ISR"
More complex application #3More complex application #3More complex application #3More complex application #3More complex application #3
$�cat�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-
FATFS-USB/verified/verified.c
--snip--
static�int�cnt;
--snip--
static�void�tmrfunc(void�*p)
���/*@
�������requires�chibios_sys_state_context(currentThread,�ISRState)�&*&
�����������integer(&cnt,�?count);
���@*/
���/*@
�������ensures�chibios_sys_state_context(currentThread,�ISRState)�&*&
�����������integer(&cnt,�_);
���@*/
--snip--
$�cat�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-
FATFS-USB/verified/verified.c
--snip--
static�int�cnt;
--snip--
static�void�tmrfunc(void�*p)
���/*@
�������requires�chibios_sys_state_context(currentThread,�ISRState)�&*&
�����������integer(&cnt,�?count);
���@*/
���/*@
�������ensures�chibios_sys_state_context(currentThread,�ISRState)�&*&
�����������integer(&cnt,�_);
���@*/
--snip--
$�cat�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-
FATFS-USB/verified/verified.c
--snip--
static�int�cnt;
--snip--
static�void�tmrfunc(void�*p)
���/*@
�������requires�chibios_sys_state_context(currentThread,�ISRState)�&*&
�����������integer(&cnt,�?count);
���@*/
���/*@
�������ensures�chibios_sys_state_context(currentThread,�ISRState)�&*&
�����������integer(&cnt,�_);
���@*/
--snip--
$�cat�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-
FATFS-USB/verified/verified.c
--snip--
static�int�cnt;
--snip--
static�void�tmrfunc(void�*p)
���/*@
�������requires�chibios_sys_state_context(currentThread,�ISRState)�&*&
�����������integer(&cnt,�?count);
���@*/
���/*@
�������ensures�chibios_sys_state_context(currentThread,�ISRState)�&*&
�����������integer(&cnt,�_);
���@*/
--snip--
$�cat�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-
FATFS-USB/verified/verified.c
--snip--
static int�cnt;
--snip--
static void�tmrfunc(void�*p)
/*@
�������requires�chibios_sys_state_context(currentThread,�ISRState)�&*&
�����������integer(&cnt,�?count);
���@*/
/*@
�������ensures�chibios_sys_state_context(currentThread,�ISRState)�&*&
�����������integer(&cnt,�_);
���@*/
--snip--
More complex application #4More complex application #4More complex application #4More complex application #4More complex application #4
--snip--
void�tmr_init(void�*p)
���/*@
�������requires�chibios_sys_state_context(currentThread,�ThreadState)�&*&
�����������integer(&cnt,�_);
���@*/
���/*@
�������ensures�chibios_sys_state_context(currentThread,�ThreadState)�&*&
�����������integer(&cnt,�10);
���@*/
{
��chEvtObjectInit(&inserted_event);
��chEvtObjectInit(&removed_event);
��chSysLock();
��cnt�=�POLLING_INTERVAL;
--snip--
--snip--
void�tmr_init(void�*p)
���/*@
�������requires�chibios_sys_state_context(currentThread,�ThreadState)�&*&
�����������integer(&cnt,�_);
���@*/
���/*@
�������ensures�chibios_sys_state_context(currentThread,�ThreadState)�&*&
�����������integer(&cnt,�10);
���@*/
{
��chEvtObjectInit(&inserted_event);
��chEvtObjectInit(&removed_event);
��chSysLock();
��cnt�=�POLLING_INTERVAL;
--snip--
--snip--
void�tmr_init(void�*p)
���/*@
�������requires�chibios_sys_state_context(currentThread,�ThreadState)�&*&
�����������integer(&cnt,�_);
���@*/
���/*@
�������ensures�chibios_sys_state_context(currentThread,�ThreadState)�&*&
�����������integer(&cnt,�10);
���@*/
{
��chEvtObjectInit(&inserted_event);
��chEvtObjectInit(&removed_event);
��chSysLock();
��cnt�=�POLLING_INTERVAL;
--snip--
--snip--
void�tmr_init(void�*p)
���/*@
�������requires�chibios_sys_state_context(currentThread,�ThreadState)�&*&
�����������integer(&cnt,�_);
���@*/
���/*@
�������ensures�chibios_sys_state_context(currentThread,�ThreadState)�&*&
�����������integer(&cnt,�10);
���@*/
{
��chEvtObjectInit(&inserted_event);
��chEvtObjectInit(&removed_event);
��chSysLock();
��cnt�=�POLLING_INTERVAL;
--snip--
--snip--
void�tmr_init(void�*p)
/*@
�������requires�chibios_sys_state_context(currentThread,�ThreadState)�&*&
�����������integer(&cnt,�_);
���@*/
/*@
�������ensures�chibios_sys_state_context(currentThread,�ThreadState)�&*&
�����������integer(&cnt,�10);
���@*/
{
��chEvtObjectInit(&inserted_event);
��chEvtObjectInit(&removed_event);
��chSysLock();
��cnt�=�POLLING_INTERVAL;
--snip--
You can see symbolic execution treeYou can see symbolic execution treeYou can see symbolic execution treeYou can see symbolic execution treeYou can see symbolic execution tree
☆ Please set off "Check arithmetic overflow" on
"Verify" menu
☆ Please set off "Check arithmetic overflow" on
"Verify" menu
☆ Please set off "Check arithmetic overflow" on
"Verify" menu
☆ Please set off "Check arithmetic overflow" on
"Verify" menu
☆ Please set off "Check arithmetic overflow" on
"Verify" menu
☆ Push "Verify" button.☆ Push "Verify" button.☆ Push "Verify" button.☆ Push "Verify" button.☆ Push "Verify" button.
☆ Drag the right-hand border of the VeriFast
window to the left
☆ Drag the right-hand border of the VeriFast
window to the left
☆ Drag the right-hand border of the VeriFast
window to the left
☆ Drag the right-hand border of the VeriFast
window to the left
☆ Drag the right-hand border of the VeriFast
window to the left
☆ Select "Verifying function 'tmrfunc'" item☆ Select "Verifying function 'tmrfunc'" item☆ Select "Verifying function 'tmrfunc'" item☆ Select "Verifying function 'tmrfunc'" item☆ Select "Verifying function 'tmrfunc'" item
☆ Click dots on the pane to follow symbolic
execution tree
☆ Click dots on the pane to follow symbolic
execution tree
☆ Click dots on the pane to follow symbolic
execution tree
☆ Click dots on the pane to follow symbolic
execution tree
☆ Click dots on the pane to follow symbolic
execution tree
Let's violate the annotationLet's violate the annotationLet's violate the annotationLet's violate the annotationLet's violate the annotation
$�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS-
USB/verified/verified.c
void�tmr_init(void�*p)
���/*@�requires�chibios_sys_state_context(currentThread,�ISRState)�&*&�
integer(&cnt,�?count);�@*/
���/*@�ensures�chibios_sys_state_context(currentThread,�ISRState)�&*&�integer
(&cnt,�_);�@*/
{
��chEvtObjectInit(&inserted_event);
��chEvtObjectInit(&removed_event);
��chSysLock();
��cnt�=�POLLING_INTERVAL;
��systime_t�st�=�MS2ST(POLLING_DELAY);
��chSysUnlock();������������������//�<===�SWAP!
��chVTSetI(&tmr,�st,�tmrfunc,�p);�//�<===�SWAP!
}
$�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS-
USB/verified/verified.c
void�tmr_init(void�*p)
���/*@�requires�chibios_sys_state_context(currentThread,�ISRState)�&*&�
integer(&cnt,�?count);�@*/
���/*@�ensures�chibios_sys_state_context(currentThread,�ISRState)�&*&�integer
(&cnt,�_);�@*/
{
��chEvtObjectInit(&inserted_event);
��chEvtObjectInit(&removed_event);
��chSysLock();
��cnt�=�POLLING_INTERVAL;
��systime_t�st�=�MS2ST(POLLING_DELAY);
��chSysUnlock();������������������//�<===�SWAP!
��chVTSetI(&tmr,�st,�tmrfunc,�p);�//�<===�SWAP!
}
$�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS-
USB/verified/verified.c
void�tmr_init(void�*p)
���/*@�requires�chibios_sys_state_context(currentThread,�ISRState)�&*&�
integer(&cnt,�?count);�@*/
���/*@�ensures�chibios_sys_state_context(currentThread,�ISRState)�&*&�integer
(&cnt,�_);�@*/
{
��chEvtObjectInit(&inserted_event);
��chEvtObjectInit(&removed_event);
��chSysLock();
��cnt�=�POLLING_INTERVAL;
��systime_t�st�=�MS2ST(POLLING_DELAY);
��chSysUnlock();������������������//�<===�SWAP!
��chVTSetI(&tmr,�st,�tmrfunc,�p);�//�<===�SWAP!
}
$�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS-
USB/verified/verified.c
void�tmr_init(void�*p)
���/*@�requires�chibios_sys_state_context(currentThread,�ISRState)�&*&�
integer(&cnt,�?count);�@*/
���/*@�ensures�chibios_sys_state_context(currentThread,�ISRState)�&*&�integer
(&cnt,�_);�@*/
{
��chEvtObjectInit(&inserted_event);
��chEvtObjectInit(&removed_event);
��chSysLock();
��cnt�=�POLLING_INTERVAL;
��systime_t�st�=�MS2ST(POLLING_DELAY);
��chSysUnlock();������������������//�<===�SWAP!
��chVTSetI(&tmr,�st,�tmrfunc,�p);�//�<===�SWAP!
}
$�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS-
USB/verified/verified.c
void�tmr_init(void�*p)
/*@�requires�chibios_sys_state_context(currentThread,�ISRState)�&*&�
integer(&cnt,�?count);�@*/
/*@�ensures�chibios_sys_state_context(currentThread,�ISRState)�&*&�integer
(&cnt,�_);�@*/
{
��chEvtObjectInit(&inserted_event);
��chEvtObjectInit(&removed_event);
��chSysLock();
��cnt�=�POLLING_INTERVAL;
��systime_t�st�=�MS2ST(POLLING_DELAY);
��chSysUnlock();������������������//�<===�SWAP!
��chVTSetI(&tmr,�st,�tmrfunc,�p);�//�<===�SWAP!
}
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
Difference on VeriFast and Frama-C?Difference on VeriFast and Frama-C?Difference on VeriFast and Frama-C?Difference on VeriFast and Frama-C?Difference on VeriFast and Frama-C?
"What�is�difference�between�VeriFast�and�Frama-C?"
https://groups.google.com/forum/#!topic/verifast/xbUHyhPjAe4
"What�is�difference�between�VeriFast�and�Frama-C?"
https://groups.google.com/forum/#!topic/verifast/xbUHyhPjAe4
"What�is�difference�between�VeriFast�and�Frama-C?"
https://groups.google.com/forum/#!topic/verifast/xbUHyhPjAe4
"What�is�difference�between�VeriFast�and�Frama-C?"
https://groups.google.com/forum/#!topic/verifast/xbUHyhPjAe4
"What�is�difference�between�VeriFast�and�Frama-C?"
https://groups.google.com/forum/#!topic/verifast/xbUHyhPjAe4
☆ WP plugin on Frama-C is similar to VeriFast☆ WP plugin on Frama-C is similar to VeriFast☆ WP plugin on Frama-C is similar to VeriFast☆ WP plugin on Frama-C is similar to VeriFast☆ WP plugin on Frama-C is similar to VeriFast
☆ WP and VeriFast have difference to deal with
pointers
☆ WP and VeriFast have difference to deal with
pointers
☆ WP and VeriFast have difference to deal with
pointers
☆ WP and VeriFast have difference to deal with
pointers
☆ WP and VeriFast have difference to deal with
pointers
☆ WP maintains pointers on own memory model
(first-order logic)
☆ WP maintains pointers on own memory model
(first-order logic)
☆ WP maintains pointers on own memory model
(first-order logic)
☆ WP maintains pointers on own memory model
(first-order logic)
☆ WP maintains pointers on own memory model
(first-order logic)
☆ VeriFast maintins pointers on separation logic☆ VeriFast maintins pointers on separation logic☆ VeriFast maintins pointers on separation logic☆ VeriFast maintins pointers on separation logic☆ VeriFast maintins pointers on separation logic
HomeworkHomeworkHomeworkHomeworkHomework
☆ Get done with verifying entirely on following
code.
☆ Get done with verifying entirely on following
code.
☆ Get done with verifying entirely on following
code.
☆ Get done with verifying entirely on following
code.
☆ Get done with verifying entirely on following
code.
chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS-USBchibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS-USBchibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS-USBchibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS-USBchibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS-USB
☆ Capture more invariant on ChibiOS/RT
application (e.g. changing of global variable).
☆ Capture more invariant on ChibiOS/RT
application (e.g. changing of global variable).
☆ Capture more invariant on ChibiOS/RT
application (e.g. changing of global variable).
☆ Capture more invariant on ChibiOS/RT
application (e.g. changing of global variable).
☆ Capture more invariant on ChibiOS/RT
application (e.g. changing of global variable).
For more informationFor more informationFor more informationFor more informationFor more information
##�In�English
"The�VeriFast�Program�Verifier:�A�Tutorial"
https://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdf
##�In�Japanese
�プログラム検証器�VeriFast:�チュートリアル�
https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/
Tutorial.md
"TPPMark2016�を解きながら学ぶ�VeriFast"
https://speakerdeck.com/eldesh/tppmark2016-wojie-kinagaraxue-bu-verifast
"VeriFast�Termination�Checking�Introduction(α)"
https://speakerdeck.com/eldesh/verifast-termination-checking-introduction-a
##�In�English
"The�VeriFast�Program�Verifier:�A�Tutorial"
https://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdf
##�In�Japanese
�プログラム検証器�VeriFast:�チュートリアル�
https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/
Tutorial.md
"TPPMark2016�を解きながら学ぶ�VeriFast"
https://speakerdeck.com/eldesh/tppmark2016-wojie-kinagaraxue-bu-verifast
"VeriFast�Termination�Checking�Introduction(α)"
https://speakerdeck.com/eldesh/verifast-termination-checking-introduction-a
##�In�English
"The�VeriFast�Program�Verifier:�A�Tutorial"
https://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdf
##�In�Japanese
�プログラム検証器�VeriFast:�チュートリアル�
https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/
Tutorial.md
"TPPMark2016�を解きながら学ぶ�VeriFast"
https://speakerdeck.com/eldesh/tppmark2016-wojie-kinagaraxue-bu-verifast
"VeriFast�Termination�Checking�Introduction(α)"
https://speakerdeck.com/eldesh/verifast-termination-checking-introduction-a
##�In�English
"The�VeriFast�Program�Verifier:�A�Tutorial"
https://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdf
##�In�Japanese
�プログラム検証器�VeriFast:�チュートリアル�
https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/
Tutorial.md
"TPPMark2016�を解きながら学ぶ�VeriFast"
https://speakerdeck.com/eldesh/tppmark2016-wojie-kinagaraxue-bu-verifast
"VeriFast�Termination�Checking�Introduction(α)"
https://speakerdeck.com/eldesh/verifast-termination-checking-introduction-a
##�In�English
"The�VeriFast�Program�Verifier:�A�Tutorial"
https://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdf
##�In�Japanese
�プログラム検証器 VeriFast:�チュートリアル�
https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/
Tutorial.md
"TPPMark2016�を解きながら学ぶ VeriFast"
https://speakerdeck.com/eldesh/tppmark2016-wojie-kinagaraxue-bu-verifast
"VeriFast�Termination�Checking�Introduction(α)"
https://speakerdeck.com/eldesh/verifast-termination-checking-introduction-a
簡約!? λカ娘10 @ 参照透明な海を守る会簡約!? λカ娘10 @ 参照透明な海を守る会簡約!? λカ娘10 @ 参照透明な海を守る会簡約!? λカ娘10 @ 参照透明な海を守る会簡約!? λカ娘10 @ 参照透明な海を守る会
☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b
☆ http://www.paraiso-lang.org/ikmsm/books/
c92.html
☆ http://www.paraiso-lang.org/ikmsm/books/
c92.html
☆ http://www.paraiso-lang.org/ikmsm/books/
c92.html
☆ http://www.paraiso-lang.org/ikmsm/books/
c92.html
☆ http://www.paraiso-lang.org/ikmsm/books/
c92.html
*�第1章�モナドとひも
*�第2章�⽮澤にこ先輩と⼀緒にモナドモナド!
*�第3章�Coqダンジョン:�底抜けの壺の夢
*�第4章�IST(Internal�Set�Theory)�⼊門�(後編)
*�第5章�静的コード解析はいいぞ!
*�第6章�VeriFastチュートリアル
*�第1章�モナドとひも
*�第2章�⽮澤にこ先輩と⼀緒にモナドモナド!
*�第3章�Coqダンジョン:�底抜けの壺の夢
*�第4章�IST(Internal�Set�Theory)�⼊門�(後編)
*�第5章�静的コード解析はいいぞ!
*�第6章�VeriFastチュートリアル
*�第1章�モナドとひも
*�第2章�⽮澤にこ先輩と⼀緒にモナドモナド!
*�第3章�Coqダンジョン:�底抜けの壺の夢
*�第4章�IST(Internal�Set�Theory)�⼊門�(後編)
*�第5章�静的コード解析はいいぞ!
*�第6章�VeriFastチュートリアル
*�第1章�モナドとひも
*�第2章�⽮澤にこ先輩と⼀緒にモナドモナド!
*�第3章�Coqダンジョン:�底抜けの壺の夢
*�第4章�IST(Internal�Set�Theory)�⼊門�(後編)
*�第5章�静的コード解析はいいぞ!
*�第6章�VeriFastチュートリアル
*�第1章 モナドとひも
*�第2章 ⽮澤にこ先輩と⼀緒にモナドモナド!
*�第3章 Coqダンジョン:�底抜けの壺の夢
*�第4章 IST(Internal�Set�Theory)�⼊門�(後編)
*�第5章 静的コード解析はいいぞ!
*�第6章 VeriFastチュートリアル
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.
☆ Fenrir Inc. provides this meeting room.☆ Fenrir Inc. provides this meeting room.☆ Fenrir Inc. provides this meeting room.☆ Fenrir Inc. provides this meeting room.☆ Fenrir Inc. provides this meeting room.
☆ @ruicc supports macOS environment.☆ @ruicc supports macOS environment.☆ @ruicc supports macOS environment.☆ @ruicc supports macOS environment.☆ @ruicc supports macOS environment.
☆ @eldesh supports Windows environment, and
gives much advice for usage of VeriFast.
☆ @eldesh supports Windows environment, and
gives much advice for usage of VeriFast.
☆ @eldesh supports Windows environment, and
gives much advice for usage of VeriFast.
☆ @eldesh supports Windows environment, and
gives much advice for usage of VeriFast.
☆ @eldesh supports Windows environment, and
gives much advice for 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
*�kindle�paperwhite�3G�│�Kindle�paperwhite...�│�Tatsuo�Yamashita�│�Flickr
��https://www.flickr.com/photos/yto/8197280407/
��Copyright:�Tatsuo�Yamashita�/�License:�CC�BY�2.0
*�buttons�│�Dean�Hochman�│�Flickr
��https://www.flickr.com/photos/deanhochman/33100533341/
��Copyright:�Dean�Hochman�/�License:�CC�BY�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
*�kindle�paperwhite�3G�│�Kindle�paperwhite...�│�Tatsuo�Yamashita�│�Flickr
��https://www.flickr.com/photos/yto/8197280407/
��Copyright:�Tatsuo�Yamashita�/�License:�CC�BY�2.0
*�buttons�│�Dean�Hochman�│�Flickr
��https://www.flickr.com/photos/deanhochman/33100533341/
��Copyright:�Dean�Hochman�/�License:�CC�BY�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
*�kindle�paperwhite�3G�│�Kindle�paperwhite...�│�Tatsuo�Yamashita�│�Flickr
��https://www.flickr.com/photos/yto/8197280407/
��Copyright:�Tatsuo�Yamashita�/�License:�CC�BY�2.0
*�buttons�│�Dean�Hochman�│�Flickr
��https://www.flickr.com/photos/deanhochman/33100533341/
��Copyright:�Dean�Hochman�/�License:�CC�BY�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
*�kindle�paperwhite�3G�│�Kindle�paperwhite...�│�Tatsuo�Yamashita�│�Flickr
��https://www.flickr.com/photos/yto/8197280407/
��Copyright:�Tatsuo�Yamashita�/�License:�CC�BY�2.0
*�buttons�│�Dean�Hochman�│�Flickr
��https://www.flickr.com/photos/deanhochman/33100533341/
��Copyright:�Dean�Hochman�/�License:�CC�BY�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
*�kindle�paperwhite�3G�│�Kindle�paperwhite...�│�Tatsuo�Yamashita�│�Flickr
��https://www.flickr.com/photos/yto/8197280407/
��Copyright:�Tatsuo�Yamashita�/�License:�CC�BY�2.0
*�buttons�│�Dean�Hochman�│�Flickr
��https://www.flickr.com/photos/deanhochman/33100533341/
��Copyright:�Dean�Hochman�/�License:�CC�BY�2.0

Weitere ähnliche Inhalte

Was ist angesagt?

Asterisk security with kingasterisk
Asterisk security with kingasteriskAsterisk security with kingasterisk
Asterisk security with kingasteriskKing Asterisk
 
HackLU 2018 Make ARM Shellcode Great Again
HackLU 2018 Make ARM Shellcode Great AgainHackLU 2018 Make ARM Shellcode Great Again
HackLU 2018 Make ARM Shellcode Great AgainSaumil Shah
 
JavaScript in the Real World
JavaScript in the Real WorldJavaScript in the Real World
JavaScript in the Real WorldAndrew Nesbitt
 
Make ARM Shellcode Great Again
Make ARM Shellcode Great AgainMake ARM Shellcode Great Again
Make ARM Shellcode Great AgainSaumil Shah
 
最後の楽園の開発をちょこっとだけ手伝った話
最後の楽園の開発をちょこっとだけ手伝った話最後の楽園の開発をちょこっとだけ手伝った話
最後の楽園の開発をちょこっとだけ手伝った話nullnilaki
 
How to Root 10 Million Phones with One Exploit
How to Root 10 Million Phones with One ExploitHow to Root 10 Million Phones with One Exploit
How to Root 10 Million Phones with One ExploitJiahong Fang
 
Can We Prevent Use-after-free Attacks?
Can We Prevent Use-after-free Attacks?Can We Prevent Use-after-free Attacks?
Can We Prevent Use-after-free Attacks?inaz2
 
Concurrent data structures in javaslang circuitbreaker
Concurrent data structures in javaslang circuitbreakerConcurrent data structures in javaslang circuitbreaker
Concurrent data structures in javaslang circuitbreakerBogdan Storozhuk
 
Digging for Android Kernel Bugs
Digging for Android Kernel BugsDigging for Android Kernel Bugs
Digging for Android Kernel BugsJiahong Fang
 
07 - Bypassing ASLR, or why X^W matters
07 - Bypassing ASLR, or why X^W matters07 - Bypassing ASLR, or why X^W matters
07 - Bypassing ASLR, or why X^W mattersAlexandre Moneger
 
Alexander Reelsen - Seccomp for Developers
Alexander Reelsen - Seccomp for DevelopersAlexander Reelsen - Seccomp for Developers
Alexander Reelsen - Seccomp for DevelopersDevDay Dresden
 
ARM Polyglot Shellcode - HITB2019AMS
ARM Polyglot Shellcode - HITB2019AMSARM Polyglot Shellcode - HITB2019AMS
ARM Polyglot Shellcode - HITB2019AMSSaumil Shah
 
Hacking the Gateways
Hacking the GatewaysHacking the Gateways
Hacking the GatewaysOnur Alanbel
 
44CON London 2015 - Stegosploit - Drive-by Browser Exploits using only Images
44CON London 2015 - Stegosploit - Drive-by Browser Exploits using only Images44CON London 2015 - Stegosploit - Drive-by Browser Exploits using only Images
44CON London 2015 - Stegosploit - Drive-by Browser Exploits using only Images44CON
 
Статический анализ кода в контексте SSDL
Статический анализ кода в контексте SSDLСтатический анализ кода в контексте SSDL
Статический анализ кода в контексте SSDLPositive Hack Days
 
05 - Bypassing DEP, or why ASLR matters
05 - Bypassing DEP, or why ASLR matters05 - Bypassing DEP, or why ASLR matters
05 - Bypassing DEP, or why ASLR mattersAlexandre Moneger
 

Was ist angesagt? (16)

Asterisk security with kingasterisk
Asterisk security with kingasteriskAsterisk security with kingasterisk
Asterisk security with kingasterisk
 
HackLU 2018 Make ARM Shellcode Great Again
HackLU 2018 Make ARM Shellcode Great AgainHackLU 2018 Make ARM Shellcode Great Again
HackLU 2018 Make ARM Shellcode Great Again
 
JavaScript in the Real World
JavaScript in the Real WorldJavaScript in the Real World
JavaScript in the Real World
 
Make ARM Shellcode Great Again
Make ARM Shellcode Great AgainMake ARM Shellcode Great Again
Make ARM Shellcode Great Again
 
最後の楽園の開発をちょこっとだけ手伝った話
最後の楽園の開発をちょこっとだけ手伝った話最後の楽園の開発をちょこっとだけ手伝った話
最後の楽園の開発をちょこっとだけ手伝った話
 
How to Root 10 Million Phones with One Exploit
How to Root 10 Million Phones with One ExploitHow to Root 10 Million Phones with One Exploit
How to Root 10 Million Phones with One Exploit
 
Can We Prevent Use-after-free Attacks?
Can We Prevent Use-after-free Attacks?Can We Prevent Use-after-free Attacks?
Can We Prevent Use-after-free Attacks?
 
Concurrent data structures in javaslang circuitbreaker
Concurrent data structures in javaslang circuitbreakerConcurrent data structures in javaslang circuitbreaker
Concurrent data structures in javaslang circuitbreaker
 
Digging for Android Kernel Bugs
Digging for Android Kernel BugsDigging for Android Kernel Bugs
Digging for Android Kernel Bugs
 
07 - Bypassing ASLR, or why X^W matters
07 - Bypassing ASLR, or why X^W matters07 - Bypassing ASLR, or why X^W matters
07 - Bypassing ASLR, or why X^W matters
 
Alexander Reelsen - Seccomp for Developers
Alexander Reelsen - Seccomp for DevelopersAlexander Reelsen - Seccomp for Developers
Alexander Reelsen - Seccomp for Developers
 
ARM Polyglot Shellcode - HITB2019AMS
ARM Polyglot Shellcode - HITB2019AMSARM Polyglot Shellcode - HITB2019AMS
ARM Polyglot Shellcode - HITB2019AMS
 
Hacking the Gateways
Hacking the GatewaysHacking the Gateways
Hacking the Gateways
 
44CON London 2015 - Stegosploit - Drive-by Browser Exploits using only Images
44CON London 2015 - Stegosploit - Drive-by Browser Exploits using only Images44CON London 2015 - Stegosploit - Drive-by Browser Exploits using only Images
44CON London 2015 - Stegosploit - Drive-by Browser Exploits using only Images
 
Статический анализ кода в контексте SSDL
Статический анализ кода в контексте SSDLСтатический анализ кода в контексте SSDL
Статический анализ кода в контексте SSDL
 
05 - Bypassing DEP, or why ASLR matters
05 - Bypassing DEP, or why ASLR matters05 - Bypassing DEP, or why ASLR matters
05 - Bypassing DEP, or why ASLR matters
 

Ähnlich wie Hands-on VeriFast with STM32 microcontroller @ Osaka

Hands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontrollerHands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontrollerKiwamu Okabe
 
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 planKiwamu Okabe
 
Functional IoT: Hardware and Platform
Functional IoT: Hardware and PlatformFunctional IoT: Hardware and Platform
Functional IoT: Hardware and PlatformKiwamu Okabe
 
Metasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCUMetasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCUKiwamu Okabe
 
ATS Programming Tutorial
ATS Programming TutorialATS Programming Tutorial
ATS Programming TutorialKiwamu Okabe
 
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 MCUKiwamu Okabe
 
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, againKiwamu Okabe
 
Introduction to Arduino and Circuits
Introduction to Arduino and CircuitsIntroduction to Arduino and Circuits
Introduction to Arduino and CircuitsJason Griffey
 
DEF CON 27- SHEILA A BERTA - backdooring hardware devices by injecting malici...
DEF CON 27- SHEILA A BERTA - backdooring hardware devices by injecting malici...DEF CON 27- SHEILA A BERTA - backdooring hardware devices by injecting malici...
DEF CON 27- SHEILA A BERTA - backdooring hardware devices by injecting malici...Felipe Prado
 
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 DomainKen Collins
 
[MakerHN] [IoT] [01] Intro 2
[MakerHN] [IoT] [01] Intro 2[MakerHN] [IoT] [01] Intro 2
[MakerHN] [IoT] [01] Intro 2Công Hoàng Văn
 
Cfgmgmtcamp 2023 — eBPF Superpowers
Cfgmgmtcamp 2023 — eBPF SuperpowersCfgmgmtcamp 2023 — eBPF Superpowers
Cfgmgmtcamp 2023 — eBPF SuperpowersRaphaël PINSON
 
Embedded application designed by ATS language
Embedded application designed by ATS languageEmbedded application designed by ATS language
Embedded application designed by ATS languageKiwamu Okabe
 
Getting Started with PoolParty and EC2
Getting Started with PoolParty and EC2Getting Started with PoolParty and EC2
Getting Started with PoolParty and EC2Nate Murray
 
Containerize vs Virtualize? NGDC 2009
Containerize vs Virtualize? NGDC 2009Containerize vs Virtualize? NGDC 2009
Containerize vs Virtualize? NGDC 2009Andy d
 
Apidays Paris 2023 - Forget TypeScript, Choose Rust to build Robust, Fast and...
Apidays Paris 2023 - Forget TypeScript, Choose Rust to build Robust, Fast and...Apidays Paris 2023 - Forget TypeScript, Choose Rust to build Robust, Fast and...
Apidays Paris 2023 - Forget TypeScript, Choose Rust to build Robust, Fast and...apidays
 
Know your platform. 7 things every scala developer should know about jvm
Know your platform. 7 things every scala developer should know about jvmKnow your platform. 7 things every scala developer should know about jvm
Know your platform. 7 things every scala developer should know about jvmPawel Szulc
 
Containerize vs Virtualize
Containerize vs VirtualizeContainerize vs Virtualize
Containerize vs VirtualizeAndy d
 
zebra & openconfigd Introduction
zebra & openconfigd Introductionzebra & openconfigd Introduction
zebra & openconfigd IntroductionKentaro Ebisawa
 
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 SystemsPriyanka Aash
 

Ähnlich wie Hands-on VeriFast with STM32 microcontroller @ Osaka (20)

Hands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontrollerHands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontroller
 
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
 
Functional IoT: Hardware and Platform
Functional IoT: Hardware and PlatformFunctional IoT: Hardware and Platform
Functional IoT: Hardware and Platform
 
Metasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCUMetasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCU
 
ATS Programming Tutorial
ATS Programming TutorialATS Programming Tutorial
ATS Programming Tutorial
 
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
 
Introduction to Arduino and Circuits
Introduction to Arduino and CircuitsIntroduction to Arduino and Circuits
Introduction to Arduino and Circuits
 
DEF CON 27- SHEILA A BERTA - backdooring hardware devices by injecting malici...
DEF CON 27- SHEILA A BERTA - backdooring hardware devices by injecting malici...DEF CON 27- SHEILA A BERTA - backdooring hardware devices by injecting malici...
DEF CON 27- SHEILA A BERTA - backdooring hardware devices by injecting malici...
 
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
 
[MakerHN] [IoT] [01] Intro 2
[MakerHN] [IoT] [01] Intro 2[MakerHN] [IoT] [01] Intro 2
[MakerHN] [IoT] [01] Intro 2
 
Cfgmgmtcamp 2023 — eBPF Superpowers
Cfgmgmtcamp 2023 — eBPF SuperpowersCfgmgmtcamp 2023 — eBPF Superpowers
Cfgmgmtcamp 2023 — eBPF Superpowers
 
Embedded application designed by ATS language
Embedded application designed by ATS languageEmbedded application designed by ATS language
Embedded application designed by ATS language
 
Getting Started with PoolParty and EC2
Getting Started with PoolParty and EC2Getting Started with PoolParty and EC2
Getting Started with PoolParty and EC2
 
Containerize vs Virtualize? NGDC 2009
Containerize vs Virtualize? NGDC 2009Containerize vs Virtualize? NGDC 2009
Containerize vs Virtualize? NGDC 2009
 
Apidays Paris 2023 - Forget TypeScript, Choose Rust to build Robust, Fast and...
Apidays Paris 2023 - Forget TypeScript, Choose Rust to build Robust, Fast and...Apidays Paris 2023 - Forget TypeScript, Choose Rust to build Robust, Fast and...
Apidays Paris 2023 - Forget TypeScript, Choose Rust to build Robust, Fast and...
 
Know your platform. 7 things every scala developer should know about jvm
Know your platform. 7 things every scala developer should know about jvmKnow your platform. 7 things every scala developer should know about jvm
Know your platform. 7 things every scala developer should know about jvm
 
Containerize vs Virtualize
Containerize vs VirtualizeContainerize vs Virtualize
Containerize vs Virtualize
 
zebra & openconfigd Introduction
zebra & openconfigd Introductionzebra & openconfigd Introduction
zebra & openconfigd Introduction
 
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
 

Kürzlich hochgeladen

#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 

Kürzlich hochgeladen (20)

#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 

Hands-on VeriFast with STM32 microcontroller @ Osaka

  • 1. Hands-on VeriFast with STM32 microcontroller @ Osaka Hands-on VeriFast with STM32 microcontroller @ Osaka Hands-on VeriFast with STM32 microcontroller @ Osaka Hands-on VeriFast with STM32 microcontroller @ Osaka Hands-on VeriFast with STM32 microcontroller @ Osaka Kiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu Okabe
  • 2. Table of ContentsTable of ContentsTable of ContentsTable of ContentsTable of Contents ☆ Introduce ChibiOS/RT as a RTOS☆ Introduce ChibiOS/RT as a RTOS☆ Introduce ChibiOS/RT as a RTOS☆ Introduce ChibiOS/RT as a RTOS☆ Introduce ChibiOS/RT as 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 a sample application on ChibiOS/RT☆ Build a sample application on ChibiOS/RT☆ Build a sample application on ChibiOS/RT☆ Build a sample application on ChibiOS/RT☆ Build a 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 / AVR / PowerPC e200☆ Run on ARM Cortex-M / AVR / PowerPC e200☆ Run on ARM Cortex-M / AVR / PowerPC e200☆ Run on ARM Cortex-M / AVR / PowerPC e200☆ Run on ARM Cortex-M / AVR / 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. Overview of the devel-environmentOverview of the devel-environmentOverview of the devel-environmentOverview of the devel-environmentOverview of the devel-environment
  • 5. 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/ *�http://www.st.com/en/embedded-software/stsw-link009.html *�https://git-for-windows.github.io/ *�https://launchpad.net/gcc-arm-embedded/+download *�https://ttssh2.osdn.jp/index.html.en *�https://cygwin.com/ *�http://www.st.com/en/embedded-software/stsw-link009.html *�https://git-for-windows.github.io/ *�https://launchpad.net/gcc-arm-embedded/+download *�https://ttssh2.osdn.jp/index.html.en *�https://cygwin.com/ *�http://www.st.com/en/embedded-software/stsw-link009.html *�https://git-for-windows.github.io/ *�https://launchpad.net/gcc-arm-embedded/+download *�https://ttssh2.osdn.jp/index.html.en *�https://cygwin.com/ *�http://www.st.com/en/embedded-software/stsw-link009.html *�https://git-for-windows.github.io/ *�https://launchpad.net/gcc-arm-embedded/+download *�https://ttssh2.osdn.jp/index.html.en *�https://cygwin.com/ *�http://www.st.com/en/embedded-software/stsw-link009.html ☆ Install following cygwin packages☆ Install following cygwin packages☆ Install following cygwin packages☆ Install following cygwin packages☆ Install following cygwin packages cmake�/�gcc-core�(5.3.0)�/�libusb1.0-devel�/�makecmake�/�gcc-core�(5.3.0)�/�libusb1.0-devel�/�makecmake�/�gcc-core�(5.3.0)�/�libusb1.0-devel�/�makecmake�/�gcc-core�(5.3.0)�/�libusb1.0-devel�/�makecmake�/�gcc-core�(5.3.0)�/�libusb1.0-devel�/�make
  • 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 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) $�cp�/usr/local/lib/cygstlink-shared-1.dll�/usr/local/bin/ $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�make�install) $�cp�/usr/local/lib/cygstlink-shared-1.dll�/usr/local/bin/ $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�make�install) $�cp�/usr/local/lib/cygstlink-shared-1.dll�/usr/local/bin/ $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�make�install) $�cp�/usr/local/lib/cygstlink-shared-1.dll�/usr/local/bin/ $�git�clone�https://github.com/texane/stlink.git $�(cd�stlink�&&�make) $�(cd�stlink/build/Release�&&�make�install) $�cp�/usr/local/lib/cygstlink-shared-1.dll�/usr/local/bin/ ☆ 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
  • 7. 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: ☆ Open cygwin terminal, and checkout custom ChibiOS/RT source code: ☆ Open cygwin terminal, and checkout custom ChibiOS/RT source code: ☆ Open cygwin terminal, and checkout custom ChibiOS/RT source code: ☆ Open cygwin terminal, and 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
  • 8. 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)
  • 9. Get the devel-environment #macOSGet the devel-environment #macOSGet the devel-environment #macOSGet the devel-environment #macOSGet the devel-environment #macOS ☆ Download VeriFast, untar it and set PATH:☆ Download VeriFast, untar it and set PATH:☆ Download VeriFast, untar it and set PATH:☆ Download VeriFast, untar it and set PATH:☆ Download VeriFast, untar 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
  • 10. 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�libgtksourceview2.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�libgtksourceview2.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�libgtksourceview2.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�libgtksourceview2.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�libgtksourceview2.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
  • 11. Get the devel-environment #LinuxGet the devel-environment #LinuxGet the devel-environment #LinuxGet the devel-environment #LinuxGet the devel-environment #Linux ☆ Download VeriFast, untar it and set PATH:☆ Download VeriFast, untar it and set PATH:☆ Download VeriFast, untar it and set PATH:☆ Download VeriFast, untar it and set PATH:☆ Download VeriFast, untar 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
  • 12. Build a ChibiOS/RT applicationBuild a ChibiOS/RT applicationBuild a ChibiOS/RT applicationBuild a ChibiOS/RT applicationBuild a ChibiOS/RT 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
  • 13. Coffee break #1Coffee break #1Coffee break #1Coffee break #1Coffee break #1
  • 14. 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.
  • 15. You can free to get own board, today!You can free to get own board, today!You can free to get own board, today!You can free to get own board, today!You can free to get own board, today! 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/ ☆ Board name: "NUCLEO-F091RC"☆ Board name: "NUCLEO-F091RC"☆ Board name: "NUCLEO-F091RC"☆ Board name: "NUCLEO-F091RC"☆ Board name: "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 ☆ Include ADC / DAC / RTC / I2C / USART / SPI / CAN / HDMI CEC ☆ Include ADC / DAC / RTC / I2C / USART / SPI / CAN / HDMI CEC ☆ Include ADC / DAC / RTC / I2C / USART / SPI / CAN / HDMI CEC ☆ Include ADC / DAC / RTC / I2C / USART / SPI / CAN / HDMI CEC ☆ Include ADC / DAC / RTC / I2C / USART / SPI / CAN / HDMI CEC ☆ Download fiwmware and debug it using GDB☆ Download fiwmware and debug it using GDB☆ Download fiwmware and debug it using GDB☆ Download fiwmware and debug it using GDB☆ 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!
  • 16. 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, and download application into the board: ☆ Open cygwin terminal, and download application into the board: ☆ Open cygwin terminal, and download application into the board: ☆ Open cygwin terminal, and download application into the board: ☆ Open cygwin terminal, and download application into the board: $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�flash $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�flash $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�flash $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�flash $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�flash ☆ Open serial console using TeraTerm with baud rate 9600 ☆ Open serial console using TeraTerm with baud rate 9600 ☆ Open serial console using TeraTerm with baud rate 9600 ☆ Open serial console using TeraTerm with baud rate 9600 ☆ Open serial console using TeraTerm with baud rate 9600 ☆ 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 ☆ Download application into the board:☆ Download application into the board:☆ Download application into the board:☆ Download application into the board:☆ Download application into the board: $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�flash $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�flash $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�flash $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�flash $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�flash ☆ Open serial console:☆ Open serial console:☆ Open serial console:☆ Open serial console:☆ Open serial console: $�picocom�-b�9600�/dev/tty.usbmodem1423$�picocom�-b�9600�/dev/tty.usbmodem1423$�picocom�-b�9600�/dev/tty.usbmodem1423$�picocom�-b�9600�/dev/tty.usbmodem1423$�picocom�-b�9600�/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
  • 18. 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 ☆ Download application into the board:☆ Download application into the board:☆ Download application into the board:☆ Download application into the board:☆ Download application into the board: $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�flash $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�flash $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�flash $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�flash $�cd�chibios-verifast/verifast_demo/STM32/RT-STM32F091RC-NUCLEO $�make�flash ☆ Open serial console:☆ Open serial console:☆ Open serial console:☆ Open serial console:☆ Open serial console: $�picocom�-b�9600�/dev/ttyACM0$�picocom�-b�9600�/dev/ttyACM0$�picocom�-b�9600�/dev/ttyACM0$�picocom�-b�9600�/dev/ttyACM0$�picocom�-b�9600�/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
  • 19. Do you see test log of ChibiOS/RT?Do you see test log of ChibiOS/RT?Do you see test log of ChibiOS/RT?Do you see test log of ChibiOS/RT?Do you see test log of ChibiOS/RT? ☆ 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
  • 20. Coffee break #2Coffee break #2Coffee break #2Coffee break #2Coffee break #2
  • 21. 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 multi- threaded C and Java language programs annotated with preconditions and postconditions written in separation logic. ☆ A verifier for single-threaded and multi- threaded C and Java language programs annotated with preconditions and postconditions written in separation logic. ☆ A verifier for single-threaded and multi- threaded C and Java language programs annotated with preconditions and postconditions written in separation logic. ☆ A verifier for single-threaded and multi- threaded C and Java language programs annotated with preconditions and postconditions written in separation logic. ☆ A verifier for single-threaded and multi- threaded C and Java language programs annotated with preconditions and postconditions written in separation logic. ☆ VeriFast avoids illegal memory accesses such like buffer overflow. ☆ VeriFast avoids illegal memory accesses such like buffer overflow. ☆ VeriFast avoids illegal memory accesses such like buffer overflow. ☆ VeriFast avoids illegal memory accesses such like buffer overflow. ☆ VeriFast avoids illegal memory accesses such like buffer overflow. ☆ VeriFast is easy to use with own graphical IDE.☆ VeriFast is easy to use with own graphical IDE.☆ VeriFast is easy to use with own graphical IDE.☆ VeriFast is easy to use with own graphical IDE.☆ VeriFast is easy to use with own graphical IDE.
  • 22. Get started with simple exampleGet started with simple exampleGet started with simple exampleGet started with simple exampleGet started with simple example //�File:�verifast/tutorial_solutions/illegal_access.c #include�"stdlib.h" struct�account�{ ����int�balance; }; int�main() ����//@�requires�true; ����//@�ensures�true; { ����struct�account�*myAccount�=�malloc(sizeof(struct�account)); ����//if�(myAccount�==�0)�{�abort();�}�//�Not�checked! ����myAccount->balance�=�5; ����free(myAccount); ����return�0; } //�File:�verifast/tutorial_solutions/illegal_access.c #include�"stdlib.h" struct�account�{ ����int�balance; }; int�main() ����//@�requires�true; ����//@�ensures�true; { ����struct�account�*myAccount�=�malloc(sizeof(struct�account)); ����//if�(myAccount�==�0)�{�abort();�}�//�Not�checked! ����myAccount->balance�=�5; ����free(myAccount); ����return�0; } //�File:�verifast/tutorial_solutions/illegal_access.c #include�"stdlib.h" struct�account�{ ����int�balance; }; int�main() ����//@�requires�true; ����//@�ensures�true; { ����struct�account�*myAccount�=�malloc(sizeof(struct�account)); ����//if�(myAccount�==�0)�{�abort();�}�//�Not�checked! ����myAccount->balance�=�5; ����free(myAccount); ����return�0; } //�File:�verifast/tutorial_solutions/illegal_access.c #include�"stdlib.h" struct�account�{ ����int�balance; }; int�main() ����//@�requires�true; ����//@�ensures�true; { ����struct�account�*myAccount�=�malloc(sizeof(struct�account)); ����//if�(myAccount�==�0)�{�abort();�}�//�Not�checked! ����myAccount->balance�=�5; ����free(myAccount); ����return�0; } //�File:�verifast/tutorial_solutions/illegal_access.c #include�"stdlib.h" struct�account�{ int�balance; }; int�main() //@�requires�true; //@�ensures�true; { struct�account�*myAccount�=�malloc(sizeof(struct�account)); //if�(myAccount�==�0)�{�abort();�}�//�Not�checked! ����myAccount->balance�=�5; ����free(myAccount); ����return�0; }
  • 23. Example is compilable and runnable...Example is compilable and runnable...Example is compilable and runnable...Example is compilable and runnable...Example is compilable and runnable... $�gcc�--version gcc�(Debian�6.3.0-18)�6.3.0�20170516 Copyright�(C)�2016�Free�Software�Foundation,�Inc. This�is�free�software;�see�the�source�for�copying�conditions.��There�is�NO warranty;�not�even�for�MERCHANTABILITY�or�FITNESS�FOR�A�PARTICULAR�PURPOSE. $�gcc�-Wall�-Wextra�illegal_access.c�#�<=�No�error�shown $�./a.out����������������������������#�<=�No�segmentation�fault $�gcc�--version gcc�(Debian�6.3.0-18)�6.3.0�20170516 Copyright�(C)�2016�Free�Software�Foundation,�Inc. This�is�free�software;�see�the�source�for�copying�conditions.��There�is�NO warranty;�not�even�for�MERCHANTABILITY�or�FITNESS�FOR�A�PARTICULAR�PURPOSE. $�gcc�-Wall�-Wextra�illegal_access.c�#�<=�No�error�shown $�./a.out����������������������������#�<=�No�segmentation�fault $�gcc�--version gcc�(Debian�6.3.0-18)�6.3.0�20170516 Copyright�(C)�2016�Free�Software�Foundation,�Inc. This�is�free�software;�see�the�source�for�copying�conditions.��There�is�NO warranty;�not�even�for�MERCHANTABILITY�or�FITNESS�FOR�A�PARTICULAR�PURPOSE. $�gcc�-Wall�-Wextra�illegal_access.c�#�<=�No�error�shown $�./a.out����������������������������#�<=�No�segmentation�fault $�gcc�--version gcc�(Debian�6.3.0-18)�6.3.0�20170516 Copyright�(C)�2016�Free�Software�Foundation,�Inc. This�is�free�software;�see�the�source�for�copying�conditions.��There�is�NO warranty;�not�even�for�MERCHANTABILITY�or�FITNESS�FOR�A�PARTICULAR�PURPOSE. $�gcc�-Wall�-Wextra�illegal_access.c�#�<=�No�error�shown $�./a.out����������������������������#�<=�No�segmentation�fault $�gcc�--version gcc�(Debian�6.3.0-18)�6.3.0�20170516 Copyright�(C)�2016�Free�Software�Foundation,�Inc. This�is�free�software;�see�the�source�for�copying�conditions.��There�is�NO warranty;�not�even�for�MERCHANTABILITY�or�FITNESS�FOR�A�PARTICULAR�PURPOSE. $�gcc�-Wall�-Wextra�illegal_access.c�#�<=�No�error�shown $�./a.out����������������������������#�<=�No�segmentation�fault
  • 24. But SEGV occurs if malloc return NULLBut SEGV occurs if malloc return NULLBut SEGV occurs if malloc return NULLBut SEGV occurs if malloc return NULLBut SEGV occurs if malloc return NULL $�w3m�http://www.nongnu.org/failmalloc/ $�wget�http://download.savannah.nongnu.org/releases/failmalloc/ failmalloc-1.0.tar.gz $�tar�xf�failmalloc-1.0.tar.gz $�(cd�failmalloc-1.0�&&�./configure�&&�make�&&�sudo�make�install) $�gcc�-Wall�illegal_access.c $�env�LD_PRELOAD=libfailmalloc.so�./a.out Segmentation�fault $�w3m�http://www.nongnu.org/failmalloc/ $�wget�http://download.savannah.nongnu.org/releases/failmalloc/ failmalloc-1.0.tar.gz $�tar�xf�failmalloc-1.0.tar.gz $�(cd�failmalloc-1.0�&&�./configure�&&�make�&&�sudo�make�install) $�gcc�-Wall�illegal_access.c $�env�LD_PRELOAD=libfailmalloc.so�./a.out Segmentation�fault $�w3m�http://www.nongnu.org/failmalloc/ $�wget�http://download.savannah.nongnu.org/releases/failmalloc/ failmalloc-1.0.tar.gz $�tar�xf�failmalloc-1.0.tar.gz $�(cd�failmalloc-1.0�&&�./configure�&&�make�&&�sudo�make�install) $�gcc�-Wall�illegal_access.c $�env�LD_PRELOAD=libfailmalloc.so�./a.out Segmentation�fault $�w3m�http://www.nongnu.org/failmalloc/ $�wget�http://download.savannah.nongnu.org/releases/failmalloc/ failmalloc-1.0.tar.gz $�tar�xf�failmalloc-1.0.tar.gz $�(cd�failmalloc-1.0�&&�./configure�&&�make�&&�sudo�make�install) $�gcc�-Wall�illegal_access.c $�env�LD_PRELOAD=libfailmalloc.so�./a.out Segmentation�fault $�w3m�http://www.nongnu.org/failmalloc/ $�wget�http://download.savannah.nongnu.org/releases/failmalloc/ failmalloc-1.0.tar.gz $�tar�xf�failmalloc-1.0.tar.gz $�(cd�failmalloc-1.0�&&�./configure�&&�make�&&�sudo�make�install) $�gcc�-Wall�illegal_access.c $�env�LD_PRELOAD=libfailmalloc.so�./a.out Segmentation�fault
  • 25. How to verify the simple example?How to verify the simple example?How to verify the simple example?How to verify the simple example?How to verify the simple example? Run "vfide" command on your terminal:Run "vfide" command on your terminal:Run "vfide" command on your terminal:Run "vfide" command on your terminal:Run "vfide" command on your terminal: $�vfide�illegal_access.c$�vfide�illegal_access.c$�vfide�illegal_access.c$�vfide�illegal_access.c$�vfide�illegal_access.c You should see "No matching heap chunks" error, after push "Verify" button. You should see "No matching heap chunks" error, after push "Verify" button. You should see "No matching heap chunks" error, after push "Verify" button. You should see "No matching heap chunks" error, after push "Verify" button. You should see "No matching heap chunks" error, after push "Verify" button.
  • 26. How to fix the error?How to fix the error?How to fix the error?How to fix the error?How to fix the error? //�File:�verifast/tutorial_solutions/illegal_access.c�--�fixed #include�"stdlib.h" struct�account�{ ����int�balance; }; int�main() ����//@�requires�true; ����//@�ensures�true; { ����struct�account�*myAccount�=�malloc(sizeof(struct�account)); ����if�(myAccount�==�0)�{�abort();�}�//�Uncomment ����myAccount->balance�=�5; ����free(myAccount); ����return�0; } //�File:�verifast/tutorial_solutions/illegal_access.c�--�fixed #include�"stdlib.h" struct�account�{ ����int�balance; }; int�main() ����//@�requires�true; ����//@�ensures�true; { ����struct�account�*myAccount�=�malloc(sizeof(struct�account)); ����if�(myAccount�==�0)�{�abort();�}�//�Uncomment ����myAccount->balance�=�5; ����free(myAccount); ����return�0; } //�File:�verifast/tutorial_solutions/illegal_access.c�--�fixed #include�"stdlib.h" struct�account�{ ����int�balance; }; int�main() ����//@�requires�true; ����//@�ensures�true; { ����struct�account�*myAccount�=�malloc(sizeof(struct�account)); ����if�(myAccount�==�0)�{�abort();�}�//�Uncomment ����myAccount->balance�=�5; ����free(myAccount); ����return�0; } //�File:�verifast/tutorial_solutions/illegal_access.c�--�fixed #include�"stdlib.h" struct�account�{ ����int�balance; }; int�main() ����//@�requires�true; ����//@�ensures�true; { ����struct�account�*myAccount�=�malloc(sizeof(struct�account)); ����if�(myAccount�==�0)�{�abort();�}�//�Uncomment ����myAccount->balance�=�5; ����free(myAccount); ����return�0; } //�File:�verifast/tutorial_solutions/illegal_access.c�--�fixed #include�"stdlib.h" struct�account�{ int�balance; }; int�main() //@�requires�true; //@�ensures�true; { struct�account�*myAccount�=�malloc(sizeof(struct�account)); ����if�(myAccount�==�0)�{�abort();�}�//�Uncomment ����myAccount->balance�=�5; ����free(myAccount); ����return�0; }
  • 27. Yeah, get green on verification!Yeah, get green on verification!Yeah, get green on verification!Yeah, get green on verification!Yeah, get green on verification!
  • 28. Why capture the error on verification?Why capture the error on verification?Why capture the error on verification?Why capture the error on verification?Why capture the error on verification? VeriFast has own header to define malloc():VeriFast has own header to define malloc():VeriFast has own header to define malloc():VeriFast has own header to define malloc():VeriFast has own header to define malloc(): //�File:�verifast/bin/malloc.h void�*malloc(int�size); ����//@�requires�0�<=�size; ����/*@ ����ensures ��������result�==�0�? ������������emp ��������: ������������chars(result,�size,�?cs)�&*&�malloc_block(result,�size)�&*& ������������true�==�((char�*)0�<�result�&& ���������������������result�+�size�<=�(char�*)UINTPTR_MAX); ����@*/ //�File:�verifast/bin/malloc.h void�*malloc(int�size); ����//@�requires�0�<=�size; ����/*@ ����ensures ��������result�==�0�? ������������emp ��������: ������������chars(result,�size,�?cs)�&*&�malloc_block(result,�size)�&*& ������������true�==�((char�*)0�<�result�&& ���������������������result�+�size�<=�(char�*)UINTPTR_MAX); ����@*/ //�File:�verifast/bin/malloc.h void�*malloc(int�size); ����//@�requires�0�<=�size; ����/*@ ����ensures ��������result�==�0�? ������������emp ��������: ������������chars(result,�size,�?cs)�&*&�malloc_block(result,�size)�&*& ������������true�==�((char�*)0�<�result�&& ���������������������result�+�size�<=�(char�*)UINTPTR_MAX); ����@*/ //�File:�verifast/bin/malloc.h void�*malloc(int�size); ����//@�requires�0�<=�size; ����/*@ ����ensures ��������result�==�0�? ������������emp ��������: ������������chars(result,�size,�?cs)�&*&�malloc_block(result,�size)�&*& ������������true�==�((char�*)0�<�result�&& ���������������������result�+�size�<=�(char�*)UINTPTR_MAX); ����@*/ //�File:�verifast/bin/malloc.h void�*malloc(int�size); //@�requires�0�<=�size; /*@ ����ensures ��������result�==�0�? ������������emp ��������: ������������chars(result,�size,�?cs)�&*&�malloc_block(result,�size)�&*& ������������true�==�((char�*)0�<�result�&& ���������������������result�+�size�<=�(char�*)UINTPTR_MAX); ����@*/
  • 29. How to verify ChibiOS/RT application?How to verify ChibiOS/RT application?How to verify ChibiOS/RT application?How to verify ChibiOS/RT application?How to verify ChibiOS/RT application? Run GNU make on your terminal:Run GNU make on your terminal:Run GNU make on your terminal:Run GNU make on your terminal:Run 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
  • 30. What's invariant on ChibiOS/RT?What's invariant on ChibiOS/RT?What's invariant on ChibiOS/RT?What's invariant on ChibiOS/RT?What's invariant on ChibiOS/RT? ☆ ChibiOS/RT has own system states☆ ChibiOS/RT has own system states☆ ChibiOS/RT has own system states☆ ChibiOS/RT has own system states☆ ChibiOS/RT has own system states
  • 31. The state chart means some invariantThe state chart means some invariantThe state chart means some invariantThe state chart means some invariantThe state chart means some invariant ☆ Application starts at "Init" state☆ Application starts at "Init" state☆ Application starts at "Init" state☆ Application starts at "Init" state☆ Application starts 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/RT API on "Thread" state ☆ You can call some ChibiOS/RT API on "Thread" state ☆ You can call some ChibiOS/RT API on "Thread" state ☆ You can call some ChibiOS/RT API on "Thread" state ☆ You can call some ChibiOS/RT 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.
  • 32. Your code already has annotationYour code already has annotationYour code already has annotationYour code already has annotationYour code already has annotation $�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);
  • 33. ChibiOS/RT API has pre/postconditionChibiOS/RT API has pre/postconditionChibiOS/RT API has pre/postconditionChibiOS/RT API has pre/postconditionChibiOS/RT 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);
  • 34. Let's violate the annotationLet's violate the annotationLet's violate the annotationLet's violate the annotationLet's violate the annotation $�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); ��chThdCreateStatic(waThread1,�THD_WORKING_AREA_SIZE(128),�NORMALPRIO,� Thread1,�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); ��chThdCreateStatic(waThread1,�THD_WORKING_AREA_SIZE(128),�NORMALPRIO,� Thread1,�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); ��chThdCreateStatic(waThread1,�THD_WORKING_AREA_SIZE(128),�NORMALPRIO,� Thread1,�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); ��chThdCreateStatic(waThread1,�THD_WORKING_AREA_SIZE(128),�NORMALPRIO,� Thread1,�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); ��chThdCreateStatic(waThread1,�THD_WORKING_AREA_SIZE(128),�NORMALPRIO,� Thread1,�NULL); ��while�(true) //@�invariant�chibios_sys_state_context(currentThread,�ThreadState); ��{ ����if�(!palReadPad(GPIOC,�GPIOC_BUTTON)) ������TestThread(&SD2); ����chThdSleepMilliseconds(500);
  • 35. 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
  • 36. More complex application #1More complex application #1More complex application #1More complex application #1More complex application #1 https://developer.mbed.org/platforms/ST-Discovery-F746NG/https://developer.mbed.org/platforms/ST-Discovery-F746NG/https://developer.mbed.org/platforms/ST-Discovery-F746NG/https://developer.mbed.org/platforms/ST-Discovery-F746NG/https://developer.mbed.org/platforms/ST-Discovery-F746NG/ ☆ Board name: "DISCO-F746NG"☆ Board name: "DISCO-F746NG"☆ Board name: "DISCO-F746NG"☆ Board name: "DISCO-F746NG"☆ Board name: "DISCO-F746NG" ☆ ChibiOS/RT application shows directories and files on SD card onto serial console ☆ ChibiOS/RT application shows directories and files on SD card onto serial console ☆ ChibiOS/RT application shows directories and files on SD card onto serial console ☆ ChibiOS/RT application shows directories and files on SD card onto serial console ☆ ChibiOS/RT application shows directories and files on SD card onto serial console ☆ Two functions are already verified☆ Two functions are already verified☆ Two functions are already verified☆ Two functions are already verified☆ Two functions are already verified ☆ First: tmrfunc() run on "ISR" state☆ First: tmrfunc() run on "ISR" state☆ First: tmrfunc() run on "ISR" state☆ First: tmrfunc() run on "ISR" state☆ First: tmrfunc() run on "ISR" state ☆ Second: tmr_init() run on "Thread" state☆ Second: tmr_init() run on "Thread" state☆ Second: tmr_init() run on "Thread" state☆ Second: tmr_init() run on "Thread" state☆ Second: tmr_init() run on "Thread" state
  • 37. More complex application #2More complex application #2More complex application #2More complex application #2More complex application #2 ☆ These functions use some APIs which have following invariant: ☆ These functions use some APIs which have following invariant: ☆ These functions use some APIs which have following invariant: ☆ These functions use some APIs which have following invariant: ☆ These functions use some APIs which have following invariant: *�chEvtBroadcastI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state *�chVTSetI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state *�chSysLock()�should�be�called�on�"Thread"�state, ��and�change�state�into�"S-Locked" *�chSysUnlock()�should�be�called�on�"S-Locked"�state, ��and�change�state�into�"Thread" *�chSysLockFromISR()�should�be�called�on�"ISR"�state, ��and�change�state�into�"I-Locked" *�chSysUnlockFromISR()�should�be�called�on�"I-Locked"�state, ��and�change�state�into�"ISR" *�chEvtBroadcastI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state *�chVTSetI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state *�chSysLock()�should�be�called�on�"Thread"�state, ��and�change�state�into�"S-Locked" *�chSysUnlock()�should�be�called�on�"S-Locked"�state, ��and�change�state�into�"Thread" *�chSysLockFromISR()�should�be�called�on�"ISR"�state, ��and�change�state�into�"I-Locked" *�chSysUnlockFromISR()�should�be�called�on�"I-Locked"�state, ��and�change�state�into�"ISR" *�chEvtBroadcastI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state *�chVTSetI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state *�chSysLock()�should�be�called�on�"Thread"�state, ��and�change�state�into�"S-Locked" *�chSysUnlock()�should�be�called�on�"S-Locked"�state, ��and�change�state�into�"Thread" *�chSysLockFromISR()�should�be�called�on�"ISR"�state, ��and�change�state�into�"I-Locked" *�chSysUnlockFromISR()�should�be�called�on�"I-Locked"�state, ��and�change�state�into�"ISR" *�chEvtBroadcastI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state *�chVTSetI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state *�chSysLock()�should�be�called�on�"Thread"�state, ��and�change�state�into�"S-Locked" *�chSysUnlock()�should�be�called�on�"S-Locked"�state, ��and�change�state�into�"Thread" *�chSysLockFromISR()�should�be�called�on�"ISR"�state, ��and�change�state�into�"I-Locked" *�chSysUnlockFromISR()�should�be�called�on�"I-Locked"�state, ��and�change�state�into�"ISR" *�chEvtBroadcastI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state *�chVTSetI()�should�be�called�on�"S-Locked"�or�"I-Locked"�state *�chSysLock()�should�be�called�on�"Thread"�state, ��and�change�state�into�"S-Locked" *�chSysUnlock()�should�be�called�on�"S-Locked"�state, ��and�change�state�into�"Thread" *�chSysLockFromISR()�should�be�called�on�"ISR"�state, ��and�change�state�into�"I-Locked" *�chSysUnlockFromISR()�should�be�called�on�"I-Locked"�state, ��and�change�state�into�"ISR"
  • 38. More complex application #3More complex application #3More complex application #3More complex application #3More complex application #3 $�cat�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP- FATFS-USB/verified/verified.c --snip-- static�int�cnt; --snip-- static�void�tmrfunc(void�*p) ���/*@ �������requires�chibios_sys_state_context(currentThread,�ISRState)�&*& �����������integer(&cnt,�?count); ���@*/ ���/*@ �������ensures�chibios_sys_state_context(currentThread,�ISRState)�&*& �����������integer(&cnt,�_); ���@*/ --snip-- $�cat�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP- FATFS-USB/verified/verified.c --snip-- static�int�cnt; --snip-- static�void�tmrfunc(void�*p) ���/*@ �������requires�chibios_sys_state_context(currentThread,�ISRState)�&*& �����������integer(&cnt,�?count); ���@*/ ���/*@ �������ensures�chibios_sys_state_context(currentThread,�ISRState)�&*& �����������integer(&cnt,�_); ���@*/ --snip-- $�cat�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP- FATFS-USB/verified/verified.c --snip-- static�int�cnt; --snip-- static�void�tmrfunc(void�*p) ���/*@ �������requires�chibios_sys_state_context(currentThread,�ISRState)�&*& �����������integer(&cnt,�?count); ���@*/ ���/*@ �������ensures�chibios_sys_state_context(currentThread,�ISRState)�&*& �����������integer(&cnt,�_); ���@*/ --snip-- $�cat�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP- FATFS-USB/verified/verified.c --snip-- static�int�cnt; --snip-- static�void�tmrfunc(void�*p) ���/*@ �������requires�chibios_sys_state_context(currentThread,�ISRState)�&*& �����������integer(&cnt,�?count); ���@*/ ���/*@ �������ensures�chibios_sys_state_context(currentThread,�ISRState)�&*& �����������integer(&cnt,�_); ���@*/ --snip-- $�cat�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP- FATFS-USB/verified/verified.c --snip-- static int�cnt; --snip-- static void�tmrfunc(void�*p) /*@ �������requires�chibios_sys_state_context(currentThread,�ISRState)�&*& �����������integer(&cnt,�?count); ���@*/ /*@ �������ensures�chibios_sys_state_context(currentThread,�ISRState)�&*& �����������integer(&cnt,�_); ���@*/ --snip--
  • 39. More complex application #4More complex application #4More complex application #4More complex application #4More complex application #4 --snip-- void�tmr_init(void�*p) ���/*@ �������requires�chibios_sys_state_context(currentThread,�ThreadState)�&*& �����������integer(&cnt,�_); ���@*/ ���/*@ �������ensures�chibios_sys_state_context(currentThread,�ThreadState)�&*& �����������integer(&cnt,�10); ���@*/ { ��chEvtObjectInit(&inserted_event); ��chEvtObjectInit(&removed_event); ��chSysLock(); ��cnt�=�POLLING_INTERVAL; --snip-- --snip-- void�tmr_init(void�*p) ���/*@ �������requires�chibios_sys_state_context(currentThread,�ThreadState)�&*& �����������integer(&cnt,�_); ���@*/ ���/*@ �������ensures�chibios_sys_state_context(currentThread,�ThreadState)�&*& �����������integer(&cnt,�10); ���@*/ { ��chEvtObjectInit(&inserted_event); ��chEvtObjectInit(&removed_event); ��chSysLock(); ��cnt�=�POLLING_INTERVAL; --snip-- --snip-- void�tmr_init(void�*p) ���/*@ �������requires�chibios_sys_state_context(currentThread,�ThreadState)�&*& �����������integer(&cnt,�_); ���@*/ ���/*@ �������ensures�chibios_sys_state_context(currentThread,�ThreadState)�&*& �����������integer(&cnt,�10); ���@*/ { ��chEvtObjectInit(&inserted_event); ��chEvtObjectInit(&removed_event); ��chSysLock(); ��cnt�=�POLLING_INTERVAL; --snip-- --snip-- void�tmr_init(void�*p) ���/*@ �������requires�chibios_sys_state_context(currentThread,�ThreadState)�&*& �����������integer(&cnt,�_); ���@*/ ���/*@ �������ensures�chibios_sys_state_context(currentThread,�ThreadState)�&*& �����������integer(&cnt,�10); ���@*/ { ��chEvtObjectInit(&inserted_event); ��chEvtObjectInit(&removed_event); ��chSysLock(); ��cnt�=�POLLING_INTERVAL; --snip-- --snip-- void�tmr_init(void�*p) /*@ �������requires�chibios_sys_state_context(currentThread,�ThreadState)�&*& �����������integer(&cnt,�_); ���@*/ /*@ �������ensures�chibios_sys_state_context(currentThread,�ThreadState)�&*& �����������integer(&cnt,�10); ���@*/ { ��chEvtObjectInit(&inserted_event); ��chEvtObjectInit(&removed_event); ��chSysLock(); ��cnt�=�POLLING_INTERVAL; --snip--
  • 40. You can see symbolic execution treeYou can see symbolic execution treeYou can see symbolic execution treeYou can see symbolic execution treeYou can see symbolic execution tree ☆ Please set off "Check arithmetic overflow" on "Verify" menu ☆ Please set off "Check arithmetic overflow" on "Verify" menu ☆ Please set off "Check arithmetic overflow" on "Verify" menu ☆ Please set off "Check arithmetic overflow" on "Verify" menu ☆ Please set off "Check arithmetic overflow" on "Verify" menu ☆ Push "Verify" button.☆ Push "Verify" button.☆ Push "Verify" button.☆ Push "Verify" button.☆ Push "Verify" button. ☆ Drag the right-hand border of the VeriFast window to the left ☆ Drag the right-hand border of the VeriFast window to the left ☆ Drag the right-hand border of the VeriFast window to the left ☆ Drag the right-hand border of the VeriFast window to the left ☆ Drag the right-hand border of the VeriFast window to the left ☆ Select "Verifying function 'tmrfunc'" item☆ Select "Verifying function 'tmrfunc'" item☆ Select "Verifying function 'tmrfunc'" item☆ Select "Verifying function 'tmrfunc'" item☆ Select "Verifying function 'tmrfunc'" item ☆ Click dots on the pane to follow symbolic execution tree ☆ Click dots on the pane to follow symbolic execution tree ☆ Click dots on the pane to follow symbolic execution tree ☆ Click dots on the pane to follow symbolic execution tree ☆ Click dots on the pane to follow symbolic execution tree
  • 41. Let's violate the annotationLet's violate the annotationLet's violate the annotationLet's violate the annotationLet's violate the annotation $�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS- USB/verified/verified.c void�tmr_init(void�*p) ���/*@�requires�chibios_sys_state_context(currentThread,�ISRState)�&*&� integer(&cnt,�?count);�@*/ ���/*@�ensures�chibios_sys_state_context(currentThread,�ISRState)�&*&�integer (&cnt,�_);�@*/ { ��chEvtObjectInit(&inserted_event); ��chEvtObjectInit(&removed_event); ��chSysLock(); ��cnt�=�POLLING_INTERVAL; ��systime_t�st�=�MS2ST(POLLING_DELAY); ��chSysUnlock();������������������//�<===�SWAP! ��chVTSetI(&tmr,�st,�tmrfunc,�p);�//�<===�SWAP! } $�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS- USB/verified/verified.c void�tmr_init(void�*p) ���/*@�requires�chibios_sys_state_context(currentThread,�ISRState)�&*&� integer(&cnt,�?count);�@*/ ���/*@�ensures�chibios_sys_state_context(currentThread,�ISRState)�&*&�integer (&cnt,�_);�@*/ { ��chEvtObjectInit(&inserted_event); ��chEvtObjectInit(&removed_event); ��chSysLock(); ��cnt�=�POLLING_INTERVAL; ��systime_t�st�=�MS2ST(POLLING_DELAY); ��chSysUnlock();������������������//�<===�SWAP! ��chVTSetI(&tmr,�st,�tmrfunc,�p);�//�<===�SWAP! } $�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS- USB/verified/verified.c void�tmr_init(void�*p) ���/*@�requires�chibios_sys_state_context(currentThread,�ISRState)�&*&� integer(&cnt,�?count);�@*/ ���/*@�ensures�chibios_sys_state_context(currentThread,�ISRState)�&*&�integer (&cnt,�_);�@*/ { ��chEvtObjectInit(&inserted_event); ��chEvtObjectInit(&removed_event); ��chSysLock(); ��cnt�=�POLLING_INTERVAL; ��systime_t�st�=�MS2ST(POLLING_DELAY); ��chSysUnlock();������������������//�<===�SWAP! ��chVTSetI(&tmr,�st,�tmrfunc,�p);�//�<===�SWAP! } $�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS- USB/verified/verified.c void�tmr_init(void�*p) ���/*@�requires�chibios_sys_state_context(currentThread,�ISRState)�&*&� integer(&cnt,�?count);�@*/ ���/*@�ensures�chibios_sys_state_context(currentThread,�ISRState)�&*&�integer (&cnt,�_);�@*/ { ��chEvtObjectInit(&inserted_event); ��chEvtObjectInit(&removed_event); ��chSysLock(); ��cnt�=�POLLING_INTERVAL; ��systime_t�st�=�MS2ST(POLLING_DELAY); ��chSysUnlock();������������������//�<===�SWAP! ��chVTSetI(&tmr,�st,�tmrfunc,�p);�//�<===�SWAP! } $�vi�chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS- USB/verified/verified.c void�tmr_init(void�*p) /*@�requires�chibios_sys_state_context(currentThread,�ISRState)�&*&� integer(&cnt,�?count);�@*/ /*@�ensures�chibios_sys_state_context(currentThread,�ISRState)�&*&�integer (&cnt,�_);�@*/ { ��chEvtObjectInit(&inserted_event); ��chEvtObjectInit(&removed_event); ��chSysLock(); ��cnt�=�POLLING_INTERVAL; ��systime_t�st�=�MS2ST(POLLING_DELAY); ��chSysUnlock();������������������//�<===�SWAP! ��chVTSetI(&tmr,�st,�tmrfunc,�p);�//�<===�SWAP! }
  • 42. 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
  • 43. Difference on VeriFast and Frama-C?Difference on VeriFast and Frama-C?Difference on VeriFast and Frama-C?Difference on VeriFast and Frama-C?Difference on VeriFast and Frama-C? "What�is�difference�between�VeriFast�and�Frama-C?" https://groups.google.com/forum/#!topic/verifast/xbUHyhPjAe4 "What�is�difference�between�VeriFast�and�Frama-C?" https://groups.google.com/forum/#!topic/verifast/xbUHyhPjAe4 "What�is�difference�between�VeriFast�and�Frama-C?" https://groups.google.com/forum/#!topic/verifast/xbUHyhPjAe4 "What�is�difference�between�VeriFast�and�Frama-C?" https://groups.google.com/forum/#!topic/verifast/xbUHyhPjAe4 "What�is�difference�between�VeriFast�and�Frama-C?" https://groups.google.com/forum/#!topic/verifast/xbUHyhPjAe4 ☆ WP plugin on Frama-C is similar to VeriFast☆ WP plugin on Frama-C is similar to VeriFast☆ WP plugin on Frama-C is similar to VeriFast☆ WP plugin on Frama-C is similar to VeriFast☆ WP plugin on Frama-C is similar to VeriFast ☆ WP and VeriFast have difference to deal with pointers ☆ WP and VeriFast have difference to deal with pointers ☆ WP and VeriFast have difference to deal with pointers ☆ WP and VeriFast have difference to deal with pointers ☆ WP and VeriFast have difference to deal with pointers ☆ WP maintains pointers on own memory model (first-order logic) ☆ WP maintains pointers on own memory model (first-order logic) ☆ WP maintains pointers on own memory model (first-order logic) ☆ WP maintains pointers on own memory model (first-order logic) ☆ WP maintains pointers on own memory model (first-order logic) ☆ VeriFast maintins pointers on separation logic☆ VeriFast maintins pointers on separation logic☆ VeriFast maintins pointers on separation logic☆ VeriFast maintins pointers on separation logic☆ VeriFast maintins pointers on separation logic
  • 44. HomeworkHomeworkHomeworkHomeworkHomework ☆ Get done with verifying entirely on following code. ☆ Get done with verifying entirely on following code. ☆ Get done with verifying entirely on following code. ☆ Get done with verifying entirely on following code. ☆ Get done with verifying entirely on following code. chibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS-USBchibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS-USBchibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS-USBchibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS-USBchibios-verifast/verifast_demo/STM32/RT-STM32F746G-DISCOVERY-LWIP-FATFS-USB ☆ Capture more invariant on ChibiOS/RT application (e.g. changing of global variable). ☆ Capture more invariant on ChibiOS/RT application (e.g. changing of global variable). ☆ Capture more invariant on ChibiOS/RT application (e.g. changing of global variable). ☆ Capture more invariant on ChibiOS/RT application (e.g. changing of global variable). ☆ Capture more invariant on ChibiOS/RT application (e.g. changing of global variable).
  • 45. For more informationFor more informationFor more informationFor more informationFor more information ##�In�English "The�VeriFast�Program�Verifier:�A�Tutorial" https://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdf ##�In�Japanese �プログラム検証器�VeriFast:�チュートリアル� https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/ Tutorial.md "TPPMark2016�を解きながら学ぶ�VeriFast" https://speakerdeck.com/eldesh/tppmark2016-wojie-kinagaraxue-bu-verifast "VeriFast�Termination�Checking�Introduction(α)" https://speakerdeck.com/eldesh/verifast-termination-checking-introduction-a ##�In�English "The�VeriFast�Program�Verifier:�A�Tutorial" https://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdf ##�In�Japanese �プログラム検証器�VeriFast:�チュートリアル� https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/ Tutorial.md "TPPMark2016�を解きながら学ぶ�VeriFast" https://speakerdeck.com/eldesh/tppmark2016-wojie-kinagaraxue-bu-verifast "VeriFast�Termination�Checking�Introduction(α)" https://speakerdeck.com/eldesh/verifast-termination-checking-introduction-a ##�In�English "The�VeriFast�Program�Verifier:�A�Tutorial" https://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdf ##�In�Japanese �プログラム検証器�VeriFast:�チュートリアル� https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/ Tutorial.md "TPPMark2016�を解きながら学ぶ�VeriFast" https://speakerdeck.com/eldesh/tppmark2016-wojie-kinagaraxue-bu-verifast "VeriFast�Termination�Checking�Introduction(α)" https://speakerdeck.com/eldesh/verifast-termination-checking-introduction-a ##�In�English "The�VeriFast�Program�Verifier:�A�Tutorial" https://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdf ##�In�Japanese �プログラム検証器�VeriFast:�チュートリアル� https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/ Tutorial.md "TPPMark2016�を解きながら学ぶ�VeriFast" https://speakerdeck.com/eldesh/tppmark2016-wojie-kinagaraxue-bu-verifast "VeriFast�Termination�Checking�Introduction(α)" https://speakerdeck.com/eldesh/verifast-termination-checking-introduction-a ##�In�English "The�VeriFast�Program�Verifier:�A�Tutorial" https://people.cs.kuleuven.be/~bart.jacobs/verifast/tutorial.pdf ##�In�Japanese �プログラム検証器 VeriFast:�チュートリアル� https://github.com/jverifast-ug/translate/blob/master/Manual/Tutorial/ Tutorial.md "TPPMark2016�を解きながら学ぶ VeriFast" https://speakerdeck.com/eldesh/tppmark2016-wojie-kinagaraxue-bu-verifast "VeriFast�Termination�Checking�Introduction(α)" https://speakerdeck.com/eldesh/verifast-termination-checking-introduction-a
  • 46. 簡約!? λカ娘10 @ 参照透明な海を守る会簡約!? λカ娘10 @ 参照透明な海を守る会簡約!? λカ娘10 @ 参照透明な海を守る会簡約!? λカ娘10 @ 参照透明な海を守る会簡約!? λカ娘10 @ 参照透明な海を守る会 ☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b☆ コミックマーケット92 - 1日⽬ ⾦曜日 東た11b ☆ http://www.paraiso-lang.org/ikmsm/books/ c92.html ☆ http://www.paraiso-lang.org/ikmsm/books/ c92.html ☆ http://www.paraiso-lang.org/ikmsm/books/ c92.html ☆ http://www.paraiso-lang.org/ikmsm/books/ c92.html ☆ http://www.paraiso-lang.org/ikmsm/books/ c92.html *�第1章�モナドとひも *�第2章�⽮澤にこ先輩と⼀緒にモナドモナド! *�第3章�Coqダンジョン:�底抜けの壺の夢 *�第4章�IST(Internal�Set�Theory)�⼊門�(後編) *�第5章�静的コード解析はいいぞ! *�第6章�VeriFastチュートリアル *�第1章�モナドとひも *�第2章�⽮澤にこ先輩と⼀緒にモナドモナド! *�第3章�Coqダンジョン:�底抜けの壺の夢 *�第4章�IST(Internal�Set�Theory)�⼊門�(後編) *�第5章�静的コード解析はいいぞ! *�第6章�VeriFastチュートリアル *�第1章�モナドとひも *�第2章�⽮澤にこ先輩と⼀緒にモナドモナド! *�第3章�Coqダンジョン:�底抜けの壺の夢 *�第4章�IST(Internal�Set�Theory)�⼊門�(後編) *�第5章�静的コード解析はいいぞ! *�第6章�VeriFastチュートリアル *�第1章�モナドとひも *�第2章�⽮澤にこ先輩と⼀緒にモナドモナド! *�第3章�Coqダンジョン:�底抜けの壺の夢 *�第4章�IST(Internal�Set�Theory)�⼊門�(後編) *�第5章�静的コード解析はいいぞ! *�第6章�VeriFastチュートリアル *�第1章 モナドとひも *�第2章 ⽮澤にこ先輩と⼀緒にモナドモナド! *�第3章 Coqダンジョン:�底抜けの壺の夢 *�第4章 IST(Internal�Set�Theory)�⼊門�(後編) *�第5章 静的コード解析はいいぞ! *�第6章 VeriFastチュートリアル
  • 47. 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. ☆ Fenrir Inc. provides this meeting room.☆ Fenrir Inc. provides this meeting room.☆ Fenrir Inc. provides this meeting room.☆ Fenrir Inc. provides this meeting room.☆ Fenrir Inc. provides this meeting room. ☆ @ruicc supports macOS environment.☆ @ruicc supports macOS environment.☆ @ruicc supports macOS environment.☆ @ruicc supports macOS environment.☆ @ruicc supports macOS environment. ☆ @eldesh supports Windows environment, and gives much advice for usage of VeriFast. ☆ @eldesh supports Windows environment, and gives much advice for usage of VeriFast. ☆ @eldesh supports Windows environment, and gives much advice for usage of VeriFast. ☆ @eldesh supports Windows environment, and gives much advice for usage of VeriFast. ☆ @eldesh supports Windows environment, and gives much advice for usage of VeriFast.
  • 48. 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
  • 49. 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
  • 50. 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 *�kindle�paperwhite�3G�│�Kindle�paperwhite...�│�Tatsuo�Yamashita�│�Flickr ��https://www.flickr.com/photos/yto/8197280407/ ��Copyright:�Tatsuo�Yamashita�/�License:�CC�BY�2.0 *�buttons�│�Dean�Hochman�│�Flickr ��https://www.flickr.com/photos/deanhochman/33100533341/ ��Copyright:�Dean�Hochman�/�License:�CC�BY�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 *�kindle�paperwhite�3G�│�Kindle�paperwhite...�│�Tatsuo�Yamashita�│�Flickr ��https://www.flickr.com/photos/yto/8197280407/ ��Copyright:�Tatsuo�Yamashita�/�License:�CC�BY�2.0 *�buttons�│�Dean�Hochman�│�Flickr ��https://www.flickr.com/photos/deanhochman/33100533341/ ��Copyright:�Dean�Hochman�/�License:�CC�BY�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 *�kindle�paperwhite�3G�│�Kindle�paperwhite...�│�Tatsuo�Yamashita�│�Flickr ��https://www.flickr.com/photos/yto/8197280407/ ��Copyright:�Tatsuo�Yamashita�/�License:�CC�BY�2.0 *�buttons�│�Dean�Hochman�│�Flickr ��https://www.flickr.com/photos/deanhochman/33100533341/ ��Copyright:�Dean�Hochman�/�License:�CC�BY�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 *�kindle�paperwhite�3G�│�Kindle�paperwhite...�│�Tatsuo�Yamashita�│�Flickr ��https://www.flickr.com/photos/yto/8197280407/ ��Copyright:�Tatsuo�Yamashita�/�License:�CC�BY�2.0 *�buttons�│�Dean�Hochman�│�Flickr ��https://www.flickr.com/photos/deanhochman/33100533341/ ��Copyright:�Dean�Hochman�/�License:�CC�BY�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 *�kindle�paperwhite�3G�│�Kindle�paperwhite...�│�Tatsuo�Yamashita�│�Flickr ��https://www.flickr.com/photos/yto/8197280407/ ��Copyright:�Tatsuo�Yamashita�/�License:�CC�BY�2.0 *�buttons�│�Dean�Hochman�│�Flickr ��https://www.flickr.com/photos/deanhochman/33100533341/ ��Copyright:�Dean�Hochman�/�License:�CC�BY�2.0