SlideShare a Scribd company logo
ARM Programming with
GNAT and Ada 2012
Pat Rogers
Boston, MA
3-4 November, 2015
Goals
• Introduce the target hardware
• Introduce the development environment
– Tools, runtime libraries, etc.
• Show you some “tips and tricks” we use internally
– Switches we apply
– Debugging techniques
– et cetera
• Basically everything you need to get started
• Provide pointers for where to go next
– The AdaCore bare-board community GitHub project
2
Agenda
• The Target Hardware
• The Software Tools
• The Runtime Libraries
• “Hello World”
• Where To Go Next
3
The Target Hardware
“STM32F4 Discovery” Evaluation Board
• 32-bit ARM Cortex-M4F microcontroller at 168 MHz
• 1 MB of Flash memory
• 192 KB of RAM
• On-board USB-JTAG debugger interface
• Four user LEDs: orange, green, red, blue
• Two pushbuttons (user (blue) and system reset (black))
• 3-axis accelerometer
• Timers, DMA, USARTs, others…
5
“STM32F4 Discovery” On-Board Devices
“ST-LINK” USB
Debug Support
User LEDs
Port/Pin Header
Port/Pin Header
Audio Out
Jack
Audio DAC
6
“STM32F429 Discovery” On-Board Devices
“ST-LINK”
USB Debug
Support
User LEDs
2.24” QVGA LCD
with Touch Panel
3-Axis Gyro included
7
The Software Tools
Required Software
• You should already have these installed
• The USB device driver
– Third-party software available publicly
– Install this before you ever connect the board to the host
computer
• The GNAT GPL 2015 release
– Compiler etc.
– GPS
• The “st-link” utilities (“st-util” and “st-flash”)
– Pre-installed with Windows installation of GNAT tools
– Must be built and installed by Linux users
9
Connecting the USB Cable
• Connects the on-board power/debug USB connector to the host
computer
• If it doesn’t fit, that’s the wrong end!
– The other one is Micro-USB and is much thinner
Power/Debug
Mini-USB
Connector
10
Using the “ST-LINK” Utilities
• “st-util” provides a GDB server that talks to the on-board support
• “st-flash” writes apps to memory
• Available on the command line
• Both available via GPS toolbar when the plug-in is active
• You may need to run st-util on the command line if the board is
unresponsive to GPS’ invocation of it
– st-util will “get the board’s attention” when seems hung up
• Sometimes you’ll need to cycle power to the board
11
Flashing & Debugging Within GPS
• Supports STM32F4 boards via st-link utils
• Invoked using toolbar icons
• Visible only if “stm32f4” is used in the gpr file to specify the runtime
library name
Flash to
Board
Load, then
start GDB
12
GNAT Project Files
• Text files with Ada-like syntax
• Also known as “gpr files” due to file extension
• Integrated into command-line tools
– Specified via the –P project-file-name switch
• Integrated into the IDEs
– The fundamental artifact
13
Configurable Properties
• Source directories and specific files’ names
• Output directory for object modules and .ali files
• Switch settings for tools
• Source files for main subprogram(s) to be built
• Source programming languages
– Ada / C / C++ are preconfigured
• Many others…
14
Sample Simple Project File
project Demo is
for Languages use ("Ada");
for Main use ("demo.adb");
for Source_Dirs use ("src");
for Object_Dir use "obj";
package Compiler is
for Switches ("Ada") use
("-g", -- enable debugging
"-gnatwa", -- enable all optional warnings
"-gnata", -- enable pre/postcondition checks
"-gnatQ", -- don’t quit
"-gnatw.X"); -- suppress warnings about exceptions
end Compiler;
package Builder is
for Switches ("Ada") use ("-g"); -- enable debugging
end Builder;
end Demo;
15
Specifying the Remote Connection
• Enables GDB to locate the GDB server
project Demo is
…
package Ide is
for Program_Host use "localhost:4242";
for Communication_Protocol use "remote";
end Ide;
…
end Demo;
16
Removing Unused Data and Object Code
• Requires switches for compiler and linker
package Linker is
for Switches ("Ada") use ("-Wl,--gc-sections", "-Wl,--print-gc-sections");
end Linker;
Optional. Prints
those removed.
Required
package Compiler is
case Build_Mode is
when "debug" =>
…
when "production" =>
for Switches ("Ada") use (…, "-ffunction-sections", "-fdata-sections");
end case;
end Compiler;
RequiredRequired
17
Displaying Percentages Used
• Implemented after GNAT GPL 2015 release
package Linker is
for Switches ("Ada") use ("-Wl,--gc-sections", "-Wl,--print-memory-usage");
end Linker;
18
The Runtime Libraries
The Bare-Board Runtime Libraries
• “SFP” (Small Foot Print”)
– Intended for certification
– A subset of the non-tasking part of the language
• “Full”
– A very large subset of the non-tasking part of the language
• Both provide the Ravenscar tasking subset
• Both are reconfigurable
– You can add or remove functionality and rebuild
• There is also a Zero Footprint “ZFP” runtime
– No tasking
– Almost no object code
20
The Runtime Library Names
• Indicate whether Ravenscar is provided
• Indicate the degree of language subset supported
• Indicate the target platform
• Examples
– “zfp-stm32f4”
– “ravenscar-full-stm32f4”
– “ravenscar-sfp-stm32f4”
Ravenscar
tasking
subset
Small
Footprint
subset
Target
Hardware
21
Essential Project File Content
• Specify the runtime library directory path/name
• Specify the platform name
• Both can be specified on the command-line but easier in gpr file
for Runtime ("Ada") use "ravenscar-sfp-stm32f4";
for Target use "arm-eabi";
Basename sufficient
when in default
location
for Runtime ("Ada") use "/path/to/ravenscar-full-stm32f429";
22
The Last Chance Handler (“LCH”)
• Specifies response to unhandled exceptions
– Since exception propagation is not supported in some RTLs
– The last thing executed in that case
• A procedure
• Semantics
– Called automatically by compiled code
– Must never return to caller (loop forever, reset, etc.)
• Default version does nothing but loop
• A user-defined version can override default
23
Lab 1
“Hello World”
“Hello World” of Embedded Systems
• Blinks LEDs, of course!
• Located in the compiler installation tree
– Directory name is “demo_leds-stm32f4”
• In Windows, with default installation choice:
• Contains a GNAT project file
• Located it and invoke GPS with it now
C:GNAT2015shareexamplesgnat-crossdemo_leds-stm32f4
demo_leds.gpr
25
26
27
Build Output In Messages View
28
Load Into Flash and Execute
• Load the program into FLASH using toolbar icon
• Program will start automatically after loading
– You may need to reset the board using the black button
– Sometimes you must cycle power to the board
29
Loaded and Running
Plugin loads
the image Push the blue User
button to change the
LED rotation directionUser LEDs
30
Troubleshooting Load/Debug In GPS
• If GPS toolbar icon cannot work for some reason…
• Terminate the debug session in GPS
• Open a command line and invoke st-util there
– It will connect to the board, emit some messages, and wait for
GDB server commands
Command Line st-util for Debugging
• In GPS, start the debugger via the menu
– Apply the “Debug -> Initialize -> demo” menu
32
Additional st-util Messages In Shell
• You will see messages from st-util in the command line console
33
Debugger Then Connects In GPS
34
And You’re Ready To Go…
• You can set breakpoints, etc. if desired
• Then press the debugger toolbar icon to “Continue” (or start) to run
35
Source Files Included
• gnat.adc
• button.adb
• button.ads
• demo.adb
• driver.adb
• driver.ads
• last_chance_handler.adb
• last_chance_handler.ads
• leds.adb
• leds.ads
• registers.ads
• stm32f4.ads
• stm32f4-gpio.ads
• stm32f4-reset_clock_control.ads
• stm32f4-sysconfig_control.ads
pragma Partition_Elaboration_Policy (Sequential);
36
Main Subprogram
with Driver; pragma Unreferenced (Driver);
-- The Driver package contains the task that actually controls the app so
-- although it is not referenced directly in the main procedure, we need it
-- in the closure of the context clauses so that it will be included in the
-- executable.
with Last_Chance_Handler; pragma Unreferenced (Last_Chance_Handler);
-- The "last chance handler" is the user-defined routine that is called when
-- an exception is propagated. We need it in the executable, therefore it
-- must be somewhere in the closure of the context clauses.
with System;
procedure Demo is
pragma Priority (System.Priority'First);
begin
loop
null;
end loop;
end Demo;
37
Setting Tasks’ Stacks and Priorities
• For any task created, set the stack to around 4K
– The default is far too large for these boards
– Can make it larger if necessary
• Can set the priority similarly, as needed
– Remember there is a default applied already
package Driver is
task Controller is
pragma Storage_Size (4 * 1024);
end Controller;
end Driver;
package Driver is
task Controller
with Storage_Size => (4 * 1024);
end Driver;
OR
38
with LEDs; use LEDs;
with Button; use Button;
with Ada.Real_Time; use Ada.Real_Time;
package body Driver is
type Index is mod 4;
Pattern : constant array (Index) of User_LED := (Orange, Red, Blue, Green);
task body Controller is
Period : constant Time_Span := Milliseconds (75); -- arbitrary
Next_Start : Time := Clock;
Next_LED : Index := 0;
begin
loop
Off (Pattern (Next_LED));
if Button.Current_Direction = Counterclockwise then
Next_LED := Next_LED - 1;
else
Next_LED := Next_LED + 1;
end if;
On (Pattern (Next_LED));
Next_Start := Next_Start + Period;
delay until Next_Start;
end loop;
end Controller;
end Driver; 39
package Button is
pragma Elaborate_Body;
type Directions is (Clockwise, Counterclockwise);
function Current_Direction return Directions;
end Button;
Button Interface
• Pressing the blue User button changes the value returned by the
“current direction” function
40
with Ada.Interrupts.Names;
with Ada.Real_Time; use Ada.Real_Time;
with Registers; use Registers;
with STM32F4; use STM32F4;
with STM32F4.GPIO; use STM32F4.GPIO;
package body Button is
protected Button is
function Current_Direction return Directions;
…
end Button;
protected body Button is
function Current_Direction return Directions is …
procedure Interrupt_Handler is …
end Button;
function Current_Direction return Directions is
begin
return User_Button.Current_Direction;
end Current_Direction;
procedure Initialize is …
begin
Initialize;
end Button;
41
protected Button is
pragma Interrupt_Priority;
function Current_Direction return Directions;
private
procedure Interrupt_Handler;
pragma Attach_Handler
(Interrupt_Handler, Ada.Interrupts.Names.EXTI0_Interrupt);
Direction : Directions := Clockwise; -- arbitrary
Last_Time : Time := Clock;
end Button;
42
Debounce_Time : constant Time_Span := Milliseconds (500); -- semi-arbitrary
protected body Button is
function Current_Direction return Directions is
begin
return Button.Current_Direction;
end Current_Direction;
procedure Interrupt_Handler is
Now : constant Time := Clock;
begin
-- Clear interrupt
EXTI.PR (0) := 1;
-- Debouncing
if Now - Last_Time >= Debounce_Time then
if Direction = Counterclockwise then
Direction := Clockwise;
else
Direction := Counterclockwise;
end if;
Last_Time := Now;
end if;
end Interrupt_Handler;
end Button;
43
…
with Registers; use Registers;
with STM32F4; use STM32F4;
with STM32F4.GPIO; use STM32F4.GPIO;
package body Button is
…
procedure Initialize is
RCC_AHB1ENR_GPIOA : constant Word := 16#01#;
begin
-- Enable clock for GPIO-A
RCC.AHB1ENR := RCC.AHB1ENR or RCC_AHB1ENR_GPIOA;
-- Configure PA0
GPIOA.MODER (0) := Mode_IN;
GPIOA.PUPDR (0) := No_Pull;
-- Select PA0 for EXTI0
SYSCFG.EXTICR1 (0) := 0;
-- Interrupt on rising edge
EXTI.FTSR (0) := 0;
EXTI.RTSR (0) := 1;
EXTI.IMR (0) := 1;
end Initialize;
begin
Initialize;
end Button; 44
Using the LCH with the Debugger
• Put a breakpoint on the first statement
• If breakpoint is hit, use GPS to examine the memory at Msg.all to
show the designated string
– Use the “Debug->Data->Examine Memory” menu
– Put “msg.all” into the Locations entry pane (no quotes)
…
package body Last_Chance_Handler is
procedure Last_Chance_Handler (Msg : System.Address; Line : Integer) is
begin
Off (Green);
…
end Last_Chance_Handler;
end Last_Chance_Handler;
45
Where To Go From Here
STM32F4 Documentation
• For devices across the entire STM32F4 family
– GPIO, Timers, etc.
– “RM0090 Reference manual”
– Subtitled “STM32F405xx/07xx, STM32F415xx/17xx,
STM32F42xxx and STM32F43xxx advanced ARM-based 32-bit
MCUs”
– Also known as file “DM0003120”
• Specific to the STM32F4 Discovery board
– “UM1472 User manual”
– Subtitled “Discovery kit for STM32F407/417 lines”
– Also known as file “DM00039084”
47
GNAT and GPS Documentation
• The GNAT Cross User Guide
– “GNAT User's Guide Supplement for Cross Platforms”
– Especially see the tutorial: “ARM-ELF Topics and Tutorial”
• GPS Users Guide
48
The ARM GitHub Repository
• https://github.com/AdaCore/bareboard
• Makes everything much easier!
• Adds significant functionality
• Contents, currently for STM32F4 products:
– Device drivers
– Complete demonstration projects for drivers
– Components (using drivers) e.g., Gyro and Accelerometer
– Complete demonstration projects for components
– Larger applications
• Trains, and Game of Life, both on STM32F429
• Licensed for both proprietary and Free apps
49
STM32F4_Discovery Package
…
package STM32F4_Discovery is
subtype User_LED is GPIO_Pin;
Green : User_LED renames Pin_12;
Orange : User_LED renames Pin_13;
Red : User_LED renames Pin_14;
Blue : User_LED renames Pin_15;
All_LEDs : constant GPIO_Pins := LED3 & LED4 & LED5 & LED6;
…
procedure Initialize_LEDs;
procedure Turn_On (This : User_LED) with Inline;
procedure Turn_Off (This : User_LED) with Inline;
procedure Toggle (This : User_LED) with Inline;
…
Accelerometer : Three_Axis_Accelerometer;
GPIO_A : GPIO_Port renames STM32F40xxx.GPIO_A;
GPIO_B : GPIO_Port renames STM32F40xxx.GPIO_B;
…
User_Button_Port : GPIO_Port renames GPIO_A;
User_Button_Pin : constant GPIO_Pin := Pin_0;
User_Button_Interrupt : constant Interrupt_Id := Names.EXTI0_Interrupt;
…
Board Additions
Board Addition
Board Specific Number
Board Addition
50
51
STM32F429_Discovery Package
…
package STM32F429_Discovery is
subtype User_LED is GPIO_Pin;
Green : User_LED renames Pin_13;
Red : User_LED renames Pin_14;
All_LEDs : constant GPIO_Pins := LED3 & LED4;
…
procedure Initialize_LEDs;
…
procedure Toggle (This : User_LED) with Inline;
…
Gyro : Three_Axis_Gyroscope;
GPIO_A : GPIO_Port renames STM32F42xxx.GPIO_A;
GPIO_B : GPIO_Port renames STM32F42xxx.GPIO_B;
…
GPIO_K : GPIO_Port renames STM32F42xxx.GPIO_K;
…
Two Fewer User LEDs
Two More
GPIO Ports
Other device differences…
Gyro instead of
accelerometer
Example Driver Library Simplification
procedure Initialize is
begin
Configure_User_Button_GPIO;
Connect_External_Interrupt (User_Button_Port, User_Button_Pin);
Configure_Trigger (User_Button_Port, User_Button_Pin, Interrupt_Rising_Edge);
end Initialize;
procedure Initialize is
RCC_AHB1ENR_GPIOA : constant Word := 16#01#;
begin
-- Enable clock for GPIO-A
RCC.AHB1ENR := RCC.AHB1ENR or RCC_AHB1ENR_GPIOA;
-- Configure PA0
GPIOA.MODER (0) := Mode_IN;
GPIOA.PUPDR (0) := No_Pull;
-- Select PA0 for EXTI0
SYSCFG.EXTICR1 (0) := 0;
-- Interrupt on rising edge
EXTI.FTSR (0) := 0;
EXTI.RTSR (0) := 1;
EXTI.IMR (0) := 1;
end Initialize;
52
Finished!

More Related Content

What's hot

1_PB_Semana_1.pdf
1_PB_Semana_1.pdf1_PB_Semana_1.pdf
1_PB_Semana_1.pdf
Heyler Martinez
 
Power BI Tutorial For Beginners | Power BI Tutorial | Power BI Demo | Power B...
Power BI Tutorial For Beginners | Power BI Tutorial | Power BI Demo | Power B...Power BI Tutorial For Beginners | Power BI Tutorial | Power BI Demo | Power B...
Power BI Tutorial For Beginners | Power BI Tutorial | Power BI Demo | Power B...
Edureka!
 
Power bi (1)Power BI Online Training Hyderabad | power bi online training ben...
Power bi (1)Power BI Online Training Hyderabad | power bi online training ben...Power bi (1)Power BI Online Training Hyderabad | power bi online training ben...
Power bi (1)Power BI Online Training Hyderabad | power bi online training ben...
Big IT Trainings
 
Guía power bi
Guía   power biGuía   power bi
Guía power bi
Reber Cedano
 
Power bi software
Power bi softwarePower bi software
Power bi software
AboubacarAhamadaRouf
 
Power bi introduction
Power bi introductionPower bi introduction
Power bi introduction
Bishwadeb Dey
 
Power BI Overview
Power BI Overview Power BI Overview
Power BI Overview
Gal Vekselman
 
Introduccion a PowerBI
Introduccion a PowerBIIntroduccion a PowerBI
Introduccion a PowerBI
jorge Muchaypiña
 
Working with Microsoft Power Business Inteligence Tools - Presented by Atidan
Working with Microsoft Power Business Inteligence Tools - Presented by AtidanWorking with Microsoft Power Business Inteligence Tools - Presented by Atidan
Working with Microsoft Power Business Inteligence Tools - Presented by AtidanDavid J Rosenthal
 
Business intelligence
Business intelligenceBusiness intelligence
Business intelligence
Roots Cast Pvt Ltd
 
Business Analyst Training
Business  Analyst  TrainingBusiness  Analyst  Training
Business Analyst Training
Craig Brown
 
BI Presentation
BI PresentationBI Presentation
BI Presentation
Dhiren Gala
 
Power BI for CEO
Power BI for CEOPower BI for CEO
Power BI for CEO
Vishal Pawar
 
Power BI Premium : pour quels usages ?
Power BI Premium : pour quels usages ?Power BI Premium : pour quels usages ?
Power BI Premium : pour quels usages ?
Joël Crest
 
Basics of BI and Data Management (Summary).pdf
Basics of BI and Data Management (Summary).pdfBasics of BI and Data Management (Summary).pdf
Basics of BI and Data Management (Summary).pdf
amorshed
 
Intro for Power BI
Intro for Power BIIntro for Power BI
Intro for Power BI
Martin X
 
Power BI Architecture
Power BI ArchitecturePower BI Architecture
Power BI Architecture
Arthur Graus
 
Business Intelligence (BI) and Data Management Basics
Business Intelligence (BI) and Data Management  Basics Business Intelligence (BI) and Data Management  Basics
Business Intelligence (BI) and Data Management Basics
amorshed
 
Taller Power Bi caso practico
Taller Power Bi  caso practicoTaller Power Bi  caso practico
Taller Power Bi caso practico
Natali Lujan Allende
 
Business Intelligence tools comparison
Business Intelligence tools comparisonBusiness Intelligence tools comparison
Business Intelligence tools comparison
Stratebi
 

What's hot (20)

1_PB_Semana_1.pdf
1_PB_Semana_1.pdf1_PB_Semana_1.pdf
1_PB_Semana_1.pdf
 
Power BI Tutorial For Beginners | Power BI Tutorial | Power BI Demo | Power B...
Power BI Tutorial For Beginners | Power BI Tutorial | Power BI Demo | Power B...Power BI Tutorial For Beginners | Power BI Tutorial | Power BI Demo | Power B...
Power BI Tutorial For Beginners | Power BI Tutorial | Power BI Demo | Power B...
 
Power bi (1)Power BI Online Training Hyderabad | power bi online training ben...
Power bi (1)Power BI Online Training Hyderabad | power bi online training ben...Power bi (1)Power BI Online Training Hyderabad | power bi online training ben...
Power bi (1)Power BI Online Training Hyderabad | power bi online training ben...
 
Guía power bi
Guía   power biGuía   power bi
Guía power bi
 
Power bi software
Power bi softwarePower bi software
Power bi software
 
Power bi introduction
Power bi introductionPower bi introduction
Power bi introduction
 
Power BI Overview
Power BI Overview Power BI Overview
Power BI Overview
 
Introduccion a PowerBI
Introduccion a PowerBIIntroduccion a PowerBI
Introduccion a PowerBI
 
Working with Microsoft Power Business Inteligence Tools - Presented by Atidan
Working with Microsoft Power Business Inteligence Tools - Presented by AtidanWorking with Microsoft Power Business Inteligence Tools - Presented by Atidan
Working with Microsoft Power Business Inteligence Tools - Presented by Atidan
 
Business intelligence
Business intelligenceBusiness intelligence
Business intelligence
 
Business Analyst Training
Business  Analyst  TrainingBusiness  Analyst  Training
Business Analyst Training
 
BI Presentation
BI PresentationBI Presentation
BI Presentation
 
Power BI for CEO
Power BI for CEOPower BI for CEO
Power BI for CEO
 
Power BI Premium : pour quels usages ?
Power BI Premium : pour quels usages ?Power BI Premium : pour quels usages ?
Power BI Premium : pour quels usages ?
 
Basics of BI and Data Management (Summary).pdf
Basics of BI and Data Management (Summary).pdfBasics of BI and Data Management (Summary).pdf
Basics of BI and Data Management (Summary).pdf
 
Intro for Power BI
Intro for Power BIIntro for Power BI
Intro for Power BI
 
Power BI Architecture
Power BI ArchitecturePower BI Architecture
Power BI Architecture
 
Business Intelligence (BI) and Data Management Basics
Business Intelligence (BI) and Data Management  Basics Business Intelligence (BI) and Data Management  Basics
Business Intelligence (BI) and Data Management Basics
 
Taller Power Bi caso practico
Taller Power Bi  caso practicoTaller Power Bi  caso practico
Taller Power Bi caso practico
 
Business Intelligence tools comparison
Business Intelligence tools comparisonBusiness Intelligence tools comparison
Business Intelligence tools comparison
 

Similar to Tech Days 2015: ARM Programming with GNAT and Ada 2012

Using FPGA in Embedded Devices
Using FPGA in Embedded DevicesUsing FPGA in Embedded Devices
Using FPGA in Embedded Devices
GlobalLogic Ukraine
 
One Year of Porting - Post-mortem of two Linux/SteamOS launches
One Year of Porting - Post-mortem of two Linux/SteamOS launchesOne Year of Porting - Post-mortem of two Linux/SteamOS launches
One Year of Porting - Post-mortem of two Linux/SteamOS launches
Leszek Godlewski
 
Linux Kernel Platform Development: Challenges and Insights
 Linux Kernel Platform Development: Challenges and Insights Linux Kernel Platform Development: Challenges and Insights
Linux Kernel Platform Development: Challenges and Insights
GlobalLogic Ukraine
 
UWE Linux Boot Camp 2007: Hacking embedded Linux on the cheap
UWE Linux Boot Camp 2007: Hacking embedded Linux on the cheapUWE Linux Boot Camp 2007: Hacking embedded Linux on the cheap
UWE Linux Boot Camp 2007: Hacking embedded Linux on the cheap
edlangley
 
Mesa and Its Debugging
Mesa and Its DebuggingMesa and Its Debugging
Mesa and Its Debugging
GlobalLogic Ukraine
 
Hands on OpenCL
Hands on OpenCLHands on OpenCL
Hands on OpenCL
Vladimir Starostenkov
 
Getting started with AMD GPUs
Getting started with AMD GPUsGetting started with AMD GPUs
Getting started with AMD GPUs
George Markomanolis
 
Add sale davinci
Add sale davinciAdd sale davinci
Add sale davinciAkash Sahoo
 
Utilizing AMD GPUs: Tuning, programming models, and roadmap
Utilizing AMD GPUs: Tuning, programming models, and roadmapUtilizing AMD GPUs: Tuning, programming models, and roadmap
Utilizing AMD GPUs: Tuning, programming models, and roadmap
George Markomanolis
 
01 linux-quick-start
01 linux-quick-start01 linux-quick-start
01 linux-quick-startNguyen Vinh
 
Mesa and Its Debugging, Вадим Шовкопляс
Mesa and Its Debugging, Вадим ШовкоплясMesa and Its Debugging, Вадим Шовкопляс
Mesa and Its Debugging, Вадим Шовкопляс
Sigma Software
 
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
OpenShift Origin
 
Tech Day 2015: A Gentle Introduction to GPS and GNATbench
Tech Day 2015: A Gentle Introduction to GPS and GNATbenchTech Day 2015: A Gentle Introduction to GPS and GNATbench
Tech Day 2015: A Gentle Introduction to GPS and GNATbench
AdaCore
 
TRACK F: OpenCL for ALTERA FPGAs, Accelerating performance and design product...
TRACK F: OpenCL for ALTERA FPGAs, Accelerating performance and design product...TRACK F: OpenCL for ALTERA FPGAs, Accelerating performance and design product...
TRACK F: OpenCL for ALTERA FPGAs, Accelerating performance and design product...chiportal
 
Getting started with Intel IoT Developer Kit
Getting started with Intel IoT Developer KitGetting started with Intel IoT Developer Kit
Getting started with Intel IoT Developer Kit
Sulamita Garcia
 
Efabless Marketplace webinar slides 2024
Efabless Marketplace webinar slides 2024Efabless Marketplace webinar slides 2024
Efabless Marketplace webinar slides 2024
Nobin Mathew
 
lecture11_GPUArchCUDA01.pptx
lecture11_GPUArchCUDA01.pptxlecture11_GPUArchCUDA01.pptx
lecture11_GPUArchCUDA01.pptx
ssuser413a98
 
Packaging perl (LPW2010)
Packaging perl (LPW2010)Packaging perl (LPW2010)
Packaging perl (LPW2010)
p3castro
 
Can FPGAs Compete with GPUs?
Can FPGAs Compete with GPUs?Can FPGAs Compete with GPUs?
Can FPGAs Compete with GPUs?
inside-BigData.com
 
High-Performance Computing with C++
High-Performance Computing with C++High-Performance Computing with C++
High-Performance Computing with C++
JetBrains
 

Similar to Tech Days 2015: ARM Programming with GNAT and Ada 2012 (20)

Using FPGA in Embedded Devices
Using FPGA in Embedded DevicesUsing FPGA in Embedded Devices
Using FPGA in Embedded Devices
 
One Year of Porting - Post-mortem of two Linux/SteamOS launches
One Year of Porting - Post-mortem of two Linux/SteamOS launchesOne Year of Porting - Post-mortem of two Linux/SteamOS launches
One Year of Porting - Post-mortem of two Linux/SteamOS launches
 
Linux Kernel Platform Development: Challenges and Insights
 Linux Kernel Platform Development: Challenges and Insights Linux Kernel Platform Development: Challenges and Insights
Linux Kernel Platform Development: Challenges and Insights
 
UWE Linux Boot Camp 2007: Hacking embedded Linux on the cheap
UWE Linux Boot Camp 2007: Hacking embedded Linux on the cheapUWE Linux Boot Camp 2007: Hacking embedded Linux on the cheap
UWE Linux Boot Camp 2007: Hacking embedded Linux on the cheap
 
Mesa and Its Debugging
Mesa and Its DebuggingMesa and Its Debugging
Mesa and Its Debugging
 
Hands on OpenCL
Hands on OpenCLHands on OpenCL
Hands on OpenCL
 
Getting started with AMD GPUs
Getting started with AMD GPUsGetting started with AMD GPUs
Getting started with AMD GPUs
 
Add sale davinci
Add sale davinciAdd sale davinci
Add sale davinci
 
Utilizing AMD GPUs: Tuning, programming models, and roadmap
Utilizing AMD GPUs: Tuning, programming models, and roadmapUtilizing AMD GPUs: Tuning, programming models, and roadmap
Utilizing AMD GPUs: Tuning, programming models, and roadmap
 
01 linux-quick-start
01 linux-quick-start01 linux-quick-start
01 linux-quick-start
 
Mesa and Its Debugging, Вадим Шовкопляс
Mesa and Its Debugging, Вадим ШовкоплясMesa and Its Debugging, Вадим Шовкопляс
Mesa and Its Debugging, Вадим Шовкопляс
 
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
 
Tech Day 2015: A Gentle Introduction to GPS and GNATbench
Tech Day 2015: A Gentle Introduction to GPS and GNATbenchTech Day 2015: A Gentle Introduction to GPS and GNATbench
Tech Day 2015: A Gentle Introduction to GPS and GNATbench
 
TRACK F: OpenCL for ALTERA FPGAs, Accelerating performance and design product...
TRACK F: OpenCL for ALTERA FPGAs, Accelerating performance and design product...TRACK F: OpenCL for ALTERA FPGAs, Accelerating performance and design product...
TRACK F: OpenCL for ALTERA FPGAs, Accelerating performance and design product...
 
Getting started with Intel IoT Developer Kit
Getting started with Intel IoT Developer KitGetting started with Intel IoT Developer Kit
Getting started with Intel IoT Developer Kit
 
Efabless Marketplace webinar slides 2024
Efabless Marketplace webinar slides 2024Efabless Marketplace webinar slides 2024
Efabless Marketplace webinar slides 2024
 
lecture11_GPUArchCUDA01.pptx
lecture11_GPUArchCUDA01.pptxlecture11_GPUArchCUDA01.pptx
lecture11_GPUArchCUDA01.pptx
 
Packaging perl (LPW2010)
Packaging perl (LPW2010)Packaging perl (LPW2010)
Packaging perl (LPW2010)
 
Can FPGAs Compete with GPUs?
Can FPGAs Compete with GPUs?Can FPGAs Compete with GPUs?
Can FPGAs Compete with GPUs?
 
High-Performance Computing with C++
High-Performance Computing with C++High-Performance Computing with C++
High-Performance Computing with C++
 

More from AdaCore

RCA OCORA: Safe Computing Platform using open standards
RCA OCORA: Safe Computing Platform using open standardsRCA OCORA: Safe Computing Platform using open standards
RCA OCORA: Safe Computing Platform using open standards
AdaCore
 
Have we a Human Ecosystem?
Have we a Human Ecosystem?Have we a Human Ecosystem?
Have we a Human Ecosystem?
AdaCore
 
Rust and the coming age of high integrity languages
Rust and the coming age of high integrity languagesRust and the coming age of high integrity languages
Rust and the coming age of high integrity languages
AdaCore
 
SPARKNaCl: A verified, fast cryptographic library
SPARKNaCl: A verified, fast cryptographic librarySPARKNaCl: A verified, fast cryptographic library
SPARKNaCl: A verified, fast cryptographic library
AdaCore
 
Developing Future High Integrity Processing Solutions
Developing Future High Integrity Processing SolutionsDeveloping Future High Integrity Processing Solutions
Developing Future High Integrity Processing Solutions
AdaCore
 
Taming event-driven software via formal verification
Taming event-driven software via formal verificationTaming event-driven software via formal verification
Taming event-driven software via formal verification
AdaCore
 
Pushing the Boundary of Mostly Automatic Program Proof
Pushing the Boundary of Mostly Automatic Program ProofPushing the Boundary of Mostly Automatic Program Proof
Pushing the Boundary of Mostly Automatic Program Proof
AdaCore
 
RCA OCORA: Safe Computing Platform using open standards
RCA OCORA: Safe Computing Platform using open standardsRCA OCORA: Safe Computing Platform using open standards
RCA OCORA: Safe Computing Platform using open standards
AdaCore
 
Product Lines and Ecosystems: from customization to configuration
Product Lines and Ecosystems: from customization to configurationProduct Lines and Ecosystems: from customization to configuration
Product Lines and Ecosystems: from customization to configuration
AdaCore
 
Securing the Future of Safety and Security of Embedded Software
Securing the Future of Safety and Security of Embedded SoftwareSecuring the Future of Safety and Security of Embedded Software
Securing the Future of Safety and Security of Embedded Software
AdaCore
 
Spark / Ada for Safe and Secure Firmware Development
Spark / Ada for Safe and Secure Firmware DevelopmentSpark / Ada for Safe and Secure Firmware Development
Spark / Ada for Safe and Secure Firmware Development
AdaCore
 
Introducing the HICLASS Research Programme - Enabling Development of Complex ...
Introducing the HICLASS Research Programme - Enabling Development of Complex ...Introducing the HICLASS Research Programme - Enabling Development of Complex ...
Introducing the HICLASS Research Programme - Enabling Development of Complex ...
AdaCore
 
The Future of Aerospace – More Software Please!
The Future of Aerospace – More Software Please!The Future of Aerospace – More Software Please!
The Future of Aerospace – More Software Please!
AdaCore
 
Adaptive AUTOSAR - The New AUTOSAR Architecture
Adaptive AUTOSAR - The New AUTOSAR ArchitectureAdaptive AUTOSAR - The New AUTOSAR Architecture
Adaptive AUTOSAR - The New AUTOSAR Architecture
AdaCore
 
Using Tiers of Assurance Evidence to Reduce the Tears! Adopting the “Wheel of...
Using Tiers of Assurance Evidence to Reduce the Tears! Adopting the “Wheel of...Using Tiers of Assurance Evidence to Reduce the Tears! Adopting the “Wheel of...
Using Tiers of Assurance Evidence to Reduce the Tears! Adopting the “Wheel of...
AdaCore
 
Software Engineering for Robotics - The RoboStar Technology
Software Engineering for Robotics - The RoboStar TechnologySoftware Engineering for Robotics - The RoboStar Technology
Software Engineering for Robotics - The RoboStar Technology
AdaCore
 
MISRA C in an ISO 26262 context
MISRA C in an ISO 26262 contextMISRA C in an ISO 26262 context
MISRA C in an ISO 26262 context
AdaCore
 
Application of theorem proving for safety-critical vehicle software
Application of theorem proving for safety-critical vehicle softwareApplication of theorem proving for safety-critical vehicle software
Application of theorem proving for safety-critical vehicle software
AdaCore
 
The Application of Formal Methods to Railway Signalling Software
The Application of Formal Methods to Railway Signalling SoftwareThe Application of Formal Methods to Railway Signalling Software
The Application of Formal Methods to Railway Signalling Software
AdaCore
 
Bounded Model Checking for C Programs in an Enterprise Environment
Bounded Model Checking for C Programs in an Enterprise EnvironmentBounded Model Checking for C Programs in an Enterprise Environment
Bounded Model Checking for C Programs in an Enterprise Environment
AdaCore
 

More from AdaCore (20)

RCA OCORA: Safe Computing Platform using open standards
RCA OCORA: Safe Computing Platform using open standardsRCA OCORA: Safe Computing Platform using open standards
RCA OCORA: Safe Computing Platform using open standards
 
Have we a Human Ecosystem?
Have we a Human Ecosystem?Have we a Human Ecosystem?
Have we a Human Ecosystem?
 
Rust and the coming age of high integrity languages
Rust and the coming age of high integrity languagesRust and the coming age of high integrity languages
Rust and the coming age of high integrity languages
 
SPARKNaCl: A verified, fast cryptographic library
SPARKNaCl: A verified, fast cryptographic librarySPARKNaCl: A verified, fast cryptographic library
SPARKNaCl: A verified, fast cryptographic library
 
Developing Future High Integrity Processing Solutions
Developing Future High Integrity Processing SolutionsDeveloping Future High Integrity Processing Solutions
Developing Future High Integrity Processing Solutions
 
Taming event-driven software via formal verification
Taming event-driven software via formal verificationTaming event-driven software via formal verification
Taming event-driven software via formal verification
 
Pushing the Boundary of Mostly Automatic Program Proof
Pushing the Boundary of Mostly Automatic Program ProofPushing the Boundary of Mostly Automatic Program Proof
Pushing the Boundary of Mostly Automatic Program Proof
 
RCA OCORA: Safe Computing Platform using open standards
RCA OCORA: Safe Computing Platform using open standardsRCA OCORA: Safe Computing Platform using open standards
RCA OCORA: Safe Computing Platform using open standards
 
Product Lines and Ecosystems: from customization to configuration
Product Lines and Ecosystems: from customization to configurationProduct Lines and Ecosystems: from customization to configuration
Product Lines and Ecosystems: from customization to configuration
 
Securing the Future of Safety and Security of Embedded Software
Securing the Future of Safety and Security of Embedded SoftwareSecuring the Future of Safety and Security of Embedded Software
Securing the Future of Safety and Security of Embedded Software
 
Spark / Ada for Safe and Secure Firmware Development
Spark / Ada for Safe and Secure Firmware DevelopmentSpark / Ada for Safe and Secure Firmware Development
Spark / Ada for Safe and Secure Firmware Development
 
Introducing the HICLASS Research Programme - Enabling Development of Complex ...
Introducing the HICLASS Research Programme - Enabling Development of Complex ...Introducing the HICLASS Research Programme - Enabling Development of Complex ...
Introducing the HICLASS Research Programme - Enabling Development of Complex ...
 
The Future of Aerospace – More Software Please!
The Future of Aerospace – More Software Please!The Future of Aerospace – More Software Please!
The Future of Aerospace – More Software Please!
 
Adaptive AUTOSAR - The New AUTOSAR Architecture
Adaptive AUTOSAR - The New AUTOSAR ArchitectureAdaptive AUTOSAR - The New AUTOSAR Architecture
Adaptive AUTOSAR - The New AUTOSAR Architecture
 
Using Tiers of Assurance Evidence to Reduce the Tears! Adopting the “Wheel of...
Using Tiers of Assurance Evidence to Reduce the Tears! Adopting the “Wheel of...Using Tiers of Assurance Evidence to Reduce the Tears! Adopting the “Wheel of...
Using Tiers of Assurance Evidence to Reduce the Tears! Adopting the “Wheel of...
 
Software Engineering for Robotics - The RoboStar Technology
Software Engineering for Robotics - The RoboStar TechnologySoftware Engineering for Robotics - The RoboStar Technology
Software Engineering for Robotics - The RoboStar Technology
 
MISRA C in an ISO 26262 context
MISRA C in an ISO 26262 contextMISRA C in an ISO 26262 context
MISRA C in an ISO 26262 context
 
Application of theorem proving for safety-critical vehicle software
Application of theorem proving for safety-critical vehicle softwareApplication of theorem proving for safety-critical vehicle software
Application of theorem proving for safety-critical vehicle software
 
The Application of Formal Methods to Railway Signalling Software
The Application of Formal Methods to Railway Signalling SoftwareThe Application of Formal Methods to Railway Signalling Software
The Application of Formal Methods to Railway Signalling Software
 
Bounded Model Checking for C Programs in an Enterprise Environment
Bounded Model Checking for C Programs in an Enterprise EnvironmentBounded Model Checking for C Programs in an Enterprise Environment
Bounded Model Checking for C Programs in an Enterprise Environment
 

Recently uploaded

Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
Hironori Washizaki
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
Boni García
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
Philip Schwarz
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
Shane Coughlan
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
Rakesh Kumar R
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
mz5nrf0n
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
Ayan Halder
 

Recently uploaded (20)

Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
 

Tech Days 2015: ARM Programming with GNAT and Ada 2012

  • 1. ARM Programming with GNAT and Ada 2012 Pat Rogers Boston, MA 3-4 November, 2015
  • 2. Goals • Introduce the target hardware • Introduce the development environment – Tools, runtime libraries, etc. • Show you some “tips and tricks” we use internally – Switches we apply – Debugging techniques – et cetera • Basically everything you need to get started • Provide pointers for where to go next – The AdaCore bare-board community GitHub project 2
  • 3. Agenda • The Target Hardware • The Software Tools • The Runtime Libraries • “Hello World” • Where To Go Next 3
  • 5. “STM32F4 Discovery” Evaluation Board • 32-bit ARM Cortex-M4F microcontroller at 168 MHz • 1 MB of Flash memory • 192 KB of RAM • On-board USB-JTAG debugger interface • Four user LEDs: orange, green, red, blue • Two pushbuttons (user (blue) and system reset (black)) • 3-axis accelerometer • Timers, DMA, USARTs, others… 5
  • 6. “STM32F4 Discovery” On-Board Devices “ST-LINK” USB Debug Support User LEDs Port/Pin Header Port/Pin Header Audio Out Jack Audio DAC 6
  • 7. “STM32F429 Discovery” On-Board Devices “ST-LINK” USB Debug Support User LEDs 2.24” QVGA LCD with Touch Panel 3-Axis Gyro included 7
  • 9. Required Software • You should already have these installed • The USB device driver – Third-party software available publicly – Install this before you ever connect the board to the host computer • The GNAT GPL 2015 release – Compiler etc. – GPS • The “st-link” utilities (“st-util” and “st-flash”) – Pre-installed with Windows installation of GNAT tools – Must be built and installed by Linux users 9
  • 10. Connecting the USB Cable • Connects the on-board power/debug USB connector to the host computer • If it doesn’t fit, that’s the wrong end! – The other one is Micro-USB and is much thinner Power/Debug Mini-USB Connector 10
  • 11. Using the “ST-LINK” Utilities • “st-util” provides a GDB server that talks to the on-board support • “st-flash” writes apps to memory • Available on the command line • Both available via GPS toolbar when the plug-in is active • You may need to run st-util on the command line if the board is unresponsive to GPS’ invocation of it – st-util will “get the board’s attention” when seems hung up • Sometimes you’ll need to cycle power to the board 11
  • 12. Flashing & Debugging Within GPS • Supports STM32F4 boards via st-link utils • Invoked using toolbar icons • Visible only if “stm32f4” is used in the gpr file to specify the runtime library name Flash to Board Load, then start GDB 12
  • 13. GNAT Project Files • Text files with Ada-like syntax • Also known as “gpr files” due to file extension • Integrated into command-line tools – Specified via the –P project-file-name switch • Integrated into the IDEs – The fundamental artifact 13
  • 14. Configurable Properties • Source directories and specific files’ names • Output directory for object modules and .ali files • Switch settings for tools • Source files for main subprogram(s) to be built • Source programming languages – Ada / C / C++ are preconfigured • Many others… 14
  • 15. Sample Simple Project File project Demo is for Languages use ("Ada"); for Main use ("demo.adb"); for Source_Dirs use ("src"); for Object_Dir use "obj"; package Compiler is for Switches ("Ada") use ("-g", -- enable debugging "-gnatwa", -- enable all optional warnings "-gnata", -- enable pre/postcondition checks "-gnatQ", -- don’t quit "-gnatw.X"); -- suppress warnings about exceptions end Compiler; package Builder is for Switches ("Ada") use ("-g"); -- enable debugging end Builder; end Demo; 15
  • 16. Specifying the Remote Connection • Enables GDB to locate the GDB server project Demo is … package Ide is for Program_Host use "localhost:4242"; for Communication_Protocol use "remote"; end Ide; … end Demo; 16
  • 17. Removing Unused Data and Object Code • Requires switches for compiler and linker package Linker is for Switches ("Ada") use ("-Wl,--gc-sections", "-Wl,--print-gc-sections"); end Linker; Optional. Prints those removed. Required package Compiler is case Build_Mode is when "debug" => … when "production" => for Switches ("Ada") use (…, "-ffunction-sections", "-fdata-sections"); end case; end Compiler; RequiredRequired 17
  • 18. Displaying Percentages Used • Implemented after GNAT GPL 2015 release package Linker is for Switches ("Ada") use ("-Wl,--gc-sections", "-Wl,--print-memory-usage"); end Linker; 18
  • 20. The Bare-Board Runtime Libraries • “SFP” (Small Foot Print”) – Intended for certification – A subset of the non-tasking part of the language • “Full” – A very large subset of the non-tasking part of the language • Both provide the Ravenscar tasking subset • Both are reconfigurable – You can add or remove functionality and rebuild • There is also a Zero Footprint “ZFP” runtime – No tasking – Almost no object code 20
  • 21. The Runtime Library Names • Indicate whether Ravenscar is provided • Indicate the degree of language subset supported • Indicate the target platform • Examples – “zfp-stm32f4” – “ravenscar-full-stm32f4” – “ravenscar-sfp-stm32f4” Ravenscar tasking subset Small Footprint subset Target Hardware 21
  • 22. Essential Project File Content • Specify the runtime library directory path/name • Specify the platform name • Both can be specified on the command-line but easier in gpr file for Runtime ("Ada") use "ravenscar-sfp-stm32f4"; for Target use "arm-eabi"; Basename sufficient when in default location for Runtime ("Ada") use "/path/to/ravenscar-full-stm32f429"; 22
  • 23. The Last Chance Handler (“LCH”) • Specifies response to unhandled exceptions – Since exception propagation is not supported in some RTLs – The last thing executed in that case • A procedure • Semantics – Called automatically by compiled code – Must never return to caller (loop forever, reset, etc.) • Default version does nothing but loop • A user-defined version can override default 23
  • 25. “Hello World” of Embedded Systems • Blinks LEDs, of course! • Located in the compiler installation tree – Directory name is “demo_leds-stm32f4” • In Windows, with default installation choice: • Contains a GNAT project file • Located it and invoke GPS with it now C:GNAT2015shareexamplesgnat-crossdemo_leds-stm32f4 demo_leds.gpr 25
  • 26. 26
  • 27. 27
  • 28. Build Output In Messages View 28
  • 29. Load Into Flash and Execute • Load the program into FLASH using toolbar icon • Program will start automatically after loading – You may need to reset the board using the black button – Sometimes you must cycle power to the board 29
  • 30. Loaded and Running Plugin loads the image Push the blue User button to change the LED rotation directionUser LEDs 30
  • 31. Troubleshooting Load/Debug In GPS • If GPS toolbar icon cannot work for some reason… • Terminate the debug session in GPS • Open a command line and invoke st-util there – It will connect to the board, emit some messages, and wait for GDB server commands
  • 32. Command Line st-util for Debugging • In GPS, start the debugger via the menu – Apply the “Debug -> Initialize -> demo” menu 32
  • 33. Additional st-util Messages In Shell • You will see messages from st-util in the command line console 33
  • 35. And You’re Ready To Go… • You can set breakpoints, etc. if desired • Then press the debugger toolbar icon to “Continue” (or start) to run 35
  • 36. Source Files Included • gnat.adc • button.adb • button.ads • demo.adb • driver.adb • driver.ads • last_chance_handler.adb • last_chance_handler.ads • leds.adb • leds.ads • registers.ads • stm32f4.ads • stm32f4-gpio.ads • stm32f4-reset_clock_control.ads • stm32f4-sysconfig_control.ads pragma Partition_Elaboration_Policy (Sequential); 36
  • 37. Main Subprogram with Driver; pragma Unreferenced (Driver); -- The Driver package contains the task that actually controls the app so -- although it is not referenced directly in the main procedure, we need it -- in the closure of the context clauses so that it will be included in the -- executable. with Last_Chance_Handler; pragma Unreferenced (Last_Chance_Handler); -- The "last chance handler" is the user-defined routine that is called when -- an exception is propagated. We need it in the executable, therefore it -- must be somewhere in the closure of the context clauses. with System; procedure Demo is pragma Priority (System.Priority'First); begin loop null; end loop; end Demo; 37
  • 38. Setting Tasks’ Stacks and Priorities • For any task created, set the stack to around 4K – The default is far too large for these boards – Can make it larger if necessary • Can set the priority similarly, as needed – Remember there is a default applied already package Driver is task Controller is pragma Storage_Size (4 * 1024); end Controller; end Driver; package Driver is task Controller with Storage_Size => (4 * 1024); end Driver; OR 38
  • 39. with LEDs; use LEDs; with Button; use Button; with Ada.Real_Time; use Ada.Real_Time; package body Driver is type Index is mod 4; Pattern : constant array (Index) of User_LED := (Orange, Red, Blue, Green); task body Controller is Period : constant Time_Span := Milliseconds (75); -- arbitrary Next_Start : Time := Clock; Next_LED : Index := 0; begin loop Off (Pattern (Next_LED)); if Button.Current_Direction = Counterclockwise then Next_LED := Next_LED - 1; else Next_LED := Next_LED + 1; end if; On (Pattern (Next_LED)); Next_Start := Next_Start + Period; delay until Next_Start; end loop; end Controller; end Driver; 39
  • 40. package Button is pragma Elaborate_Body; type Directions is (Clockwise, Counterclockwise); function Current_Direction return Directions; end Button; Button Interface • Pressing the blue User button changes the value returned by the “current direction” function 40
  • 41. with Ada.Interrupts.Names; with Ada.Real_Time; use Ada.Real_Time; with Registers; use Registers; with STM32F4; use STM32F4; with STM32F4.GPIO; use STM32F4.GPIO; package body Button is protected Button is function Current_Direction return Directions; … end Button; protected body Button is function Current_Direction return Directions is … procedure Interrupt_Handler is … end Button; function Current_Direction return Directions is begin return User_Button.Current_Direction; end Current_Direction; procedure Initialize is … begin Initialize; end Button; 41
  • 42. protected Button is pragma Interrupt_Priority; function Current_Direction return Directions; private procedure Interrupt_Handler; pragma Attach_Handler (Interrupt_Handler, Ada.Interrupts.Names.EXTI0_Interrupt); Direction : Directions := Clockwise; -- arbitrary Last_Time : Time := Clock; end Button; 42
  • 43. Debounce_Time : constant Time_Span := Milliseconds (500); -- semi-arbitrary protected body Button is function Current_Direction return Directions is begin return Button.Current_Direction; end Current_Direction; procedure Interrupt_Handler is Now : constant Time := Clock; begin -- Clear interrupt EXTI.PR (0) := 1; -- Debouncing if Now - Last_Time >= Debounce_Time then if Direction = Counterclockwise then Direction := Clockwise; else Direction := Counterclockwise; end if; Last_Time := Now; end if; end Interrupt_Handler; end Button; 43
  • 44. … with Registers; use Registers; with STM32F4; use STM32F4; with STM32F4.GPIO; use STM32F4.GPIO; package body Button is … procedure Initialize is RCC_AHB1ENR_GPIOA : constant Word := 16#01#; begin -- Enable clock for GPIO-A RCC.AHB1ENR := RCC.AHB1ENR or RCC_AHB1ENR_GPIOA; -- Configure PA0 GPIOA.MODER (0) := Mode_IN; GPIOA.PUPDR (0) := No_Pull; -- Select PA0 for EXTI0 SYSCFG.EXTICR1 (0) := 0; -- Interrupt on rising edge EXTI.FTSR (0) := 0; EXTI.RTSR (0) := 1; EXTI.IMR (0) := 1; end Initialize; begin Initialize; end Button; 44
  • 45. Using the LCH with the Debugger • Put a breakpoint on the first statement • If breakpoint is hit, use GPS to examine the memory at Msg.all to show the designated string – Use the “Debug->Data->Examine Memory” menu – Put “msg.all” into the Locations entry pane (no quotes) … package body Last_Chance_Handler is procedure Last_Chance_Handler (Msg : System.Address; Line : Integer) is begin Off (Green); … end Last_Chance_Handler; end Last_Chance_Handler; 45
  • 46. Where To Go From Here
  • 47. STM32F4 Documentation • For devices across the entire STM32F4 family – GPIO, Timers, etc. – “RM0090 Reference manual” – Subtitled “STM32F405xx/07xx, STM32F415xx/17xx, STM32F42xxx and STM32F43xxx advanced ARM-based 32-bit MCUs” – Also known as file “DM0003120” • Specific to the STM32F4 Discovery board – “UM1472 User manual” – Subtitled “Discovery kit for STM32F407/417 lines” – Also known as file “DM00039084” 47
  • 48. GNAT and GPS Documentation • The GNAT Cross User Guide – “GNAT User's Guide Supplement for Cross Platforms” – Especially see the tutorial: “ARM-ELF Topics and Tutorial” • GPS Users Guide 48
  • 49. The ARM GitHub Repository • https://github.com/AdaCore/bareboard • Makes everything much easier! • Adds significant functionality • Contents, currently for STM32F4 products: – Device drivers – Complete demonstration projects for drivers – Components (using drivers) e.g., Gyro and Accelerometer – Complete demonstration projects for components – Larger applications • Trains, and Game of Life, both on STM32F429 • Licensed for both proprietary and Free apps 49
  • 50. STM32F4_Discovery Package … package STM32F4_Discovery is subtype User_LED is GPIO_Pin; Green : User_LED renames Pin_12; Orange : User_LED renames Pin_13; Red : User_LED renames Pin_14; Blue : User_LED renames Pin_15; All_LEDs : constant GPIO_Pins := LED3 & LED4 & LED5 & LED6; … procedure Initialize_LEDs; procedure Turn_On (This : User_LED) with Inline; procedure Turn_Off (This : User_LED) with Inline; procedure Toggle (This : User_LED) with Inline; … Accelerometer : Three_Axis_Accelerometer; GPIO_A : GPIO_Port renames STM32F40xxx.GPIO_A; GPIO_B : GPIO_Port renames STM32F40xxx.GPIO_B; … User_Button_Port : GPIO_Port renames GPIO_A; User_Button_Pin : constant GPIO_Pin := Pin_0; User_Button_Interrupt : constant Interrupt_Id := Names.EXTI0_Interrupt; … Board Additions Board Addition Board Specific Number Board Addition 50
  • 51. 51 STM32F429_Discovery Package … package STM32F429_Discovery is subtype User_LED is GPIO_Pin; Green : User_LED renames Pin_13; Red : User_LED renames Pin_14; All_LEDs : constant GPIO_Pins := LED3 & LED4; … procedure Initialize_LEDs; … procedure Toggle (This : User_LED) with Inline; … Gyro : Three_Axis_Gyroscope; GPIO_A : GPIO_Port renames STM32F42xxx.GPIO_A; GPIO_B : GPIO_Port renames STM32F42xxx.GPIO_B; … GPIO_K : GPIO_Port renames STM32F42xxx.GPIO_K; … Two Fewer User LEDs Two More GPIO Ports Other device differences… Gyro instead of accelerometer
  • 52. Example Driver Library Simplification procedure Initialize is begin Configure_User_Button_GPIO; Connect_External_Interrupt (User_Button_Port, User_Button_Pin); Configure_Trigger (User_Button_Port, User_Button_Pin, Interrupt_Rising_Edge); end Initialize; procedure Initialize is RCC_AHB1ENR_GPIOA : constant Word := 16#01#; begin -- Enable clock for GPIO-A RCC.AHB1ENR := RCC.AHB1ENR or RCC_AHB1ENR_GPIOA; -- Configure PA0 GPIOA.MODER (0) := Mode_IN; GPIOA.PUPDR (0) := No_Pull; -- Select PA0 for EXTI0 SYSCFG.EXTICR1 (0) := 0; -- Interrupt on rising edge EXTI.FTSR (0) := 0; EXTI.RTSR (0) := 1; EXTI.IMR (0) := 1; end Initialize; 52

Editor's Notes

  1. Ada Europe 2009 Copyright © 2005,2009 by Patrick Rogers & AdaCore
  2. Ada Europe 2009 Copyright © 2005,2009 by Patrick Rogers & AdaCore
  3. GNAT Pro Project Facility
  4. GNAT Pro Project Facility