Subject:
|
Re: legOS Addressing - Packet Handler
|
Newsgroups:
|
lugnet.robotics.rcx.legos
|
Date:
|
Fri, 11 Aug 2000 23:02:03 GMT
|
Viewed:
|
1194 times
|
| |
| |
Thanks Eddie,
Sorry for posting a message I should have known the answer to. I'll have
a look at the semaphore example. If anyone knows of a good refence for
semaphore programming could they please let me know?Its taken me a
while to get into the swing of things, but I'm starting to really like this
environment.Now if I can just wrap it in CORBA, I'll have a project
finished ;-)
Colin
"Eddie C. Dost" wrote:
> > I have a very simple RCX legos program (which I've attached), that I'm having
> > difficulty with. I have compiled legOS with the default host address of 0 (0x00).
> > I am using WinLNP to send data to the RCX (simple short strings), but the RCX
> > will not recieve it.
> >
> > The IR icon on the LCD illuminates, but the LCP display does not change. I have
> > simplified my program to just write a simple string to the LCD upon recieving
> > data,
> > but this does not work either.. Can anyone tell me if my attached code is
> > incorrect,
> > I am addressing my packet to host id 0 (as compiled) and port 1 (according to my
> > handler).
>
> Take the sleep(1) out of the code!
>
> The function addressHandlerPortOne() is called from an interrupt, so
> you must not call any function which might cause a reschedule (which
> sleep() definitely does).
>
> You can do all this by having a separate task waiting for packets
> which is woken up by addressHandlerPortOne() with some semaphore.
> Look at legOS/kernel/program.c how this is done.
>
> Sleeping inside an interrupt will cause the legOS kernel to hang, this
> is why you don't see the change in the LCD. If you remove the sleep,
> all is well, and the program correctly listens at port 1 for packets.
>
> Hope this helps,
>
> > Thanks in advance,
> >
> > Colin Ryan.
> >
> > ----------------Code Begins--------------- (short and sweet)
> >
> >
> > #include <conio.h>
> > #include <unistd.h>
> > #include <string.h>
> > #include <lnp.h>
> >
> > #define PORT_ONE 1
> >
> > static int quit = 0; /*end program button*/
> >
> >
> > /*------------------------------ LNP Handling functions
> > -----------------------------*/
> >
> >
> > /*Packet Handler for packets addresses to local port number 1*/
> > void addressHandlerPortOne(const unsigned char* data, unsigned char length,
> > unsigned char src) {
> >
> > cputs("prt1");
> > sleep(1);
> > /*I did have code here to write out the recieved data, but even this simpe
> > code won't work*/
> > if (data[0] == 'q') quit = 1;
> > }
> >
> >
> > /*-----------------------------------------------------------------------------------*/
> >
> > /*------------------------------ Main Body of Execution
> > -----------------------------*/
> > /*-----------------------------------------------------------------------------------*/
> >
> > int main()
> > {
> >
> > //Assign a handling function to a particular port number:
> > lnp_addressing_set_handler(PORT_ONE, addressHandlerPortOne);
> >
> > cputs("Begin");
> >
> > while(!quit)
> > {
> > msleep(200);
> > }
> > return 0;
> > }
>
>
> Eddie C. Dost
> ecd@skynet.be
|
|
Message has 1 Reply: | | Re: legOS Addressing - Packet Handler
|
| (...) Semaphores: You said you installed Linux, try "man sem_post". Also kernel/program.c is a good reference for a semaphore use. A more complicated example is the tx_sem in kernel/lnp-logical.c and kernel/lnp.c. Eddie C. Dost ecd@skynet.be (24 years ago, 11-Aug-00, to lugnet.robotics.rcx.legos)
|
Message is in Reply To:
| | Re: legOS Addressing - Packet Handler
|
| (...) Take the sleep(1) out of the code! The function addressHandlerPortOne() is called from an interrupt, so you must not call any function which might cause a reschedule (which sleep() definitely does). You can do all this by having a separate (...) (24 years ago, 11-Aug-00, to lugnet.robotics.rcx.legos)
|
9 Messages in This Thread:
- Entire Thread on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
This Message and its Replies on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
|
|
|
|