Who is this for?
This is an introductory topic for embedded software developers new to Armv8-A processors and/or the Arm Compiler for Embedded.
What will you learn?
Upon completion of this Learning Path, you will be able to:
- Create and build an example project
- Run example on Fixed Virtual Platform (FVP)
- Understand basic boot code and other syntax
- Extend example to use different I/O mechanisms
- Extend example to implement basic exception handling
Prerequisites
Before starting, you will need the following:
- Some familiarity with embedded programming is assumed
Summary
This summary was drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.
You’ll create a bare‑metal Armv8‑A application, build it with Arm Compiler for Embedded, and run it on the
FVP_Base_AEMvA model. After bringing up a Hello World example that uses semihosting for printf, you’ll replace that mechanism by retargeting output to the PL011 UART provided by the Fixed Virtual Platform. You’ll add a minimal EL3 reset handler to boot only one processor and place the remaining cores into sleep. Then, you’ll introduce basic exception handling by routing exceptions to EL3 and configuring the Generic Interrupt Controller (GICv3) with a timer as an interrupt source, enabling a simple event‑driven workflow that you can observe on the model.Frequently asked questions
These FAQs were drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.
You can use Arm Development Studio with a configured license, or install Arm Compiler for Embedded and Arm Fixed Virtual Platforms (FVP) individually. The examples run on an FVP model.
Use the FVP_Base_AEMvA Architecture Envelope Model. It’s a generic Arm Architecture platform that implements four processors.
Import
symbol __use_no_semihosting in hello.c. If your build or run depends on semihosting, this exposes the dependency and prompts you to retarget printf to the PL011 UART on the FVP.The minimal reset handler puts all but one processor to sleep and runs the application on a single processor. This ensures the rest of the example executes on one core.
Exceptions are routed to EL3 and GICv3 is initialized with the timer as an interrupt source. When the timer triggers, your handler is invoked, demonstrating the event‑driven flow.