首页 新闻资讯 技术资料 论坛 网站地图
嵌入式开发新闻 消费电子 IC设计 军工/航空航天 开发工具 汽车电子 嵌入式软件
电子元器件搜索:
IC库存(8958万) PDF资料(329万) IC价格 IC求购 资讯 技术资料
维库电子市场网是知名的电子元器件交易网站, 为电子生产企业提供IC库存和技术资料查询服务。
位置: 首页 > 详细信息
  嵌入式软件中的设计模式
出处:21ic 时间: 2007-08-24
mymcudream 发布于 2007-8-23 15:04:00
突然想做做一些嵌入式设计模式方面的小例子,希望大家多抛砖头!


    模式一:state
    应用范围:一些带有状态转换的工业控制软件中,如洗衣机,门禁
    代码示例:
enum STATE
{
    LOCK_STATE = 0,
    UNLOCK_STATE = 1,
};

enum EVENT_CODE
{
    KEY = 0,
    OUT = 1,
};

void Lock_Unlock_Change_Func(void)
{
   printf("Lock to unlock state.\n");
}

void UnLock_lock_Change_Func(void)
{
   printf("UnLock to lock state.\n");
}

struct STATE_EVENT
{
   int curstate;
   int eventcode;
   int nextstate;    
   void (*changefunc)(void);
};


struct STATE_EVENT state_table[] =
{
    {LOCK_STATE, KEY, UNLOCK_STATE, Lock_Unlock_Change_Func},
    {UNLOCK_STATE, OUT, LOCK_STATE, UnLock_lock_Change_Func},
};

static int currentstate = LOCK_STATE;

void State_Engine(int event)
{
     int i;

     for (i = 0; i < 2; i++)
     {
        if (currentstate == state_table[i].curstate
            && event == state_table[i].eventcode)
        {
            currentstate = state_table[i].nextstate;
            state_table[i].changefunc();
            return;
        }
     }
     printf("Aother thing happend\n");
}


int main(int argc, char* argv[])
{

    State_Engine(KEY);
    State_Engine(OUT);
    State_Engine(OUT);
    return 0;
}



yan2005 发布于 2007-8-24 12:36:00
在视频通信的过程中,通话的两方的拨号\通话\挂机等状态的转换当时也是用这种状态机模型来做的。


mymcudream 发布于 2007-8-24 14:15:00
,有空多交流.
其实我一直在想,嵌入式软件中能不能使用设计模式.



mymcudream 发布于 2007-8-24 14:17:00
struct observer
{
    void (*update)(void);
};


struct subject
{
    struct observer *observers[4];

    void (*addobserver)(struct subject *subject, struct observer *observer);
    void (*notify)(struct subject *subject);
};

void Subject_AddObserver(struct subject *subject, struct observer *observer)
{
    static int count = 0;
    
    if (count > 4)
    {
            return ;
    }

    subject->observers[count++] = observer;
}

void Subject_Notify(struct subject *subject)
{
    int i;

    printf("Subject Notify Thing\n");
    for (i = 0; i < 4; i++)
    {
        subject->observers[i]->update();
    }
}

void Subject_Construct(struct subject *subject)
{
    subject->addobserver = Subject_AddObserver;
    subject->notify      = Subject_Notify ;
}

void ObserverA_Update(void)
{
    printf("Observer A Update\n");
}

void ObserverB_Update(void)
{
    printf("Observer B Update\n");
}

void ObserverC_Update(void)
{
    printf("Observer C Update\n");
}

void ObserverD_Update(void)
{
    printf("Observer D Update\n");
}


void Observer_Construct(struct observer *observer, void (*update)(void))
{
    observer->update = update;
}



int main(int argc, char* argv[])
{
    struct observer observera;
    struct observer observerb;
    struct observer observerc;
    struct observer observerd;

    struct subject subject;

    Observer_Construct(&observera, ObserverA_Update);
    Observer_Construct(&observerb, ObserverB_Update);
    Observer_Construct(&observerc, ObserverC_Update);
    Observer_Construct(&observerd, ObserverD_Update);
  

   Subject_Construct(&subject);

    subject.addobserver(&subject, &observera);
    subject.addobserver(&subject, &observerb);
    subject.addobserver(&subject, &observerc);
    subject.addobserver(&subject, &observerd);

    subject.notify(&subject);


    return 0;
}




ketp 发布于 2007-8-24 21:23:00
代码写得不怎么样,只是为了使用模式而用模式。


关闭】 【打印
相关专题  
嵌入式软件
工业控制
电源系列
传感控制
医疗电子
存储器
军工/航空航天
接口电路
通信产品
嵌入式开发新闻
嵌入式硬件
IC设计
计算机外设
应用产品
综合电子技术
软件开发
测试测量
AD/DA
SOPC
安防产品
汽车电子
CPLD/FPGA
嵌入式系统
开发工具
消费电子

© 2007 百斯嵌入式开发网 网站地图