12.3 Locating a Function at a Specific Address

In this example, function func is located at a specific address. A built-in compiler function is used to calculate the program memory address, which is not otherwise available in C.

#include "stdio.h"
  void __attribute__((address(0x2000))) func()
  {}
  
  void main()
  {
    long addr;
    addr = __builtin_tbladdress(func);
    printf("0x2000 = 0x%lx\n", addr);
  }

The equivalent function definition in assembly language appears below. The .align directive is optional and represents the default alignment in program memory. Use of * as a section name causes the assembler to generate a unique name based on the source file name.

       .section *,address(0x2000),code
       .global _func
       .align 2
_func: return