world leader in high performance signal processing
Trace: » intro

Introduction to toolchain

Bare metal toolchains are intended for standalone applications that involve no operating system, and thus the entire application runs in a single pseudo thread. The hardware programming is bare open to the user software, hence the name 'bare metal'. The bfin-elf toolchain is a gcc toolchain for developing such applications. If the user is conversant with bare metal application development on any other processor using gcc toolchain, it is relatively easy to adapt to the bfin-elf toolchain, except for the hardware specific programming.

Since there is no operating system involved, it is the duty of the application code to ensure proper initialization which is otherwise done by OS services - such as initializing the stack, configuring the cache / cplbs, initializing event handlers as well as setting the operating mode (Supervisor / User). Additionally, no device drivers are provided and hence user needs to be thorough with the low-level hardware level programming with MMRs, configuring DMA channels, GPIO pin multiplexing, interrupt handling etc. In contrast, most of these are tasks are done by Kernel itself, in a Linux world.

Refer to Blackfin Toolchain Targets for other gcc toolchains that operate with the Linux World.

Refer to Blackfin Manuals for Hardware documentation for Blackfin.

Comparisons can be made to the VisualDSP++ IDDE from Analog Devices, which also brings along a bare metal toolchain. Concept of the pre-processed initialization code (basiccrt.S) is retained in bfin-elf, while the concept of the Linker Description File (*ldf) is similar to that of gcc Linker Script (*.ld). Similar to the VisualDSP++ IDDE, gcc users can opt for the widely used Eclipse based development environment.

Please contact ADI for questions on VisualDSP++.

Porting code from Visual DSP++ environment is generally trivial. In most cases one needs to worry about the compile options (IDDE such as Eclipse takes case of this), the compiler attributes (such as for interrupt/exception handler, memory sections), the assembler keywords, the CRT codes and the Linker script.

Refer to the following pages for a quick overview of the differences between the VDSP and GCC toolchain: