I imagined that you probably knew the link :-)
But as you wrote LDFLAGS instead of PFLAGS I insisted.

Anyway, it is weird... it works fine for me.

My guess is that there could be anything wrong with the linker and my
five cents would be to only include this 3 lines in the Makefile :
> COMPONENT=FloodingC
> include $(MAKERULES)
> PFLAGS += path_to_C_source/source.c

Did you modify your Makefile in such a way? I mean, removing all
LDFLAGS and everything else and just keeping this 3 lines, and nothing
else?






On Thu, Jan 13, 2011 at 5:57 PM, Pedro Nunes <[email protected]> wrote:
> Hello Sergio.
> First of all, thank you for your help. However, I did also checked that
> thread and tried it. It didn't work.
> I think I'll just port my C functions to a nesC component.
> Thank you anyway.
> Regards,
> Pedro Nunes
>
> On Wed, Jan 12, 2011 at 10:30 AM, Sergio Valcarcel <[email protected]>
> wrote:
>>
>> Hi Pedro,
>>
>> in another mail-thread there are explained two ways of calling C
>> functions from a nesC application. Check this:
>>
>> http://www.mail-archive.com/[email protected]/msg35149.html
>>
>> The quick & dirty way is embedding the C function into the nesC file.
>> I did it and works properly, but since it is not very flexible nor
>> scalable I moved to the second option.
>>
>> The second option means to declare the function in a header file
>> "source.h" and to indicate that the "source.c" file must be compiled
>> into the Makefile as "PFLAGS+=path/to/source.c".
>>
>> In your case, I would remove the LDFLAGS and just try this Makefile:
>>
>> "
>> COMPONENT=FloodingC
>> include $(MAKERULES)
>>
>> PFLAGS += path_to_C_source/source.c
>> "
>>
>> I hope it helps!
>> Cheers!
>> Sergio
>>
>>
>>
>>
>> On Wed, Jan 12, 2011 at 5:57 AM, Pedro Nunes <[email protected]> wrote:
>> > Hi all.
>> > I'm also trying to use a C function inside my nesC application but
>> > there's a
>> > problem I can't solve.
>> > I edit the Makefile like David said:
>> > ------------------
>> > COMPONENT=FloodingC
>> > include $(MAKERULES)
>> > LDFLAGS=/opt/tinyos-2.1.1/tos/system/sha1.o
>> > /opt/tinyos-2.1.1/tos/system/sha1.c: /opt/tinyos-2.1.1/tos/system/sha1.h
>> > $(CC) -o /opt/tinyos-2.1.1/tos/system/sha1.o
>> > /opt/tinyos-2.1.1/tos/system/sha1.c
>> > ------------------
>> > But whenever I try to build my application I always get this warning:
>> > "gcc: /opt/tinyos-2.1.1/tos/system/sha1.o: linker input file unused
>> > because
>> > linking not done"
>> > I know this is happening because when I compiled sha1 I did "gcc -c
>> > sha1.c"
>> > since sha1.c doesn't have a main function. But that's the purpose of it.
>> > I
>> > don't want to run it as a stand-alone program. I just want to use it as
>> > a
>> > library.
>> > This warning will later lead me to this when running my simulation:
>> > ------------------
>> > Traceback (most recent call last):
>> >   File "simulation.py", line 3, in <module>
>> >     from TOSSIM import *
>> >   File ".../Flooding/src/TOSSIM.py", line 7, in <module>
>> >     import _TOSSIM
>> > ImportError: .../Flooding/src/_TOSSIMmodule.so: undefined symbol:
>> > SHA1Input
>> > ------------------
>> > Does anyone know a way to fix this?
>> > Thank you in advance.
>> > Regards,
>> > Pedro Nunes
>> >
>> >>OK! now it works, but only in simulation!!!
>> >>I tried to edit my makefile but without success!
>> >>How can I solve this problem?
>> >>Thank you!
>> >>2008/1/31, AIGroup <[EMAIL PROTECTED]>:
>> >>>
>> >>> Hi David,
>> >>>
>> >>> before all thank you for your help.
>> >>> I tried to edit my files as you wrote, but I yet have problems.
>> >>> I edited my nesc file as follows:
>> >>> -----
>> >>> #include "Timer.h"
>> >>> #include "Hello.h" //<------ I included the header file here
>> >>>
>> >>> module BlinkC
>> >>> {
>> >>>   uses interface Timer<TMilli> as Timer0;
>> >>>   uses interface Timer<TMilli> as Timer1;
>> >>>   uses interface Timer<TMilli> as Timer2;
>> >>>   uses interface Leds;
>> >>>   uses interface Boot;
>> >>> }
>> >>> implementation
>> >>> {
>> >>>   event void Boot.booted()
>> >>>   {
>> >>>     call Timer0.startPeriodic( 250 );
>> >>>     call Timer1.startPeriodic( 500 );
>> >>>     call Timer2.startPeriodic( 1000 );
>> >>>   }
>> >>>
>> >>>   event void Timer0.fired()
>> >>>   {
>> >>>      Hello();         //<-------------This is the function call to
>> >>> Hello()
>> >>>      //dbg("BlinkC", "Timer 0 fired @ %s.\n", sim_time_string());
>> >>>     //call Leds.led0Toggle();
>> >>>   }
>> >>>
>> >>> --------
>> >>> The C files are these:
>> >>> -----------
>> >>> //Hello.h
>> >>> #ifndef HELLO_H
>> >>> #define HELLO_H
>> >>>
>> >>> void Hello();
>> >>>
>> >>> #endif
>> >>> ---------
>> >>> #include "Hello.h"
>> >>>
>> >>> void Hello()
>> >>> {
>> >>>     printf("\nHELLO!\n");
>> >>> }
>> >>> -------------
>> >>> and my Makefile is the following:
>> >>> COMPONENT=BlinkAppC
>> >>> LDFLAGS = Hello.o
>> >>> Hello.c: Hello.h
>> >>>     $(CC) -o Hello.o Hello.c
>> >>> include $(MAKERULES)
>> >>> ---
>> >>> where $(CC)... is "tabbed"
>> >>> So, when I run "make micaz sim" this error occurs:
>> >>> ---------
>> >>> [EMAIL PROTECTED]:/opt/tinyos-2.x/apps/ImportC$ make micaz sim
>> >>> mkdir -p build/micaz
>> >>>   placing object files in build/micaz
>> >>>   writing XML schema to app.xml
>> >>>   compiling BlinkAppC to object file sim.o
>> >>> ncc -c -shared -fPIC -o build/micaz/sim.o -g -O0 -tossim
>> >>> -fnesc-nido-tosnodes=1000 -fnesc-simulate
>> >>> -fnesc-nido-motenumber=sim_node\(\)   -finline-limit=100000 -Wall
>> >>> -Wshadow
>> >>> -Wnesc-all -target=micaz -fnesc-cfile=build/micaz/app.c -board=micasb
>> >>> -DIDENT_PROGRAM_NAME=\"BlinkAppC\" -DIDENT_USER_ID=\"penguin\"
>> >>> -DIDENT_HOSTNAME=\"penguin-laptop\" -DIDENT_USER_HASH=0xdef7cfbeL
>> >>> -DIDENT_UNIX_TIME=0x47a18a21L -DIDENT_UID_HASH=0x77ab7dfaL
>> >>> -Wno-nesc-data-race BlinkAppC.nc Hello.o  -fnesc-dump=components
>> >>> -fnesc-dump=variables -fnesc-dump=constants -fnesc-dump=typedefs
>> >>> -fnesc-dump=interfacedefs -fnesc-dump=tags -fnesc-dumpfile=app.xml
>> >>> gcc: Hello.o: No such file or directory
>> >>> make: *** [sim-exe] Error 1
>> >>> -----
>> >>> How can I solve the problem???
>> >>> Thank you very much in advance for your precious help
>> >>> Regards,
>> >>>
>> >>> Roberto
>> >>>
>> >>>
>> >>> 2008/1/30, David Gay <[EMAIL PROTECTED]>:
>> >>> >
>> >>> > #include works fine, but, as in C, it's just textual inclusion (it
>> >>> > really is nothing complicated ;-)). So it's all as if you just
>> >>> > wrote:
>> >>> >
>> >>> > module ...
>> >>> > implementation
>> >>> > {
>> >>> > #ifndef C_CODE
>> >>> > #define C_CODE
>> >>> >
>> >>> > void Hello();
>> >>> >
>> >>> > #endif
>> >>> >
>> >>> >     event void Boot.booted()
>> >>> >     {
>> >>> >         call Timer0.startPeriodic( 250 );
>> >>> >     }
>> >>> >
>> >>> >     event void Timer0.fired()
>> >>> >     {
>> >>> >         Hello(); //Hello() is a function which is inside my C code
>> >>> >     }
>> >>> > }
>> >>> >
>> >>> > which therefore just declares Hello() as an internal function inside
>> >>> > BlinkC.
>> >>> >
>> >>> > In nesC, C functions must be declared before the
>> >>> > module/implementation
>> >>> > (or interface) part of a file. So what you wanted to do was:
>> >>> > /* nesC code*/
>> >>> > #include "c_code.h"
>> >>> > module ...
>> >>> > implementation
>> >>> > {
>> >>> >
>> >>> >     event void Boot.booted()
>> >>> >     {
>> >>> >         call Timer0.startPeriodic( 250 );
>> >>> >     }
>> >>> >
>> >>> >     event void Timer0.fired()
>> >>> >     {
>> >>> >         Hello(); //Hello() is a function which is inside my C code
>> >>> >     }
>> >>> > }
>> >>> >
>> >>> > On Jan 30, 2008 6:37 AM, AIGroup <[EMAIL PROTECTED]> wrote:
>> >>> > > I believed...
>> >>> > > include directive works well. I have problem to edit the Makefile
>> >>> > > in
>> >>> > order
>> >>> > > to compile also the C file.
>> >>> >
>> >>> > Yes, you then also of course need to compile and link with your C
>> >>> > code. Several ways to do that... The easiest in this case at least
>> >>> > is
>> >>> > probably to add
>> >>> >   LDFLAGS = c_code.c
>> >>> > to your Makefile, which should cause ncc to compile and link
>> >>> > c_code.c
>> >>> > with your nesC app. A slightly more traditional Makefile approach
>> >>> > would have you add
>> >>> >
>> >>> >   LDFLAGS = c_code.o
>> >>> >   c_code.c: c_code.h
>> >>> >       $(CC) -o c_code.o <your favourite flags> c_code.c
>> >>> >
>> >>> > to your Makefile... (don't cut & paste the text above, the character
>> >>> > before $(CC) needs to be a tab to keep make happy, in this email
>> >>> > it's
>> >>> > some spaces...)
>> >>> >
>> >>> > David Gay
>> >>> >
>> >>> >
>> >>> > >
>> >>> > >
>> >>> > > 2008/1/30, AIGroup <[EMAIL PROTECTED]>:
>> >>> > >
>> >>> > > > Hi all.
>> >>> > > > I would like to include some routines in my nesC code as follows
>> >>> > > (considering the BlinkApp for example):
>> >>> > > > /* nesC code*/
>> >>> > > > implementation
>> >>> > > > {
>> >>> > > >      #include "c_code.h"
>> >>> > > >
>> >>> > > >     event void Boot.booted()
>> >>> > > >     {
>> >>> > > >         call Timer0.startPeriodic( 250 );
>> >>> > > >     }
>> >>> > > >
>> >>> > > >     event void Timer0.fired()
>> >>> > > >     {
>> >>> > > >         Hello(); //Hello() is a function which is inside my C
>> >>> > > > code
>> >>> > > >     }
>> >>> > > > }
>> >>> > > > -------------------------
>> >>> > > > /*C code*/
>> >>> > > > /*c_code.h*/
>> >>> > > >
>> >>> > > > #ifndef C_CODE
>> >>> > > > #define C_CODE
>> >>> > > >
>> >>> > > > void Hello();
>> >>> > > >
>> >>> > > > #endif
>> >>> > > >
>> >>> > > > ---------------
>> >>> > > > /* c_code.c */
>> >>> > > >
>> >>> > > > #include "c_code.h"
>> >>> > > >
>> >>> > > > void Hello()
>> >>> > > > {
>> >>> > > >    printf("HELLO!\n")
>> >>> > > > }
>> >>> > > > ---------------
>> >>> > > > Compilation terminate with success, but if i try to execute a
>> >>> > simulation,
>> >>> > > this following error occurs:
>> >>> > > > undefined symbol: BlinkC$Hello
>> >>> > > > How can I solve this problem?
>> >>> > > > Thank you very much for your help!
>> >>> > > >
>> >>> > > >
>> >>> > > >
>> >>> > > >
>> >>> > >
>> >>> > >
>> >>> > > _______________________________________________
>> >>> > > Tinyos-help mailing list
>> >>> > > [email protected]
>> >>> > >
>> >>> >
>> >>> >
>> >>> > https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
>> >>> > >
>> >>> >
>> >>>
>> >>>
>> > _______________________________________________
>> > Tinyos-help mailing list
>> > [email protected]
>> > https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
>> >
>
>

_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to