[51单片机]

用RTX51 tiny 遇到一个返回值的问题,希望得到指点。

[复制链接]
795|7
手机看帖
扫描二维码
随时随地手机跟帖
小房|  楼主 | 2018-10-15 11:08 | 显示全部楼层 |阅读模式
job0 () _task_ 0  {                  
  os_create_task (1);                 /* start task 1                         */
  os_create_task (2);                 /* start task 2                         */
  os_create_task (3);                 /* start task 3                         */
  while (1)  {                        /* endless loop                         */
    counter0++;                       /* increment counter 0                  */
    os_wait (K_TMO, 5, 0);            /* wait for timeout: 5 ticks            */
  }
}

/******************************************************************************/
/*   Task 1 'job1':  RTX-51 tiny starts this task with os_create_task (1)     */
/******************************************************************************/
job1 () _task_ 1  {
  while (1)  {                        /* endless loop                         */
    counter1++;                       /* increment counter 1                  */
    os_wait (K_TMO, 10, 0);           /* wait for timeout: 10 ticks           */
  }
}

/******************************************************************************/
/*    Task 2 'job2':  RTX-51 tiny starts this task with os_create_task (2)    */
/******************************************************************************/
job2 () _task_ 2  {   
  while (1)  {                        /* endless loop                         */
    counter2++;                       /* increment counter 2                  */
    if ((counter2 & 0xFFFF) == 0)  {  /* signal overrun of counter 2*/
        os_send_signal (3);             /* to task 3                            */
        P2=os_clear_signal (3);     //为什么运行完这句之后P2==0x01?不是返回0吗         
    }
  }
}

/******************************************************************************/
/*    Task 3 'job3':  RTX-51 tiny starts this task with os_create_task (3)    */
/******************************************************************************/
job3 () _task_ 3  {
  while (1)  {                        /* endless loop                         */
    counter3++;
    os_wait (K_SIG, 0, 0);            /* wait for signal                      */
    counter3++;                       /* process overflow from counter 2      */
  }
}


仿真.bmp
新建位图图像.png

相关帖子

小房|  楼主 | 2018-10-15 16:27 | 显示全部楼层
不好意思重发了一张图。这个程序是rtx51tiny V2 里面自带的一个例程,我在os_send_signal (3); 后面加了一句 P2=os_clear_signal (3);
结果仿真时返回了1,这和帮助文档里的返回0不符。

另外把这两句互换一下位置,则P2==0x00,返回了0。按帮助文档里的描述是成功清除了信号标志。可是我os_send_signal (3);还没执行,
怎么能是成功了?
新建位图图像.gif

使用特权

评论回复
ayb_ice| | 2018-10-15 17:19 | 显示全部楼层
用变量去调试

使用特权

评论回复
小房|  楼主 | 2018-10-15 18:26 | 显示全部楼层

我定义了一个全局变量a替换了P2,运行到那里a==0x01;没有变化。

使用特权

评论回复
ningling_21| | 2018-10-15 18:58 | 显示全部楼层
小房 发表于 2018-10-15 18:26
我定义了一个全局变量a替换了P2,运行到那里a==0x01;没有变化。

a==0x01;

这是要赋值吗?

使用特权

评论回复
小房|  楼主 | 2018-10-15 19:23 | 显示全部楼层
本帖最后由 小房 于 2018-10-15 19:30 编辑
ningling_21 发表于 2018-10-15 18:58
a==0x01;

这是要赋值吗?

我意思是a的值是0x01.不是赋值。os_clear_signal (3)的返回值放到了a里面。a就等于0x01了。

使用特权

评论回复
ayb_ice| | 2018-10-16 08:39 | 显示全部楼层
小房 发表于 2018-10-15 19:23
我意思是a的值是0x01.不是赋值。os_clear_signal (3)的返回值放到了a里面。a就等于0x01了。
...

我看了源代码,结果是对的,可能说明没有更新

如果任务号无效返回-1,如果成功返回1(之前有效且清除),失败返回0

使用特权

评论回复
小房|  楼主 | 2018-10-16 09:50 | 显示全部楼层
ayb_ice 发表于 2018-10-16 08:39
我看了源代码,结果是对的,可能说明没有更新

如果任务号无效返回-1,如果成功返回1(之前有效且清除) ...

是啊,去清一个不存在的任务的信号标志,就会返回-1。
去清一个被发送了信号的存在的任务的信号标志,就返回1。
去清一个没有被发送了信号的存在的任务的信号标志,就返回0。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

1

粉丝