Re: [Flashforth-devel] Fwd: Re: C functions/libs at 0x11000 and up
Brought to you by:
oh2aun
From: om1zz <om...@vo...> - 2015-06-09 18:31:48
|
Nope, that are the LIBS only which are put at 0x11000 with your script. But there are also the "users Cfunctions", which are not called as the "xc16" libraries - those will be put inside the ffcode section with your script. So you have 2 kinds of external calls: 1. external functions called from FF as "XC16 library functions" - ie. floats/doubles.s - those are from xc16 library libm etc. and will be placed into the "libs" section 2. external "user Cfunctions" called as for example my Ctest.c (not a part of XC16 library). It seems we have got two choices with Cfunctions: 1. coloring Cfunctions and a having a special section for it (after the libs one) - as I did below, or, 2. creating a library from a Cfunction.o, and add it into the "libs" section. Igor. ______________________________________________________________ > Od: Mikael Nordman <mik...@fl...> > Komu: <fla...@li...> > Datum: 09.06.2015 20:17 > Předmět: Re: [Flashforth-devel] Fwd: Re: C functions/libs at 0x11000 and up > >At least for me the C function is linked after the library code. >Not into the ffcode section. > >Program Memory [Origin = 0x200, Length = 0x153fe] > >section address length (PC units) length (bytes) >(dec) >------- ------- ----------------- >-------------------- >.text 0x200 0xa0 0xf0 >ffcode 0x400 0x2400 0x3600 >libs 0x11000 0xd18 0x13a4 >.text 0x11d18 0x242 0x363 > >On 09.06.2015 20:46, om1zz wrote: >> But that puts user Cfunction into the ffcode section, that is not what we want, do we? >> I. >> >> ______________________________________________________________ >>> Od: Mikael Nordman <mik...@fl...> >>> Komu: <fla...@li...> >>> Datum: 09.06.2015 19:03 >>> Předmět: Re: [Flashforth-devel] Fwd: Re: C functions/libs at 0x11000 and up >>> >>> To avoid decorating the C functions with sections >>> you can put FF in its own section. On the PIC33FJ128GP802 >>> you can do this. >>> >>> p33FJ128GP802.gld: >>> .text : >>> { >>> *(.init); >>> *(.user_init); >>> KEEP (*(.handle)); >>> KEEP (*(.isr*)); >>> } >program >>> >>> >>> ffcode 0x400 : >>> { >>> *(ffcode); >>> } >program >>> >>> libs 0x11000 : >>> { >>> *(.libc) *(.libm) *(.libdsp); /* keep together in this order */ >>> *(.lib*); >>> } >program >>> >>> usercode : >>> { >>> *(usercode); >>> } >program >>> >>> And then define the section if the FF source code. >>> >>> ff.s: >>> ; Start of code ! >>> ;.text >>> .section ffcode, code >>> ;;; ************************************* >>> >>> Then you have to use the large memory model to compile the C code >>> and use call instead rcall to call the library and C functions. >>> cinit is not needed. >>> >>> >>> Mike >>> >>> On 09.06.2015 18:53, om1zz wrote: >>>> I've modified the linker script and it seems it places the stuff properly: >>>> >>>> I took all the xc16 libs off the first section, and placed them into a new "libs" section at a specific address (here an example 0x4000 but it shall be 0x11000) for all the xc16 math float/double libs, and after the libs section there is the new "userfunc" section where all the new Cfunctions will come. >>>> >>>> >>>> /* >>>> ** User Code and Library Code >>>> ** >>>> ** This section must not be assigned to __CODE_BASE, >>>> ** because CodeGuard(tm) sections may be located there. >>>> ** >>>> ** Note that input sections *(.text) are not mapped here. >>>> ** The best-fit allocator locates them, so that .text >>>> ** may flow around PSV sections as needed. >>>> */ >>>> .text : >>>> { >>>> *(.init); >>>> *(.user_init); >>>> KEEP (*(.handle)); >>>> KEEP (*(.isr*)); >>>> } >program >>>> >>>> >>>> /* >>>> ** User-Defined Section in Program Memory >>>> ** >>>> ** note: can specify an address using >>>> ** the following syntax: >>>> ** >>>> ** usercode 0x1234 : >>>> ** { >>>> ** *(usercode); >>>> ** } >program >>>> */ >>>> usercode : >>>> { >>>> *(usercode); >>>> } >program >>>> >>>> libs 0x4000 : >>>> { >>>> *(.libc) *(.libm) *(.libdsp); /* keep together in this order */ >>>> *(.lib*); >>>> } >program >>>> >>>> userfunc : >>>> { >>>> *(userfunc); >>>> } >program >>>> >>>> >>>> And you need to tell where to place your Cfunction: >>>> >>>> __attribute__((section("userfunc"))) >>>> double Ctest ( int degree_x) {... >>>> >>>> >>>> And map file shows: >>>> .. >>>> 0x0025e4 build/default/production/_ext/1360937237/ff-pic24-30-33.o:MEMQADDR_N >>>> 0x002600 build/default/production/_ext/1360937237/ff-pic24-30-33.o:lastword >>>> 0x002800 build/default/production/_ext/1360937237/ff-pic24-30-33.o:KERNEL_END >>>> 0x004000 _acos >>>> 0x004000 _acosl >>>> .... >>>> 0x0057a0 _fmodl >>>> 0x0057a8 _fmodf >>>> 0x0057ac __fmodrem >>>> 0x00584a __dmodrem >>>> 0x00591a _Ctest >>>> >>>> Now it needs to be tested with a larger PIC. >>>> Igor >>>> >>>> >>>> ______________________________________________________________ >>>>> Od: Mikael Nordman <mik...@fl...> >>>>> Komu: <om...@vo...>, <fla...@li...> >>>>> Datum: 09.06.2015 14:06 >>>>> Předmět: Re: [Flashforth-devel] Fwd: Re: C functions/libs at 0x11000 and up >>>>> >>>>> You need to modify the linker script to move relevant sections to a memory region starting at 0x11000 >>>>> >>>>> Sent from my LG Mobile >>>>> >>>>> ------ Original message------ >>>>> >>>>> From: om1zz >>>>> >>>>> Date: Tue, 09/06/2015 13:24 >>>>> >>>>> To: fla...@li...; >>>>> >>>>> Subject:Re: [Flashforth-devel] Fwd: Re: C functions/libs at 0x11000 and up >>>>> >>>>> dspic33EP512MC502 (and friends) seems to be a good candidate for such a setup. Now, how to push the C stuff and libs up there. I. >Note that FF also uses a flash area for the EEPROM emulation. >For 128 Kb and larger devices it is placed at 0x10000-0x10fff in flash. >You could place the c-code and libs at 0x11000 and up. >There is also some unused flash space in 0x10000 - RAMSIZE upto 0xffff. > >For smaller devices the EEPROM emulation is placed inside the FF core >dictionary area. ------------------------------------------------------------------------------ _______________________________________________ Flashforth-devel mailing list Fla...@li... https://lists.sourceforge.net/lists/listinfo/flashforth-devel >>>>> >>>>> ---------- >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> >>>>> >>>>> ---------- >>>>> >>>>> _______________________________________________ >>>>> Flashforth-devel mailing list >>>>> Fla...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/flashforth-devel >>>>> >>> >>> ------------------------------------------------------------------------------ >>> _______________________________________________ >>> Flashforth-devel mailing list >>> Fla...@li... >>> https://lists.sourceforge.net/lists/listinfo/flashforth-devel >>> >> >> ------------------------------------------------------------------------------ >> _______________________________________________ >> Flashforth-devel mailing list >> Fla...@li... >> https://lists.sourceforge.net/lists/listinfo/flashforth-devel >> > >------------------------------------------------------------------------------ >_______________________________________________ >Flashforth-devel mailing list >Fla...@li... >https://lists.sourceforge.net/lists/listinfo/flashforth-devel > |