2959|1

7233

帖子

192

TA的资源

五彩晶圆(高级)

楼主
 

课后练习二十三之 UCOS 行为同步 [复制链接]

课后练习二十三之 UCOS 行为同步

1. 行为同步

摘自周慈航老师的书)

 一个任务的运行过程需要和其他任务的运行配合,才能得到预定的效果。任务之间的这种动作配合和协调关系称为“行为同步”。

2.两个任务之间的双向同步

(摘自周慈航老师的书)

通信的双方相互制约,生产者通过提供消息来同步消费者,消费者通过回复消息来同步生产者,即生产者必须得到消费者的回复后才能进行下一个消息的生产。这种运行方式称为“双向同步”,它使生产者的生产速度收到消费者的反向控制,达到产销平衡的理想状态,双向同步主要功能为确认每次通信均能成功,没有遗漏。

 

一种简单的双向同步过程称为“交汇”,任务A在交汇点向任务B发消息,并等待任务B的回复消息,任务B在交汇点等待任务A发来消息,在获得消息后再向任务A回复消息,交汇点就是双方的同步点,不管谁先到达交汇点,都必须完成一次双向同步过程才能继续执行。

 

 

3.应用-两个任务双向同步

按键按下,发送消息,LED2亮,等待回复消息,若有回复,LED2灭。

任务1等待按键发送消息,收到按键消息,LED1亮,发送回复消息。

(高手飘过,本人菜鸟,请多多指教)

 

课后练习二十三之UCOS 行为同步.pdf (69.63 KB, 下载次数: 73)

 

[ 本帖最后由 常见泽1 于 2012-6-30 07:21 编辑 ]
 
点赞 关注

回复
举报

7233

帖子

192

TA的资源

五彩晶圆(高级)

沙发
 

 

4. user.c(部分程序)

  1. #include "includes.h"

    OS_EVENT *SeMbox,*AckMbox;
    OS_STK Task2Stk[TASK_STK_SIZE];
    OS_CPU_SR cpu_sr;
    INT8U err;

    void delay_1ms(void)
    {
    unsigned int i;
    for (i=0;i<1140;i++);
    }

    void delay_nms(unsigned int n)
    {
    unsigned int i=0;
    for (i=0;i<n;i++)
    delay_1ms();
    }

    void Task1(void *pdata)
    {
    pdata = pdata; // 无任何意义,防止编译器报警

    P1DIR |= BIT0 + BIT6; //LED1 LED2设为输出
    P1OUT &= ~BIT0;
    P1OUT &= ~BIT6;

    SeMbox = OSMboxCreate((void *)0); //创建消息邮箱的函数
    AckMbox = OSMboxCreate((void *)0); //创建回复邮箱

    OSTaskCreate(Task2, (void *)0, &Task2Stk[TASK_STK_SIZE - 1], 6);//在任务1里创建任务2


    while (1) //无限循环
    {
    OSMboxPend(SeMbox,0,&err); //等待消息

    P1OUT |= BIT0; //灯亮
    OSMboxPost(AckMbox,(void *)1); //发送信号 执行任务调度
    delay_nms(200);
    P1OUT &= ~BIT0; //灯灭

    delay_nms(200);
    }
    }

    void Task2(void *pdata)
    {
    pdata = pdata; //使用一下pdata参数,防止编译警告
    while (1)
    {
    delay_nms(10);
    //OS_Sched();
    if((P1IN & 0x08)!=0) continue;//按键没有按下
    else
    {
    delay_nms(10);
    OSMboxPost(SeMbox,(void *)1); //发送消息
    P1OUT |= BIT6; //LED2灯亮
    delay_nms(200);
    OSMboxPend(AckMbox,0,&err); //等待回复
    P1OUT &= ~BIT6; //灯灭
    delay_nms(200);
    }
    }
    }


复制代码

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
Microchip 直播|利用motorBench开发套件高效开发电机磁场定向控制方案 报名中!
直播主题:利用motorBench开发套件高效开发电机磁场定向控制方案
直播时间:2025年3月25日(星期二)上午10:30-11:30
快来报名!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表