Keil Logo

DPPUSE Linker Directive




DPPUSE (dpp# = NDATA(range), dpp# = NCONST(range))




Options — L166 Locate — DPP Usage — DPPUSE.


The DPPUSE directive allows you to reassign the DPP registers used for the NDATA and NCONST groups. You can use this directive to extend the size of these groups to 64K using fast 16-bit addressing.

When using the DPPUSE directive, dpp# specifies the DPP register number (0=DPP0, 1=DPP1, 2=DPP2, and 3=DPP3) and range specifies the address range where the specified group is located.

DPPs are assigned in ascending order to NDATA or NCONST starting with the specified DPP. Several DPPs are used if the specified range is larger than 16K. The L166 Linker properly initializes all DPP registers.


  • DPP3 must contain the value 3 (because it is used for all SFR accesses). If you use DPP3 for NDATA or NCONST, the specified address range must reside within page 3 of the C16x/ST10 address space (0C000h-0FFFFh).
  • If you use the DPPUSE directive, you must specify both the NDATA and NCONST groups. You cannot reassign only one group.
  • The DPPUSE directive automatically generates CLASS definitions for NDATA and NCONST.


  • If you use DPP0 to access NDATA or NCONST groups, be sure to select the MOD167 compiler directive to access far, huge, or xhuge objects. In 166 mode (when the MOD167 directive is not used), it is not possible to use far, huge, or xhuge addressing because DPP0 is overwritten.
  • If you convert addresses of automatic objects to far, huge, or xhuge pointers you must specify the NOFIXDPP compiler directive.
  • Do not use far pointers to access near objects in the DPPUSE area. Far pointers can access objects up to 16K in size. Near objects that overlap a 16K page boundary are accessed incorrectly with far pointers. Use huge pointers to avoid problems with objects that overlap a 16K page in the DPPUSE area.
See Also


L166 myfile.obj DPPUSE(0=NDATA (20000h-2BFFFh), &

This example uses DPP0, DPP1, and DPP2 to access 48K of NDATA and DPP3 to access 16K of NCONST.

  • DPP0 is assigned the value 8 (20000h-23FFFh),
  • DPP1 is assigned the value 9 (24000h-27FFFh),
  • DPP2 is assigned the value 10 (28000h-2BFFFh),
  • DPP3 is assigned the value 3 (0C000h-0FFFFh).

L166 myfile.obj DPPUSE (1=NDATA (18000h-1BFFFh), &

This example uses DPP1 to access 16K of NDATA and DPP2 and DPP3 to access 32K of NCONST.

  • DPP1 is assigned the value 6 (18000h-1BFFFh),
  • DPP2 is assigned the value 2 (08000h-0BFFFh),
  • DPP3 is assigned the value 3 (0C000h-0FFFFh).

In each of these examples memory accesses to NDATA and NCONST use fast, 16-bit addresses rather than far, hugh, or xhuge addresses.

  Arm logo
Important information

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.

Change Settings

Privacy Policy Update

Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers
of your data.