This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Mailbox Problem

Dear all
When I change the priority of job2 to 1 the job2 can get the mail, but when I increase its priority it cannot get the mail. Do you have any idea what’s wrong with my code?

#include <LPC17xx.H>
#include <RTL.H>
#include <string.h>


int    cnt1,cnt2;
OS_TID tsk1,tsk2;
static U64 stk1[400/8];
static U64 stk2[400/8];
static U64 stk3[400/8];

typedef struct {
        char msg[20];
}message;
os_mbx_declare (MsgBox, 1);
_declare_box(mpool,sizeof(message),1);



__task void job1 (void);
__task void job2 (void);
__task void jobhigh (void);

__task void jobhigh(void)
{
        while(1)
        {
        os_dly_wait (1);
        }
}
__task void job1 (void) {

        message *mptr;

        mptr=_alloc_box (mpool);
        mptr->msg[0]='t';
        mptr->msg[1]='e';
        mptr->msg[2]='s';
        mptr->msg[2]='t';
        os_mbx_send (MsgBox, mptr, 0xffff); /* Send the message to the mailbox     */
        while (1)
        {
        os_evt_wait_or (0x0001, 5);
        cnt1++;
        }
}

__task void job2 (void) {
        message *rptr;
        os_mbx_wait (MsgBox, (void **)&rptr, 0xffff); /* wait for the message    */
        LPC_GPIO0->FIOPIN=rptr->msg[0];
        _free_box (mpool, rptr);           /* free memory allocated for message  */
        while (1)
        {
        os_evt_set (0x0001, tsk1);
        cnt2++;
        }
}

__task void init (void) {

  tsk1=os_tsk_create_user (job1, 1, &stk1, sizeof(stk1));
  tsk2=os_tsk_create_user (job2, 2, &stk2, sizeof(stk2));
  os_tsk_create_user(jobhigh,3,&stk3,sizeof(stk3));
  //init box
  _init_box (mpool, sizeof (mpool), sizeof (message));
  //init mail box
  os_mbx_init (MsgBox, sizeof (MsgBox));
  os_tsk_delete_self ();
}
int main(void)
{
        SystemInit();
        os_sys_init(init);                        /* Initialize RTX and start init */
}

  • Without looking too much at your code: What is the reason that you totally refuses to check return values from your function calls?

    If you get an error from a call, you will never know, so you will never know if you have found a bug you need to take a closer look at.