首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

感受面向对象编程的魅力(uCosII C++类封装篇)(2)

感受面向对象编程的魅力(uCosII C++类封装篇)(2)

/*
// t2任务运行函数。
// 功能:无限等待信号量t2WaitEvent,当有信号时引发1秒蜂鸣器长鸣,其后恢
// 复t1任务,任务t2再次自身进入信号量t2WaitEvent的无限等待状态。
*/
void t2Run(void *p)
{
    INT8U err = 0;
   
    while(1)
    {
        t2WaitEvent.Pend(0,&err);

        buzz.Clear();
        CuCos::TimeDlyHMSM(0,0,1,0);
        buzz.Set();
        
        CuCos::TimeDlyHMSM(0,0,0,50);
        
        t1.Resume();
    }
   
    p = p;
}
/*
// t3任务运行函数。
// 功能:简单的一秒间隔led1闪烁。
*/
void t3Run(void *p)
{
    static CGPIO led1("P0.22",1);
   
    while(1)
    {
        led1.Set();
        CuCos::TimeDlyHMSM(0,0,1,0);
        led1.Clear();
        CuCos::TimeDlyHMSM(0,0,1,0);
    }
   
    p = p;
}

/*
// 为求原汁原味体现一个task对象的封装,下面设计一个子类实现一个特定任务
// 的处理,在此我们可以认为一个任务就是一个子系统,通过一个子类表现一个
// 特有任务的具体属性和行为,注意这种设计方法与传统的面向对象编程模式是
// 有区别的。子系统是一个有自主能力主体,例如在MyTask子系统中我们有两
// 个IO资源m_key1和m_led4分别对应着电路板上的按键Key1和发光二极管Led4,
// 通过检查key1按键状态控制led4的二值状态(亮/灭)。重载基类了Run函数为
// 求体现类的封装特性及表现一个任务的内聚能力,它是一个强制的运行接口,
// 当任务启动时便能自动地从重载的Run函数开始运行(具体调用的中转过程在
// 基类中已经实现)。
*/
class CMyTask : public CTask    // 注意这里的派生关系!!!
{
public:
CMyTask(INT32U StkSize) : CTask(StkSize),m_key1("P0.16",0),m_led4("P0.25",1,0)
    {
        // 注意带参数的构造处理方法!!!
    }
   
protected:
    virtual void Run(void *p);    // 需要重载Run()函数实现任务执行
   
private:
// 这是任务用到的一些资源定义,当然添加子系统的其他的属性和方法也是允许的
    CGPIO m_key1;
    CGPIO m_led4;
};
/*
// t4任务运行函数。
// 通过函数重载实现重写Run函数,该函数也就是任务运行函数。
// 功能:通过检查key1按键状态控制led4的二值状态(亮/灭)。
*/
void CMyTask::Run(void *p)                    // Run函数将会被uCosII系统自动运行!
{
    while(1)
    {
        if(m_key1.GetStatus() == 0)            // 判断按键是否按下
        {
            if(m_led4.GetStatus() == 0)
            {
                m_led4.Set();
            }
            else
            {
                m_led4.Clear();
            }
            
            while(m_key1.GetStatus() == 0)
            {
                CuCos::TimeDly(20);            // 等待按键释放
            }
            
        }
        else
        {
            CuCos::TimeDly(10);
        }
    }
   
    p = p;
}
继承事业,薪火相传
返回列表