SlideShare uma empresa Scribd logo
1 de 20
Baixar para ler offline
A Generic Virtual Machine Approach for Programming
Microcontrollers : the OMicroB Project
Steven Varoumas 1,2,3 Basile Pesin 1
Benoît Vaugon 4 Emmanuel Chailloux 1,2
1
Sorbonne Université
2
Laboratoire d’Informatique de Paris 6 (LIP6) - Sorbonne Université
3
Centre d’Étude et De Recherche en Informatique et Communications (CÉDRIC) - CNAM
4
Armadillo, 46 bis, rue de la République, 92170 Vanves, France
IRILL, Sorbonne Université
10/12/2019
1/19
Outline
1 Context
– Programming microcontrollers : the virtual machine approach
– Motivations of the OMicroB project
– The OCaml language
2 OMicroB : a generic OCaml VM designed for microcontrollers
– Compilation chain
– Optimizations
– Measurements
3 Extensions
- Hardware abstractions with functors
- Synchronous programming for critical softwares
4 Conclusion
2/19
Context
Microcontrollers
• Simplified computer (computation unit, memory, inputs/output peripherals)
• Typically programmed in C / assembly language
• Used in (sometimes critical) embedded systems (automotive, trains, . . .)
– Low cost
– Low energy use
Various specifications
• Various architectures (PIC, AVR, ARM, . . .)
• 8 bits, 16 bits, 32 bits architectures
• Wide range of CPU speeds : from 1MHz to 300MHz
• RAM (data) : from a few bytes upto 1MiB
• Flash (program) : from 4 KiB to a few MiB
3/19
The VM approach to microcontrollers’ programming
Microcontrollers (µC) can be difficult to program
• C / assembly programming can be error-prone
• Offers little hardware abstraction
• Few checks at compile time
• Hard to debug
The Virtual Machine (VM) Approach
VM of a programming langage implemented for microcontrollers
• Allows running bytecode of higher-level languages directly on µC (easier, safer
programming)
• Offers a layer of abstraction over the hardware
• Increases the portability of code
• Can decrease the size of code
4/19
The VM approach to microcontrollers’ programming : examples
High level languages on microcontrollers
• Picobit : Scheme on PIC 18
• MicroPython : Python on STM32 and ARM
• MicroEJ : Java on ARM and RX600
• OCaPIC : OCaml for PIC
– OCaml virtual machine implemented in PIC18 assembly.
– Allows the execution of the OCaml language on a PIC18.
– Comes with : simulators, library for external displays . . .
– OCamlClean : tool for removing dead code and useless memory allocations
But ...
Most of these VMs are specific to some hardware architecture(s)
5/19
Motivations of the OMicroB project
What we wanted
• A modern, expressive, high level language (OCaml)
• Used for programming microcontrollers starting with ones with very limited
resources (a few kB of RAM)
• Portable accross various architectures and configurable
ATmega2560
8 bits
16 MHz
8 KiB of RAM
256 KiB of flash memory
ATmega32u4
8 bits
16 MHz
2.5 KiB of RAM
32 KiB of flash memory
6/19
The OCaml language
Chosen language : OCaml (https://ocaml.org/)
• Developped by INRIA (Gallium team)
• Multi paradigms programming language (functional, imperative, object-oriented)
• High-level language with powerful constructions and expressiveness
(parametrized modules, pattern matching, lambdas, objects, exceptions . . .)
• Improved safety by static typing with type inference.
• Its Virtual Machine (the ZAM) is very lightweight (148 bytecode instructions)
and efficient
(* map : (’a -> ’b) -> ’a list -> ’b list *)
let rec map f l =
match l with
| [] -> []
| h::t -> (f h)::( map f t)
(* filter : (’a -> bool) -> ’a list -> ’a list *)
let rec filter f l =
match l with
| [] -> []
| h::t -> if (f h) then h::( filter f t) else (filter f t)
let main =
let l1 = [ 1 ; 2 ; 3 ; 4 ] in
let l2 = filter (fun x -> x mod 2 = 0) l1 in
map (fun x -> x + 1) l2
7/19
OMicroB : Generic OCaml VM for microcontrollers
Our contribution : OMicroB
• OCaml on Microcontroller’s Boards
• OCaml virtual machine implemented in C
• Generic : execution of all of the OCaml language on all microcontrollers with a
C compiler (Arduino/AVR, PIC, Nucleo/ARM, . . .)
• Offers hardware abstraction : automatic memory management (garbage collector)
• Configurable (size of values, GC, . . .)
• Static analysis dedicated at optimising performances (size and speed)
• Factorizable analyses (over the bytecode and the C interpreter)
• Free software (CeCILL License)
8/19
OMicroB : compilation chain
OCaml
file
ocamlc
OCaml
bytecode
ocamlclean
OCaml
bytecode C file
bc2c
gcc
avr-gcc
sdcc
gcc-arm
interpreter
+ runtime
9/19
OMicroB : Example (ocamlc & ocamlclean)
(* int -> int *)
let rec facto n =
match n with
| 0 -> 1
| x -> facto (x -1) * x
let main =
Arduboy.init ();
Arduboy.print_int (facto 4);
Arduboy.display ()
OCaml bytecode :
0 BRANCH 12
1 ACC 0
2 BRANCHIFNOT 10
3 ACC 0
4 PUSHACC 1
5 OFFSETINT -1
6 PUSHOFFSETCLOSURE 0
7 APPLY 1
8 MULINT
9 RETURN 1
10 CONST 1
11 RETURN 1
12 CLOSUREREC 1 0 1 []
13 CONST 0
14 CCALL 1 0 (* ocaml_arduboy_init() *)
15 CONST 4
16 PUSHACC 1
17 APPLY 1
18 CCALL 1 1 (* ocaml_arduboy_print_int() *)
19 CONST 0
20 CCALL 1 2 (* ocaml_arduboy_display() *)
21 POP 1
22 STOP
10/19
Bytecode embedding in a C file : bc2c
bc2c
The bc2c tool “transforms” the bytecode file into a C file by embeding the OCaml
program into various C variables :
• The bytecode instructions (array of “opcode_t”) in flash memory
• The OCaml stack (array of “value”)
• The OCaml heap (array of “value”)
• The OCaml global variables (array of “value”)
• An array of pointers to C primitives
• A global accumulator variable
N.B : The OCaml VM uses an uniform representation of values (of type “value”)
11/19
bc2c : optimizations
bc2c performs several static analysis at compile time in order to optimize speed and
memory use :
Compacting bytecode
• Instructions encoded on 8 bits + specialized instructions for arguments < 4 bytes
⇒ Reduces size of code and read speed by a factor of almost 4
Tailor-made interpreter
• Only the code for the used bytecode instructions is compiled in the final program.
Partial evaluation of the program
• The OCaml program is executed at compile time upto the first I/O
• Dump of the state of the memory (heap & stack) into the C file
⇒ Quicker and lighter programs
12/19
OMicroB : Example (output of bc2c)
/* ... */
opcode_t const ocaml_bytecode [ OCAML_BYTECODE_BSIZE ]
= {
/* 0 */ OCAML_BRANCH_1B ,
/* 1 */ 17,
/* 2 */ OCAML_ACC0 ,
/* 3 */ OCAML_BRANCHIFNOT_1B ,
/* 4 */ 11,
/* 5 */ OCAML_ACC0 ,
/* 6 */ OCAML_PUSHACC1 ,
/* 7 */ OCAML_OFFSETINT_1B ,
/* 8 */ -1,
/* 9 */ OCAML_PUSHOFFSETCLOSURE0 ,
/* 10 */ OCAML_APPLY1 ,
/* 11 */ OCAML_MULINT ,
/* 12 */ OCAML_RETURN ,
/* 13 */ 1,
/* 14 */ OCAML_CONST1 ,
/* 15 */ OCAML_RETURN ,
/* 16 */ 1,
/* 17 */ OCAML_C_CALL1 ,
/* 18 */ 0,
/* 19 */ OCAML_CONSTINT_1B ,
/* 20 */ 4,
/* 21 */ OCAML_PUSHACC1 ,
/* 22 */ OCAML_APPLY1 ,
/* 23 */ OCAML_C_CALL1 ,
/* 24 */ 1,
/* 25 */ OCAML_CONST0 ,
/* 26 */ OCAML_C_CALL1 ,
/* 27 */ 2,
/* 28 */ OCAML_POP ,
/* 29 */ 1,
/* 30 */ OCAML_STOP
};
value ocaml_heap[ OCAML_HEAP_WOSIZE * 2] = {
/* 0 */ Make_header (1, Closure_tag),
/* 1 */ Val_codeptr (2)
};
value acc = Val_int (0);
value ocaml_stack[ OCAML_STACK_WOSIZE ] = {
/* 0 */ Val_int (0),
/* (...) */
/* 63 */ Init_val_block (4 * 1)
};
void * const ocaml_primitives [ OCAML_PRIMITIVE_NUMBER ]
= {
(void *) &ocaml_arduboy_init ,
(void *) &ocaml_arduboy_print_int ,
(void *) & ocaml_arduboy_display
};
13/19
Interpreter and runtime
Intepreting bytecode
The interpreter reads the program (stored in flash) generated by bc2c and modify the
different variables (heap, stack, accumulator, . . .) depending on the instruction :
Example :
/* ... */
/* ‘ASSIGN n‘ assigns the nth level of the stack to the current acc value */
#ifdef OCAML_ASSIGN
case OCAML_ASSIGN : {
TRACE_INSTRUCTION ("ASSIGN");
sp[read_uint8 ()] = acc;
acc = Val_unit;
break;
}
#endif
/* ... */
The runtime
• Standard runtime library able of handling lists, arrays, floats, references, strings,
generic comparison, . . .
• Memory reuse with two Garbage Collection algorithms (Stop and Copy, Mark and
Compact)
• Possibilities to interface OCaml with C code (FFI)
14/19
Simulation
Simulator
• A simulator runs the VM and displays the state of input/output pins of the
microcontroller
• As well as the interaction with various external components (matrix display,
buttons, led, . . .) by describing the circuit in a text file
• Various levels of trace
• Not yet generic
⇒ Debugging is made easier by not flashing the program
15/19
Benchs and results
Measurements done on PC, and on Arduino Mega board :
• ATmega2560 microcontroller : 16MHz ; Flash : 256kB ; Ram : 8kB
• GC : Stop and Copy
• Length of values : 32 bits
• Compiler : avr-gcc with -O2 optimization level
Speed measurements :
Program Time (ocamlrun) Time (OMicroB Time (OMicroB RAM usage
(s) on PC) (s) on MCU) (s) (heap+stack) (B)
oddeven 0.28 0.62 2.262 1003
sieve 0.04 0.07 0.390 1825
deriv 0.03 0.05 0.250 1946
integr 0.04 0.06 0.379 1849
Size measurements :
Program Bytecode Size of the RAM stack size heap size
size (B) exec. (B) (B) (words) (words)
Manhattan distance 744 24 210 5555 900 350
Solilet 413 18 322 5069 800 450
Snake 1376 21 238 1768 35 300
Flash and RAM size for the snake game :
Taylor-made Size in flash Size in RAM Stack-size Heap-size
interpreter
no 27.9 ko 2*1.33 ko 2*64 values 2*300 values
yes 17.3 ko
Bytecode size optimizations (snake) : 30.16 ko
ocamlclean
−−−−−−→ 6.9 ko
bc2c
−−−→ 2.1 ko
16/19
Hardware abstractions using functors
(** Interface for SPI communication *)
module type SPI = sig
val init: unit -> unit
val transmit: char -> char
end
(** Connect as a slave *)
module SPISlave: Circuits.SPI
(** Connect as a master, with a SS pin *)
module SPIMaster(SC: sig
val ssPin : pin
end): Circuits.SPI
Master (BBC micro :bit) code
module%comp SPIM = SPIMaster(ssPin = PIN0)
let _ =
SPIM.init ();
let c = SPIM.transmit ’m’ in
Screen. print_string (String.make 1 c)
Slave (Arduino) code
module%comp MyDisp = MakeLCD(
rsPin = PIN9;
enablePin = PIN8;
d4Pin = PIN5;
d5Pin = PIN4;
d6Pin = PIN3;
d7Pin = PIN2;
)
let _ =
MyDisp.init ();
SPISlave.init ();
while true do
let c = SPISlave.transmit ’s’ in
MyDisp. print_string (String.make 1 c)
done
17/19
A hardware abstraction application : the MicroPong game
module I2C = I2C(struct let addr = 0x3C end)
module Scr = SSD1306(I2C)
module%comp LedL = Led(pin = PIN1)
module%comp LedR = Led(pin = PIN2)
module%comp SPIM = SPIMaster(ssPin = PIN0)
Radio.send ("sr" ^ string_of_int !scoreR );
Radio.send ("sl" ^ string_of_int !scoreL );
leftY := int_of_char (SPIM.transmit !scoreL );
rightY := Radio.recv ()
18/19
Extension to synchronous programming / critical systems
Synchronous Programming
• Synchronous programming is well adapted to microcontrollers
ERTSS 2016 “Concurrent Programming of Microcontrollers, a Virtual Machine
Approach”
• Model of concurrent programming on critical applications
• No allocation during a synchronous instant (→ no GC)
• No unbound loops
Example (OCaLustre) :
let%node rising_edge (in_f) ~return:(out_f) =
out_f := in_f && (not (false ->> in_f ))
let%node press_switch (button) ~return:(led) =
button_pressed := rising_edge (button );
led := false ->> (if button_pressed then (not led) else led)
(N.B. a ->> b ≡ a0, b0, b1, b2, . . . )
Worst-Case Execution Time (WCET) computation
• We can associate a WCET for each (non-allocating) bytecode instruction
• Deduce the WCET of a synchronous instant
19/19
Conclusion
Our solution offers
• A lightweight virtual machine
• providing an expressive programming model
• that offers safety (static typing) and guarantees (WCET for the synchronous
extension)
• as well as an easier debug process
• all while being portable and configurable
• and keeping good performances
⇒ Well suited to (critical) embedded systems
Future works
• Integrating new architectures into the OMicroB project (ESP, PIC32, ...)
• User-friendly Development Environment
• A more generic simulator (bundled with the IDE)
https://github.com/stevenvar/OMicroB

Mais conteúdo relacionado

Mais procurados

Educating the computer architects of tomorrow's critical systems with RISC-V
Educating the computer architects of tomorrow's critical systems with RISC-VEducating the computer architects of tomorrow's critical systems with RISC-V
Educating the computer architects of tomorrow's critical systems with RISC-VRISC-V International
 
Fueling the datasphere how RISC-V enables the storage ecosystem
Fueling the datasphere   how RISC-V enables the storage ecosystemFueling the datasphere   how RISC-V enables the storage ecosystem
Fueling the datasphere how RISC-V enables the storage ecosystemRISC-V International
 
Ziptillion boosting RISC-V with an efficient and os transparent memory comp...
Ziptillion   boosting RISC-V with an efficient and os transparent memory comp...Ziptillion   boosting RISC-V with an efficient and os transparent memory comp...
Ziptillion boosting RISC-V with an efficient and os transparent memory comp...RISC-V International
 
“A New Golden Age for Computer Architecture: Processor Innovation to Enable U...
“A New Golden Age for Computer Architecture: Processor Innovation to Enable U...“A New Golden Age for Computer Architecture: Processor Innovation to Enable U...
“A New Golden Age for Computer Architecture: Processor Innovation to Enable U...Edge AI and Vision Alliance
 
Andes RISC-V vector extension demystified-tutorial
Andes RISC-V vector extension demystified-tutorialAndes RISC-V vector extension demystified-tutorial
Andes RISC-V vector extension demystified-tutorialRISC-V International
 
Standardizing the tee with global platform and RISC-V
Standardizing the tee with global platform and RISC-VStandardizing the tee with global platform and RISC-V
Standardizing the tee with global platform and RISC-VRISC-V International
 
Soc architecture and design
Soc architecture and designSoc architecture and design
Soc architecture and designSatya Harish
 
A New Golden Age for Computer Architecture
A New Golden Age for Computer ArchitectureA New Golden Age for Computer Architecture
A New Golden Age for Computer ArchitectureYanbin Kong
 
An Automatic Generation of NoC Architectures: An Application-Mapping Approach
An Automatic Generation of NoC Architectures: An Application-Mapping ApproachAn Automatic Generation of NoC Architectures: An Application-Mapping Approach
An Automatic Generation of NoC Architectures: An Application-Mapping ApproachMostafa Khamis
 
RISC-V 30906 hex five multi_zone iot firmware
RISC-V 30906 hex five multi_zone iot firmwareRISC-V 30906 hex five multi_zone iot firmware
RISC-V 30906 hex five multi_zone iot firmwareRISC-V International
 
Andes building a secure platform with the enhanced iopmp
Andes building a secure platform with the enhanced iopmpAndes building a secure platform with the enhanced iopmp
Andes building a secure platform with the enhanced iopmpRISC-V International
 
Allwin21 and main products
Allwin21 and main productsAllwin21 and main products
Allwin21 and main productsPeter Chen
 
Data Analysis for Semiconductor Manufacturing
Data Analysis for Semiconductor ManufacturingData Analysis for Semiconductor Manufacturing
Data Analysis for Semiconductor ManufacturingPuwen Ning
 

Mais procurados (20)

Educating the computer architects of tomorrow's critical systems with RISC-V
Educating the computer architects of tomorrow's critical systems with RISC-VEducating the computer architects of tomorrow's critical systems with RISC-V
Educating the computer architects of tomorrow's critical systems with RISC-V
 
Fueling the datasphere how RISC-V enables the storage ecosystem
Fueling the datasphere   how RISC-V enables the storage ecosystemFueling the datasphere   how RISC-V enables the storage ecosystem
Fueling the datasphere how RISC-V enables the storage ecosystem
 
Ziptillion boosting RISC-V with an efficient and os transparent memory comp...
Ziptillion   boosting RISC-V with an efficient and os transparent memory comp...Ziptillion   boosting RISC-V with an efficient and os transparent memory comp...
Ziptillion boosting RISC-V with an efficient and os transparent memory comp...
 
“A New Golden Age for Computer Architecture: Processor Innovation to Enable U...
“A New Golden Age for Computer Architecture: Processor Innovation to Enable U...“A New Golden Age for Computer Architecture: Processor Innovation to Enable U...
“A New Golden Age for Computer Architecture: Processor Innovation to Enable U...
 
Andes RISC-V vector extension demystified-tutorial
Andes RISC-V vector extension demystified-tutorialAndes RISC-V vector extension demystified-tutorial
Andes RISC-V vector extension demystified-tutorial
 
Digital Design Flow
Digital Design FlowDigital Design Flow
Digital Design Flow
 
Standardizing the tee with global platform and RISC-V
Standardizing the tee with global platform and RISC-VStandardizing the tee with global platform and RISC-V
Standardizing the tee with global platform and RISC-V
 
Low code & technology stacks.
Low code & technology stacks.Low code & technology stacks.
Low code & technology stacks.
 
Soc architecture and design
Soc architecture and designSoc architecture and design
Soc architecture and design
 
Profinet and the Industrial Internet of Things (IIoT) - Peter Thomas - Sept ...
Profinet and the Industrial Internet of Things (IIoT) -  Peter Thomas - Sept ...Profinet and the Industrial Internet of Things (IIoT) -  Peter Thomas - Sept ...
Profinet and the Industrial Internet of Things (IIoT) - Peter Thomas - Sept ...
 
Andes RISC-V processor solutions
Andes RISC-V processor solutionsAndes RISC-V processor solutions
Andes RISC-V processor solutions
 
A New Golden Age for Computer Architecture
A New Golden Age for Computer ArchitectureA New Golden Age for Computer Architecture
A New Golden Age for Computer Architecture
 
An Automatic Generation of NoC Architectures: An Application-Mapping Approach
An Automatic Generation of NoC Architectures: An Application-Mapping ApproachAn Automatic Generation of NoC Architectures: An Application-Mapping Approach
An Automatic Generation of NoC Architectures: An Application-Mapping Approach
 
RISC-V 30906 hex five multi_zone iot firmware
RISC-V 30906 hex five multi_zone iot firmwareRISC-V 30906 hex five multi_zone iot firmware
RISC-V 30906 hex five multi_zone iot firmware
 
VF360 OpenVPX Board w. Altera Stratix and TI KeyStone DSP
VF360 OpenVPX Board w. Altera Stratix and TI KeyStone DSPVF360 OpenVPX Board w. Altera Stratix and TI KeyStone DSP
VF360 OpenVPX Board w. Altera Stratix and TI KeyStone DSP
 
RISC-V: The Open Era of Computing
RISC-V: The Open Era of ComputingRISC-V: The Open Era of Computing
RISC-V: The Open Era of Computing
 
Andes building a secure platform with the enhanced iopmp
Andes building a secure platform with the enhanced iopmpAndes building a secure platform with the enhanced iopmp
Andes building a secure platform with the enhanced iopmp
 
Allwin21 and main products
Allwin21 and main productsAllwin21 and main products
Allwin21 and main products
 
Introduction to EDA Tools
Introduction to EDA ToolsIntroduction to EDA Tools
Introduction to EDA Tools
 
Data Analysis for Semiconductor Manufacturing
Data Analysis for Semiconductor ManufacturingData Analysis for Semiconductor Manufacturing
Data Analysis for Semiconductor Manufacturing
 

Semelhante a #OSSPARIS19 : A virtual machine approach for microcontroller programming : the OMicroB project -

AAME ARM Techcon2013 003v02 Software Development
AAME ARM Techcon2013 003v02  Software DevelopmentAAME ARM Techcon2013 003v02  Software Development
AAME ARM Techcon2013 003v02 Software DevelopmentAnh Dung NGUYEN
 
Evaluating GPU programming Models for the LUMI Supercomputer
Evaluating GPU programming Models for the LUMI SupercomputerEvaluating GPU programming Models for the LUMI Supercomputer
Evaluating GPU programming Models for the LUMI SupercomputerGeorge Markomanolis
 
Challenges in GPU compilers
Challenges in GPU compilersChallenges in GPU compilers
Challenges in GPU compilersAnastasiaStulova
 
AVX512 assembly language in FFmpeg
AVX512 assembly language in FFmpegAVX512 assembly language in FFmpeg
AVX512 assembly language in FFmpegKieran Kunhya
 
Introduction to FreeRTOS
Introduction to FreeRTOSIntroduction to FreeRTOS
Introduction to FreeRTOSICS
 
Embedded system (Chapter 2) part A
Embedded system (Chapter 2) part AEmbedded system (Chapter 2) part A
Embedded system (Chapter 2) part AIkhwan_Fakrudin
 
Summary Of Course Projects
Summary Of Course ProjectsSummary Of Course Projects
Summary Of Course Projectsawan2008
 
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 roadmapGeorge Markomanolis
 
AVR_Course_Day4 introduction to microcontroller
AVR_Course_Day4 introduction to microcontrollerAVR_Course_Day4 introduction to microcontroller
AVR_Course_Day4 introduction to microcontrollerMohamed Ali
 
DESIGN OF A 16-BIT HARVARD STRUCTURED RISC PROCESSOR IN CADENCE 45nmTECHNOLOGY
DESIGN OF A 16-BIT HARVARD STRUCTURED RISC PROCESSOR  IN CADENCE 45nmTECHNOLOGYDESIGN OF A 16-BIT HARVARD STRUCTURED RISC PROCESSOR  IN CADENCE 45nmTECHNOLOGY
DESIGN OF A 16-BIT HARVARD STRUCTURED RISC PROCESSOR IN CADENCE 45nmTECHNOLOGYshaikalthaf40
 
Open cl programming using python syntax
Open cl programming using python syntaxOpen cl programming using python syntax
Open cl programming using python syntaxcsandit
 
OpenCL programming using Python syntax
OpenCL programming using Python syntax OpenCL programming using Python syntax
OpenCL programming using Python syntax cscpconf
 
Rtos for system integration
Rtos for system integrationRtos for system integration
Rtos for system integrationjaideep Dadi
 
Exploring the Programming Models for the LUMI Supercomputer
Exploring the Programming Models for the LUMI Supercomputer Exploring the Programming Models for the LUMI Supercomputer
Exploring the Programming Models for the LUMI Supercomputer George Markomanolis
 
Iot Bootcamp - abridged - part 1
Iot Bootcamp - abridged - part 1Iot Bootcamp - abridged - part 1
Iot Bootcamp - abridged - part 1Marcus Tarquinio
 
Overview of Microcontroller and ATMega32 microcontroller
Overview of Microcontroller and ATMega32 microcontrollerOverview of Microcontroller and ATMega32 microcontroller
Overview of Microcontroller and ATMega32 microcontrollerRup Chowdhury
 

Semelhante a #OSSPARIS19 : A virtual machine approach for microcontroller programming : the OMicroB project - (20)

AAME ARM Techcon2013 003v02 Software Development
AAME ARM Techcon2013 003v02  Software DevelopmentAAME ARM Techcon2013 003v02  Software Development
AAME ARM Techcon2013 003v02 Software Development
 
Evaluating GPU programming Models for the LUMI Supercomputer
Evaluating GPU programming Models for the LUMI SupercomputerEvaluating GPU programming Models for the LUMI Supercomputer
Evaluating GPU programming Models for the LUMI Supercomputer
 
Challenges in GPU compilers
Challenges in GPU compilersChallenges in GPU compilers
Challenges in GPU compilers
 
AVX512 assembly language in FFmpeg
AVX512 assembly language in FFmpegAVX512 assembly language in FFmpeg
AVX512 assembly language in FFmpeg
 
Dsp on an-avr
Dsp on an-avrDsp on an-avr
Dsp on an-avr
 
Introduction to FreeRTOS
Introduction to FreeRTOSIntroduction to FreeRTOS
Introduction to FreeRTOS
 
Embedded system (Chapter 2) part A
Embedded system (Chapter 2) part AEmbedded system (Chapter 2) part A
Embedded system (Chapter 2) part A
 
Summary Of Course Projects
Summary Of Course ProjectsSummary Of Course Projects
Summary Of Course Projects
 
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
 
AVR_Course_Day4 introduction to microcontroller
AVR_Course_Day4 introduction to microcontrollerAVR_Course_Day4 introduction to microcontroller
AVR_Course_Day4 introduction to microcontroller
 
Micro controller & Micro processor
Micro controller & Micro processorMicro controller & Micro processor
Micro controller & Micro processor
 
MattsonTutorialSC14.pdf
MattsonTutorialSC14.pdfMattsonTutorialSC14.pdf
MattsonTutorialSC14.pdf
 
DESIGN OF A 16-BIT HARVARD STRUCTURED RISC PROCESSOR IN CADENCE 45nmTECHNOLOGY
DESIGN OF A 16-BIT HARVARD STRUCTURED RISC PROCESSOR  IN CADENCE 45nmTECHNOLOGYDESIGN OF A 16-BIT HARVARD STRUCTURED RISC PROCESSOR  IN CADENCE 45nmTECHNOLOGY
DESIGN OF A 16-BIT HARVARD STRUCTURED RISC PROCESSOR IN CADENCE 45nmTECHNOLOGY
 
Open cl programming using python syntax
Open cl programming using python syntaxOpen cl programming using python syntax
Open cl programming using python syntax
 
OpenCL programming using Python syntax
OpenCL programming using Python syntax OpenCL programming using Python syntax
OpenCL programming using Python syntax
 
Rtos for system integration
Rtos for system integrationRtos for system integration
Rtos for system integration
 
Exploring the Programming Models for the LUMI Supercomputer
Exploring the Programming Models for the LUMI Supercomputer Exploring the Programming Models for the LUMI Supercomputer
Exploring the Programming Models for the LUMI Supercomputer
 
Onnc intro
Onnc introOnnc intro
Onnc intro
 
Iot Bootcamp - abridged - part 1
Iot Bootcamp - abridged - part 1Iot Bootcamp - abridged - part 1
Iot Bootcamp - abridged - part 1
 
Overview of Microcontroller and ATMega32 microcontroller
Overview of Microcontroller and ATMega32 microcontrollerOverview of Microcontroller and ATMega32 microcontroller
Overview of Microcontroller and ATMega32 microcontroller
 

Mais de Paris Open Source Summit

#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...Paris Open Source Summit
 
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, ArduinoParis Open Source Summit
 
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...Paris Open Source Summit
 
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...Paris Open Source Summit
 
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, ZabbixParis Open Source Summit
 
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, InriaParis Open Source Summit
 
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...Paris Open Source Summit
 
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches ...
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches  ...#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches  ...
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches ...Paris Open Source Summit
 
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...Paris Open Source Summit
 
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...Paris Open Source Summit
 
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...Paris Open Source Summit
 
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...Paris Open Source Summit
 
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...Paris Open Source Summit
 
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...Paris Open Source Summit
 
#OSSPARIS19 - Table ronde : souveraineté des données
#OSSPARIS19 - Table ronde : souveraineté des données #OSSPARIS19 - Table ronde : souveraineté des données
#OSSPARIS19 - Table ronde : souveraineté des données Paris Open Source Summit
 
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...Paris Open Source Summit
 
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...Paris Open Source Summit
 
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...Paris Open Source Summit
 
#OSSPARIS19 - Cryptpad : la collaboration chiffrée - LUDOVIC DUBOST, CEO XWik...
#OSSPARIS19 - Cryptpad : la collaboration chiffrée - LUDOVIC DUBOST, CEO XWik...#OSSPARIS19 - Cryptpad : la collaboration chiffrée - LUDOVIC DUBOST, CEO XWik...
#OSSPARIS19 - Cryptpad : la collaboration chiffrée - LUDOVIC DUBOST, CEO XWik...Paris Open Source Summit
 
OSSPARIS19 - Customer Content Management: GED et CRM combiné - MICHAËL GENA, ...
OSSPARIS19 - Customer Content Management: GED et CRM combiné - MICHAËL GENA, ...OSSPARIS19 - Customer Content Management: GED et CRM combiné - MICHAËL GENA, ...
OSSPARIS19 - Customer Content Management: GED et CRM combiné - MICHAËL GENA, ...Paris Open Source Summit
 

Mais de Paris Open Source Summit (20)

#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
 
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
 
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
 
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
 
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
 
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
 
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
 
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches ...
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches  ...#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches  ...
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches ...
 
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
 
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
 
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
 
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
 
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
 
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
 
#OSSPARIS19 - Table ronde : souveraineté des données
#OSSPARIS19 - Table ronde : souveraineté des données #OSSPARIS19 - Table ronde : souveraineté des données
#OSSPARIS19 - Table ronde : souveraineté des données
 
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
 
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
 
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...
 
#OSSPARIS19 - Cryptpad : la collaboration chiffrée - LUDOVIC DUBOST, CEO XWik...
#OSSPARIS19 - Cryptpad : la collaboration chiffrée - LUDOVIC DUBOST, CEO XWik...#OSSPARIS19 - Cryptpad : la collaboration chiffrée - LUDOVIC DUBOST, CEO XWik...
#OSSPARIS19 - Cryptpad : la collaboration chiffrée - LUDOVIC DUBOST, CEO XWik...
 
OSSPARIS19 - Customer Content Management: GED et CRM combiné - MICHAËL GENA, ...
OSSPARIS19 - Customer Content Management: GED et CRM combiné - MICHAËL GENA, ...OSSPARIS19 - Customer Content Management: GED et CRM combiné - MICHAËL GENA, ...
OSSPARIS19 - Customer Content Management: GED et CRM combiné - MICHAËL GENA, ...
 

Último

Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfStefano Stabellini
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 

Último (20)

Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdf
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 

#OSSPARIS19 : A virtual machine approach for microcontroller programming : the OMicroB project -

  • 1. A Generic Virtual Machine Approach for Programming Microcontrollers : the OMicroB Project Steven Varoumas 1,2,3 Basile Pesin 1 Benoît Vaugon 4 Emmanuel Chailloux 1,2 1 Sorbonne Université 2 Laboratoire d’Informatique de Paris 6 (LIP6) - Sorbonne Université 3 Centre d’Étude et De Recherche en Informatique et Communications (CÉDRIC) - CNAM 4 Armadillo, 46 bis, rue de la République, 92170 Vanves, France IRILL, Sorbonne Université 10/12/2019
  • 2. 1/19 Outline 1 Context – Programming microcontrollers : the virtual machine approach – Motivations of the OMicroB project – The OCaml language 2 OMicroB : a generic OCaml VM designed for microcontrollers – Compilation chain – Optimizations – Measurements 3 Extensions - Hardware abstractions with functors - Synchronous programming for critical softwares 4 Conclusion
  • 3. 2/19 Context Microcontrollers • Simplified computer (computation unit, memory, inputs/output peripherals) • Typically programmed in C / assembly language • Used in (sometimes critical) embedded systems (automotive, trains, . . .) – Low cost – Low energy use Various specifications • Various architectures (PIC, AVR, ARM, . . .) • 8 bits, 16 bits, 32 bits architectures • Wide range of CPU speeds : from 1MHz to 300MHz • RAM (data) : from a few bytes upto 1MiB • Flash (program) : from 4 KiB to a few MiB
  • 4. 3/19 The VM approach to microcontrollers’ programming Microcontrollers (µC) can be difficult to program • C / assembly programming can be error-prone • Offers little hardware abstraction • Few checks at compile time • Hard to debug The Virtual Machine (VM) Approach VM of a programming langage implemented for microcontrollers • Allows running bytecode of higher-level languages directly on µC (easier, safer programming) • Offers a layer of abstraction over the hardware • Increases the portability of code • Can decrease the size of code
  • 5. 4/19 The VM approach to microcontrollers’ programming : examples High level languages on microcontrollers • Picobit : Scheme on PIC 18 • MicroPython : Python on STM32 and ARM • MicroEJ : Java on ARM and RX600 • OCaPIC : OCaml for PIC – OCaml virtual machine implemented in PIC18 assembly. – Allows the execution of the OCaml language on a PIC18. – Comes with : simulators, library for external displays . . . – OCamlClean : tool for removing dead code and useless memory allocations But ... Most of these VMs are specific to some hardware architecture(s)
  • 6. 5/19 Motivations of the OMicroB project What we wanted • A modern, expressive, high level language (OCaml) • Used for programming microcontrollers starting with ones with very limited resources (a few kB of RAM) • Portable accross various architectures and configurable ATmega2560 8 bits 16 MHz 8 KiB of RAM 256 KiB of flash memory ATmega32u4 8 bits 16 MHz 2.5 KiB of RAM 32 KiB of flash memory
  • 7. 6/19 The OCaml language Chosen language : OCaml (https://ocaml.org/) • Developped by INRIA (Gallium team) • Multi paradigms programming language (functional, imperative, object-oriented) • High-level language with powerful constructions and expressiveness (parametrized modules, pattern matching, lambdas, objects, exceptions . . .) • Improved safety by static typing with type inference. • Its Virtual Machine (the ZAM) is very lightweight (148 bytecode instructions) and efficient (* map : (’a -> ’b) -> ’a list -> ’b list *) let rec map f l = match l with | [] -> [] | h::t -> (f h)::( map f t) (* filter : (’a -> bool) -> ’a list -> ’a list *) let rec filter f l = match l with | [] -> [] | h::t -> if (f h) then h::( filter f t) else (filter f t) let main = let l1 = [ 1 ; 2 ; 3 ; 4 ] in let l2 = filter (fun x -> x mod 2 = 0) l1 in map (fun x -> x + 1) l2
  • 8. 7/19 OMicroB : Generic OCaml VM for microcontrollers Our contribution : OMicroB • OCaml on Microcontroller’s Boards • OCaml virtual machine implemented in C • Generic : execution of all of the OCaml language on all microcontrollers with a C compiler (Arduino/AVR, PIC, Nucleo/ARM, . . .) • Offers hardware abstraction : automatic memory management (garbage collector) • Configurable (size of values, GC, . . .) • Static analysis dedicated at optimising performances (size and speed) • Factorizable analyses (over the bytecode and the C interpreter) • Free software (CeCILL License)
  • 9. 8/19 OMicroB : compilation chain OCaml file ocamlc OCaml bytecode ocamlclean OCaml bytecode C file bc2c gcc avr-gcc sdcc gcc-arm interpreter + runtime
  • 10. 9/19 OMicroB : Example (ocamlc & ocamlclean) (* int -> int *) let rec facto n = match n with | 0 -> 1 | x -> facto (x -1) * x let main = Arduboy.init (); Arduboy.print_int (facto 4); Arduboy.display () OCaml bytecode : 0 BRANCH 12 1 ACC 0 2 BRANCHIFNOT 10 3 ACC 0 4 PUSHACC 1 5 OFFSETINT -1 6 PUSHOFFSETCLOSURE 0 7 APPLY 1 8 MULINT 9 RETURN 1 10 CONST 1 11 RETURN 1 12 CLOSUREREC 1 0 1 [] 13 CONST 0 14 CCALL 1 0 (* ocaml_arduboy_init() *) 15 CONST 4 16 PUSHACC 1 17 APPLY 1 18 CCALL 1 1 (* ocaml_arduboy_print_int() *) 19 CONST 0 20 CCALL 1 2 (* ocaml_arduboy_display() *) 21 POP 1 22 STOP
  • 11. 10/19 Bytecode embedding in a C file : bc2c bc2c The bc2c tool “transforms” the bytecode file into a C file by embeding the OCaml program into various C variables : • The bytecode instructions (array of “opcode_t”) in flash memory • The OCaml stack (array of “value”) • The OCaml heap (array of “value”) • The OCaml global variables (array of “value”) • An array of pointers to C primitives • A global accumulator variable N.B : The OCaml VM uses an uniform representation of values (of type “value”)
  • 12. 11/19 bc2c : optimizations bc2c performs several static analysis at compile time in order to optimize speed and memory use : Compacting bytecode • Instructions encoded on 8 bits + specialized instructions for arguments < 4 bytes ⇒ Reduces size of code and read speed by a factor of almost 4 Tailor-made interpreter • Only the code for the used bytecode instructions is compiled in the final program. Partial evaluation of the program • The OCaml program is executed at compile time upto the first I/O • Dump of the state of the memory (heap & stack) into the C file ⇒ Quicker and lighter programs
  • 13. 12/19 OMicroB : Example (output of bc2c) /* ... */ opcode_t const ocaml_bytecode [ OCAML_BYTECODE_BSIZE ] = { /* 0 */ OCAML_BRANCH_1B , /* 1 */ 17, /* 2 */ OCAML_ACC0 , /* 3 */ OCAML_BRANCHIFNOT_1B , /* 4 */ 11, /* 5 */ OCAML_ACC0 , /* 6 */ OCAML_PUSHACC1 , /* 7 */ OCAML_OFFSETINT_1B , /* 8 */ -1, /* 9 */ OCAML_PUSHOFFSETCLOSURE0 , /* 10 */ OCAML_APPLY1 , /* 11 */ OCAML_MULINT , /* 12 */ OCAML_RETURN , /* 13 */ 1, /* 14 */ OCAML_CONST1 , /* 15 */ OCAML_RETURN , /* 16 */ 1, /* 17 */ OCAML_C_CALL1 , /* 18 */ 0, /* 19 */ OCAML_CONSTINT_1B , /* 20 */ 4, /* 21 */ OCAML_PUSHACC1 , /* 22 */ OCAML_APPLY1 , /* 23 */ OCAML_C_CALL1 , /* 24 */ 1, /* 25 */ OCAML_CONST0 , /* 26 */ OCAML_C_CALL1 , /* 27 */ 2, /* 28 */ OCAML_POP , /* 29 */ 1, /* 30 */ OCAML_STOP }; value ocaml_heap[ OCAML_HEAP_WOSIZE * 2] = { /* 0 */ Make_header (1, Closure_tag), /* 1 */ Val_codeptr (2) }; value acc = Val_int (0); value ocaml_stack[ OCAML_STACK_WOSIZE ] = { /* 0 */ Val_int (0), /* (...) */ /* 63 */ Init_val_block (4 * 1) }; void * const ocaml_primitives [ OCAML_PRIMITIVE_NUMBER ] = { (void *) &ocaml_arduboy_init , (void *) &ocaml_arduboy_print_int , (void *) & ocaml_arduboy_display };
  • 14. 13/19 Interpreter and runtime Intepreting bytecode The interpreter reads the program (stored in flash) generated by bc2c and modify the different variables (heap, stack, accumulator, . . .) depending on the instruction : Example : /* ... */ /* ‘ASSIGN n‘ assigns the nth level of the stack to the current acc value */ #ifdef OCAML_ASSIGN case OCAML_ASSIGN : { TRACE_INSTRUCTION ("ASSIGN"); sp[read_uint8 ()] = acc; acc = Val_unit; break; } #endif /* ... */ The runtime • Standard runtime library able of handling lists, arrays, floats, references, strings, generic comparison, . . . • Memory reuse with two Garbage Collection algorithms (Stop and Copy, Mark and Compact) • Possibilities to interface OCaml with C code (FFI)
  • 15. 14/19 Simulation Simulator • A simulator runs the VM and displays the state of input/output pins of the microcontroller • As well as the interaction with various external components (matrix display, buttons, led, . . .) by describing the circuit in a text file • Various levels of trace • Not yet generic ⇒ Debugging is made easier by not flashing the program
  • 16. 15/19 Benchs and results Measurements done on PC, and on Arduino Mega board : • ATmega2560 microcontroller : 16MHz ; Flash : 256kB ; Ram : 8kB • GC : Stop and Copy • Length of values : 32 bits • Compiler : avr-gcc with -O2 optimization level Speed measurements : Program Time (ocamlrun) Time (OMicroB Time (OMicroB RAM usage (s) on PC) (s) on MCU) (s) (heap+stack) (B) oddeven 0.28 0.62 2.262 1003 sieve 0.04 0.07 0.390 1825 deriv 0.03 0.05 0.250 1946 integr 0.04 0.06 0.379 1849 Size measurements : Program Bytecode Size of the RAM stack size heap size size (B) exec. (B) (B) (words) (words) Manhattan distance 744 24 210 5555 900 350 Solilet 413 18 322 5069 800 450 Snake 1376 21 238 1768 35 300 Flash and RAM size for the snake game : Taylor-made Size in flash Size in RAM Stack-size Heap-size interpreter no 27.9 ko 2*1.33 ko 2*64 values 2*300 values yes 17.3 ko Bytecode size optimizations (snake) : 30.16 ko ocamlclean −−−−−−→ 6.9 ko bc2c −−−→ 2.1 ko
  • 17. 16/19 Hardware abstractions using functors (** Interface for SPI communication *) module type SPI = sig val init: unit -> unit val transmit: char -> char end (** Connect as a slave *) module SPISlave: Circuits.SPI (** Connect as a master, with a SS pin *) module SPIMaster(SC: sig val ssPin : pin end): Circuits.SPI Master (BBC micro :bit) code module%comp SPIM = SPIMaster(ssPin = PIN0) let _ = SPIM.init (); let c = SPIM.transmit ’m’ in Screen. print_string (String.make 1 c) Slave (Arduino) code module%comp MyDisp = MakeLCD( rsPin = PIN9; enablePin = PIN8; d4Pin = PIN5; d5Pin = PIN4; d6Pin = PIN3; d7Pin = PIN2; ) let _ = MyDisp.init (); SPISlave.init (); while true do let c = SPISlave.transmit ’s’ in MyDisp. print_string (String.make 1 c) done
  • 18. 17/19 A hardware abstraction application : the MicroPong game module I2C = I2C(struct let addr = 0x3C end) module Scr = SSD1306(I2C) module%comp LedL = Led(pin = PIN1) module%comp LedR = Led(pin = PIN2) module%comp SPIM = SPIMaster(ssPin = PIN0) Radio.send ("sr" ^ string_of_int !scoreR ); Radio.send ("sl" ^ string_of_int !scoreL ); leftY := int_of_char (SPIM.transmit !scoreL ); rightY := Radio.recv ()
  • 19. 18/19 Extension to synchronous programming / critical systems Synchronous Programming • Synchronous programming is well adapted to microcontrollers ERTSS 2016 “Concurrent Programming of Microcontrollers, a Virtual Machine Approach” • Model of concurrent programming on critical applications • No allocation during a synchronous instant (→ no GC) • No unbound loops Example (OCaLustre) : let%node rising_edge (in_f) ~return:(out_f) = out_f := in_f && (not (false ->> in_f )) let%node press_switch (button) ~return:(led) = button_pressed := rising_edge (button ); led := false ->> (if button_pressed then (not led) else led) (N.B. a ->> b ≡ a0, b0, b1, b2, . . . ) Worst-Case Execution Time (WCET) computation • We can associate a WCET for each (non-allocating) bytecode instruction • Deduce the WCET of a synchronous instant
  • 20. 19/19 Conclusion Our solution offers • A lightweight virtual machine • providing an expressive programming model • that offers safety (static typing) and guarantees (WCET for the synchronous extension) • as well as an easier debug process • all while being portable and configurable • and keeping good performances ⇒ Well suited to (critical) embedded systems Future works • Integrating new architectures into the OMicroB project (ESP, PIC32, ...) • User-friendly Development Environment • A more generic simulator (bundled with the IDE) https://github.com/stevenvar/OMicroB