ARM Technical Support Knowledge Articles


Applies to: L166 Linker/Locator


Information in this article applies to:


When I build my project, I get the following warning message:

Warning 23: NDATA/NDATA0 or NCONST must fit in one 16kb page

My NDATA is defined using the CLASSES directive as:

NDATA(0x200000 - 0x20BFFF)


You can only specify ranges of memory totalling up to 16kb in size for NDATA using the CLASSES directive. In addition, a range of memory must not cross a page boundary. By only specifying the start address for NDATA it, has the same effect as trying to specify a range larger than 16kb.

The following examples will generate the warning:

The following examples will work:


You need to adjust your NDATA address ranges so they total less than 16kb and do not cross a page boundary. If you need more than 16kb of NDATA, then you can reassign the Data Page Pointers and obtain up to 48kb of contiguous NDATA memory.

For example, to specify an NDATA range from 200000H to 20BFFFH, you would use the linker DPPUSE directive in the following way:

DPPUSE (0=NDATA (0x200000-0x20BFFF), 3=NCONST (0xC000-0xFFFF))

The can be set up in uVision by completing the following steps:

You can then specify the full NDATA range using the CLASSES directive and the warning will not be generated.

Note that if you specify an NDATA range of 0x10000 - 0x1FFFF, for example, using the DPPUSE directive, then you may specify multiple ranges of NDATA using the CLASSES directive inside of the DPP NDATA range. For example:

DPPUSE(0 = NDATA(0x10000 - 0x1FFFF), 3 = NCONST(0xC000 - 0xFFFF))

CLASSES(NDATA(0x00000 - 0x01000, 0x1A000 - 0x1FFFF))


Article last edited on: 2005-07-15 12:52:43

Rate this article

Disagree? Move your mouse over the bar and click

Did you find this article helpful? Yes No

How can we improve this article?

Link to this article
Copyright © 2011 ARM Limited. All rights reserved. External (Open), Non-Confidential