The AVR.Strings package defines a space saving string type for AVR platforms where memory space is limited. Type AVR_String differs from the standard string in that the array index is type Unsigned_8 instead of the 16-bit Positive type.
package AVR.Strings is
pragma Pure;
Space : constant Character := ' ';
type AVR_String is array (Unsigned_8 range <>) of Character;
-- some string subtypes with predefined length.
subtype AStr2 is AVR_String (1 .. 2);
subtype AStr3 is AVR_String (1 .. 3);
subtype AStr4 is AVR_String (1 .. 4);
subtype AStr5 is AVR_String (1 .. 5);
subtype AStr6 is AVR_String (1 .. 6);
subtype AStr7 is AVR_String (1 .. 7);
subtype AStr8 is AVR_String (1 .. 8);
subtype AStr9 is AVR_String (1 .. 9);
subtype AStr10 is AVR_String (1 .. 10);
subtype AStr11 is AVR_String (1 .. 11);
subtype AStr12 is AVR_String (1 .. 12);
subtype AStr13 is AVR_String (1 .. 13);
subtype AStr14 is AVR_String (1 .. 14);
subtype AStr15 is AVR_String (1 .. 15);
subtype AStr16 is AVR_String (1 .. 16);
subtype AStr17 is AVR_String (1 .. 17);
subtype AStr18 is AVR_String (1 .. 18);
subtype AStr19 is AVR_String (1 .. 19);
subtype AStr20 is AVR_String (1 .. 20);
subtype AStr100 is AVR_String (1 .. 100);
-- Progmem_String and PStr are not part of the ARM.
type Progmem_String is new AVR_String;
pragma Linker_Section (Progmem_String, ".progmem.data");
subtype PStr is Progmem_String;
type Alignment is (Left, Right, Center);
type Truncation is (Left, Right);
type Membership is (Inside, Outside);
type Direction is (Forward, Backward);
type Trim_End is (Left, Right, Both);
end AVR.Strings;
From it's definition, you can see that an AVR_String is the same as an Ada string, except that it's array index is Unsigned_8 instead of the 16-bit Positive type. This saves 2-bytes for each string because of the lower and upper bounds maintained for each string.
type AVR_String is array (Unsigned_8 range <>) of Character;
The Progmem_String is an AVR_String that resides in the program's EPROM memory instead of precious SRAM.
type Progmem_String is new AVR_String;
pragma Linker_Section (Progmem_String, ".progmem.data");
The type PStr is a subtype of Progmem_String, which acts as an abbreviated name for the same string type. It matches the name used in AVR-libc
subtype PStr is Progmem_String;
The exceptions:
are part of Ada.Strings, but are not included here.
Normally Truncation is declared as follows:
type Truncation is (Left, Right, Error);
but Error has not been included here.
Wiki: AVR.Strings.C
Wiki: AVR.Strings.Maps.Constants
Wiki: AVR.Strings.Maps
Wiki: AVR.Strings.Pstring
Wiki: AVR.Strings.Search
Wiki: Strings