Hi, Sergio.

I don't have any motes to work with, so I'm just interested on simulation.
Maybe that's the reason why it works out for you and not for me.

I think I'll just try to port the code to nesC.

Thank you for your help.

Regards,
Pedro Nunes

On Thu, Jan 13, 2011 at 8:32 PM, Sergio Valcarcel <[email protected]>wrote:

> I see you are compiling for TOSIM simulation, have you tried to
> compile for the real architecture?
>
> I am compiling for imote2 with :
>
> http://www.gaps.ssr.upm.es/es/investigacion/wsn/138-compiling-for-an-arm-architecture-imote2-tinyos
> ... and it is pretty straight forward.
>
> I am sorry, I have no more ideas...
>
> On Thu, Jan 13, 2011 at 8:48 PM, Pedro Nunes <[email protected]> wrote:
> > Sorry, Sergio.
> > I can't explain why the error occurs. I did everything as you said.
> > My Makefile (the component now is TestC because I created a new app just
> to
> > test this issue):
> > --------------------
> > COMPONENT=TestC
> > include $(MAKERULES)
> > PFLAGS += /opt/tinyos-2.1.1/tos/system/sha1.c
> > --------------------
> > Output of "make micaz sim":
> > --------------------
> > $ make micaz sim
> > mkdir -p simbuild/micaz
> >   placing object files in simbuild/micaz
> >   writing XML schema to app.xml
> >   compiling TestC to object file sim.o
> > ncc -c -shared -fPIC -o simbuild/micaz/sim.o -g -O0 -tossim
> > -fnesc-nido-tosnodes=1000 -fnesc-simulate
> > -fnesc-nido-motenumber=sim_node\(\) -fnesc-gcc=gcc -Wall -Wshadow
> -Wnesc-all
> > -target=micaz -fnesc-cfile=simbuild/micaz/app.c -board=micasb
> > -DDEFINED_TOS_AM_GROUP=0x22 --param max-inline-insns-single=100000
> > /opt/tinyos-2.1.1/tos/system/sha1.c -DIDENT_APPNAME=\"TestC\"
> > -DIDENT_USERNAME=... -DIDENT_HOSTNAME=... -DIDENT_USERHASH=0xbc727f80L
> > -DIDENT_TIMESTAMP=0x4d2f55f0L -DIDENT_UIDHASH=0x0ce78624L
> > -Wno-nesc-data-race TestC.nc   -fnesc-dump=components
> -fnesc-dump=variables
> > -fnesc-dump=constants -fnesc-dump=typedefs -fnesc-dump=interfacedefs
> > -fnesc-dump=tags -fnesc-dumpfile=app.xml
> > gcc: cannot specify -o with -c or -S with multiple files
> > make: *** [sim-exe] Error 1
> > --------------------
> > Best regards,
> > Pedro Nunes
> > On Thu, Jan 13, 2011 at 6:38 PM, Sergio Valcarcel <[email protected]>
> > wrote:
> >>
> >> Sorry Pedro,
> >>
> >> I do not understand.
> >>
> >> If your Makefile only includes the 3 lines I mentioned above in your
> >> Makefile (e.g:
> >>
> >> > COMPONENT=FloodingC
> >> > include $(MAKERULES)
> >> > PFLAGS += path_to_C_source/source.c
> >>
> >> ... and nothing else)
> >>
> >> , then you are only using make default rules, so you are not
> >> specifying either -c or -o rule. Furthermore, there is not any other
> >> file apart of "source.c".
> >>
> >> Are you sure that you are not calling any other Makefile?
> >>
> >>
> >>
> >>
> >>
> >> On Thu, Jan 13, 2011 at 7:23 PM, Pedro Nunes <[email protected]>
> wrote:
> >> > Hello, Sergio.
> >> > I hadn't done that yet.
> >> > But I tried now just the way you said and my error message remains:
> >> > "gcc: cannot specify -o with -c or -S with multiple files
> >> > make: *** [sim-exe] Error 1"
> >> > Thank you once again for your help! :)
> >> > Best regards,
> >> > Pedro Nunes
> >> > On Thu, Jan 13, 2011 at 5:14 PM, Sergio Valcarcel <
> [email protected]>
> >> > wrote:
> >> >>
> >> >> 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