ARM processors support several different programming languages and environments. The most common languages and environments used for programming ARM processors include:
C and C++
The C and C++ programming languages are the most commonly used languages for programming ARM processors. They provide low-level control over memory and hardware, which makes them well-suited for embedded systems programming. C and C++ code compiled for ARM processors will result in very efficient code.
All ARM processors support C and C++. ARM provides C and C++ compilers as part of their toolchain for programming their chips. Popular C/C++ compilers used with ARM include:
- ARM Compiler
- GCC (GNU Compiler Collection)
The ARM C and C++ compilers produce code targeted specifically for ARM processors. GCC and LLVM are open source compilers that support many chip architectures including ARM.
Assembly language is also commonly used for programming ARM processors. Assembly code allows programmers to directly access and utilize the instruction set architecture of the ARM processor.
Assembly programming provides ultimate control over the processor at a low level. It can be used to create extremely optimized code, such as for time-critical operations. It is also useful for accessing processor features that might not be available through a higher level language.
The ARM instruction set has several versions such as ARMv6, ARMv7, etc. So the exact assembly syntax used will depend on the specific ARM processor variant.
The Java programming language is popular on embedded ARM devices such as smartphones and tablets. Java provides portability, security and high performance which makes it well-suited for the mobile space.
There are several ways to run Java code on ARM devices:
- Using a JVM (Java Virtual Machine) which interprets the Java bytecode at runtime.
- AOT (Ahead-Of-Time) compilation of Java bytecode to native machine code.
- Compiling Java source to native machine code.
Oracle and other vendors provide Java JVMs optimized for ARM. And there are Java compilers like GCJ that can compile Java to native ARM code.
The C# programming language can be used to create applications for ARM devices running Windows or Linux. C# combines the high productivity of managed languages like Java with the power of native C/C++.
Mono is a popular cross-platform implementation of .NET that supports ARM processors. The Mono runtime allows compiling C# code to native ARM machine code. So C# programs can obtain native performance on ARM.
Python is a popular high level programming language used on embedded ARM devices like the Raspberry Pi. It provides good productivity for scripting applications due to its simple syntax and large set of libraries.
Python code is usually interpreted at runtime rather than compiled to native code. But there are compilers like Cython that can compile Python to native machine code for increased performance.
Swift is a newer programming language developed by Apple for iOS and macOS applications. But open source Swift has also been ported to Linux and ARM processors.
Swift combines modern language features with good performance. Compiled Swift code for ARM can approach the performance of C/C++. So Swift is growing in popularity for embedded programming.
Rust is another newer systems programming language that has great potential for embedded devices. It guarantees memory safety without garbage collection which makes it suitable for ARM and IoT.
Rust has been demonstrated running on ARM Cortex-M microcontrollers and outperforms C. As the language matures, Rust could become more widely adopted in the ARM ecosystem.
There are various development environments and toolchains used for programming ARM devices:
- ARM Development Studio – ARM’s official IDE and toolchain for C/C++ development
- GNU toolchain – GCC, GDB debugger, etc.
- LLVM/Clang toolchain – Clang compiler, lldb debugger
- Visual Studio – Microsoft IDE with ARM support
- Eclipse – Open source IDE with ARM plugins
- Android Studio – Google’s IDE tailored for Android apps
These environments allow compiling, debugging and deploying applications for ARM devices. They support programming in languages like C, C++, Java and more. The choice depends on developer preference and target platform.
ARM processors support many operating systems. Popular operating systems used with ARM include:
- Android – For mobile devices
- iOS – Apple’s mobile OS
- Linux – Most widely used OS across ARM devices
- Windows – Mainly newer Win 10 on ARM devices
- FreeRTOS – Popular real time OS for microcontrollers
The OS provides core libraries, device drivers, system calls and other interfaces for ARM applications to use. The OS may also include a high level language runtime like Java or .NET for easier application development.
In summary, ARM processors are highly flexible and support many programming languages. C and C++ are the most commonly used for their speed and low-level control. But managed languages like Java and C# are popular where portability is important, such as mobile apps. And new languages like Rust have potential for better memory safety in ARM embedded systems. The choice of language depends on the specific application requirements.
ARM provides robust toolchains for compiling and debugging applications in these languages. And ARM processors support almost any modern OS from mobile operating systems like Android to real-time operating systems like FreeRTOS. This wide software support is key to the popularity of ARM across virtually all segments of embedded and mobile devices.