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
