Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ocaml for ARM cortex M4?

I would like to know if it would be possible to cross-compile application written in Ocaml on processor like STM32F407 (1MB Flash, 196kB RAM) ? (without OS).

I have read Cross-compiling ocaml apps for ARM ; the experiment seems to have been done on beaglebone; so more powerfull than STM32, and with Linux as OS.

There is also OcaPIC (http://www.algo-prog.info/ocaml_for_pic/web/index.php?id=ocapic) - which is meant for PIC processors. Is there any similar port for ARM Cortex M4 ?

like image 673
Pierre G. Avatar asked Nov 21 '14 12:11

Pierre G.


People also ask

Is ARM Cortex-M4 a RISC or CISC?

The ARM Cortex-M is a group of 32-bit RISC ARM processor cores licensed by Arm Holdings. These cores are optimized for low-cost and energy-efficient integrated circuits, which have been embedded in tens of billions of consumer devices.

Is ARM Cortex-M4 microcontroller?

Arm Cortex-M4 microcontrollers support the Cortex Microcontroller Software Interface Standard (CMSIS), thereby enabling developers to port their code to or from different microcontrollers for future projects. This interface also eases the integration of third-party software, helping to reduce time to market.

Is Cortex M4 multicore?

As mentioned, multicore microcontrollers have more than one processing core. There are two types of configurations which are often used, symmetric and asymmetric processing. Symmetric core configurations contain two or more of the exact same processing cores. For example, they might both be Arm® Cortex®-M4 processors.

Which compiler is used for the ARM Cortex-M processors?

Arm Keil MDK is a comprehensive software development solution for Arm-based microcontrollers and includes all components that you need to create, build, and debug embedded applications. MDK includes the Arm Compiler 6, which combines highly optimized C/C++ libraries and tools with modern LLVM technology.


1 Answers

I'm not aware of a port, but see the related mailing list thread 1,2.

To get started you could use the same toolchain that you use for building a C or Arduino code to cross-compile the OCaml bytecode interpreter (ocamlrun), and then run 32-bit OCaml bytecode. The tricky part would be to port the runtime to work without an OS (allocating memory, etc.). Projects like Mirage have done that for Xen based partially on Xen's miniOS. Perhaps you could use FreeRTOS, ChibiOS, etc. to get started.

Once that works you can look at native code with ocamlopt, it supports armv4 to armv7, but I don't know if ARMv7E-M is a superset of that or not.

Or you could write a DSL embedded in OCaml that generates C code which you would finally run on your MCU, like Haskell does with Ivory3 and Atom4.

like image 165
Török Edwin Avatar answered Sep 30 '22 15:09

Török Edwin