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

Reply via email to