From: "Rego, P." <pvrego@gmail.com>
Subject: Return unconstrained types in ZFP
Date: Sat, 1 Dec 2012 18:38:22 -0800 (PST)
Date: 2012-12-01T18:38:22-08:00 [thread overview]
Message-ID: <3254b304-ed8b-4601-8a3c-ab3df74d84ad@googlegroups.com> (raw)
Dear fellows,
I am trying to implement, for an ATmega2560 (Arduino Mega) micro-controller using ZFP in GNAT-AVR, an USART unconstrained Get string like
function Get (Port : USART_Port_Type; Size : Unsigned_8) return String_U8;
assuming that USART_Port_Type is an enumeration, and
type String_U8 is array (Unsigned_8 range <>) of Character;
So I tried
function Get (Port : USART_Port_Type; Size : Unsigned_8) return String_U8 is
Curr_String : String_U8 (1 .. Size);
Null_String : constant String_U8 (1 .. Size) := (others => ' ');
begin
for Index in 1 .. Curr_String'Length loop
Curr_String (Unsigned_8 (Index)) := Get (Port); -- BTW, function Get (Port : USART_Port_Type) return Character; works ok!
end loop;
return Curr_String;
exception
when others => return Null_String;
end Get;
and the compiler complained that I am not defining the Last_Chance_Handler. Now I found in GNAT documentation, that I should define it using
procedure Last_Chance_Handler
(Source_Location : System.Address; Line : Integer);
pragma Export (C, Last_Chance_Handler, "__gnat_last_chance_handler");
and at least (for now) a null procedure would be enough
procedure Last_Chance_Handler
(Source_Location : System.Address; Line : Integer) is
begin
null;
end Last_Chance_Handler;
But now the compiler complains that I also did not define the Get_Secondary_Stack, and found no reference to memcpy. I found in GNAT documentation the Secondary Stack definition, but with no syntax information, and nothing else. And regarding to memcpy, found nothing.
-- The Secondary Stack
-- The secondary stack is a special storage pool that is used for
-- this purpose. The called function places the result on the
-- secondary stack, and the caller uses or copies the value from
-- the secondary stack, and pops the secondary stack after the
-- value is consumed. The secondary stack is outside the system
-- ABI, and the important point is that although generally it is
-- handled in a stack like manner corresponding to the subprogram
-- call structure, a return from a function does NOT pop the stack.
Actually the compiler returned me
In function `avr__atmega2560__usart__get__7':
avr-atmega2560-usart.adb:(.text+0x164c): undefined reference to `memcpy'
avr-atmega2560-usart.adb:(.text+0x1694): undefined reference to `memcpy'
C:/GNAT/2012/lib/gcc/avr/4.5.4/rts-zfp\adalib\libgnat.a(s-secsta.o): In function `system__secondary_stack__ss_allocate':
s-secsta.adb:(.text+0x8): undefined reference to `__gnat_get_secondary_stack'
C:/GNAT/2012/lib/gcc/avr/4.5.4/rts-zfp\adalib\libgnat.a(s-secsta.o): In function `system__secondary_stack__ss_mark':
s-secsta.adb:(.text+0x54): undefined reference to `__gnat_get_secondary_stack'
C:/GNAT/2012/lib/gcc/avr/4.5.4/rts-zfp\adalib\libgnat.a(s-secsta.o): In function `system__secondary_stack__ss_release':
s-secsta.adb:(.text+0x66): undefined reference to `__gnat_get_secondary_stack'
collect2: ld returned 1 exit status
avr-gnatlink: error when calling C:\GNAT\2012\bin\avr-gcc.exe
avr-gnatmake: *** link failed.
I also tried to define null bodies like the Last_Chance_Handler, and at this point the code linked with success. But I am afraid that doing this I could make a big mess, so I did not burn the chip using this .hex (specially due to Memcpy null body). Thus, could someone give me a light on this? How can I implement correctly the Secondary_Stack procedure and Memcpy? Or maybe a better documentation or a tutorial would be very helpful.
Thanks.
next reply other threads:[~2012-12-02 2:38 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-02 2:38 Rego, P. [this message]
2012-12-02 3:29 ` Return unconstrained types in ZFP Shark8
2012-12-04 1:08 ` Rego, P.
2012-12-02 18:13 ` Luke A. Guest
2012-12-04 0:59 ` Rego, P.
2012-12-02 18:27 ` rrr.eee.27
2012-12-04 0:54 ` Rego, P.
2012-12-03 12:25 ` Stephen Leake
2012-12-04 1:15 ` Rego, P.
2012-12-04 8:40 ` Stephen Leake
2012-12-04 13:21 ` Britt
2012-12-05 3:34 ` Stephen Leake
2012-12-05 13:48 ` Britt
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox