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
