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
