学习 命令模式 -C语言,嵌入式单片机上
来源:互联网 发布:木地板品牌 知乎 编辑:程序博客网 时间:2024/06/05 15:27
看了 feixiaoxing 的博客。感觉豁然开朗,写一下理解体会。
1. 编译改写,因为编译通不过
/////////////////////////////////////////////////////////////////////
//1.Post是一个结构体,2.包含一个函数指针do,3.这个函数的参数是这个结构体,(传进来的也是函数指针)
typedef struct OB_Post OB_Post;
typedef void (*do_) (OB_Post *pPost );
struct OB_Post {
do_ obDo;
};
//1.command是一个结构体,里面有一个万能指针,和一个函数指针(这个函数参数是Command)
typedef struct _Command
{
//void* pData;
OB_Post * pData;
void (*exe)(struct _Command* pCommand);
}Command;
//1.boss也是一个数据结构,包含command,并有一个执行函数(参数是自己)
typedef struct _Boss
{
Command* pCommand;
void (*call)(struct _Boss* pBoss);
}Boss;
#if 1
//定义了一个含command的函数,相当与把上面的行为放进去.这里就把action动作分离了出来
//这个函数执行的是pPost的函数,未定义,pPost的action也是分离的,同时可以发给command来执行
void post_exe(struct _Command* pCommand)
{
OB_Post * pPost;
//assert(NULL != pCommand);
if(pCommand ==NULL) return;
pPost=(OB_Post *)(pCommand->pData);
pPost->obDo(pPost);
//(Post*)(pCommand->pData)->do((Post*)(pCommand->pData));
//((OB_Post *)(pCommand->pData))->obDo((OB_Post *)(pCommand->pData));
return;
}
#endif
//boss的一个执行函数,执行command,里面的函数
void boss_call(struct _Boss* pBoss)
{
//assert(NULL != pBoss);
if(pBoss==NULL) return;
pBoss->pCommand->exe(pBoss->pCommand);
return;
}
2. 进行思考,在嵌入式哪可以用到,这是很多大神没有提到的
#if 0
void err1Action(OB_Post *pPost){/*风机开,压机关*/}
void err2Action(OB_Post *pPost){/*风机高速*/}
void err3Action(OB_Post *pPost){/*风机和压机都关*/}
OB_Post postErr1;
OB_Post postErr2;
OB_Post postErr3;
postErr1.obDo=err1Action;
postErr2.obDo=err2Action;
postErr3.obDo=err3Action;
Command err1Cmd;
Command err2Cmd;
Command err3Cmd;
err1Cmd->pData=&postErr1;
err2Cmd->pData=&postErr2;
err3Cmd->pData=&postErr3;
Boss heatBoss;
Boss coolBoss;
//制热老板的命令是err1Cmd, 执行
heatBoss->pCommand=err1Cmd;
heatBoss->call(&heatBoss);
coolBoss->pCommand=err3Cmd;
coolBoss->call(&heatBoss);
#endif
/*感觉这是解决boss这一层,不让他直接操作底层,有个分隔,但对我好像没有作用
假如有一个led灯,分1.短闪,2.长闪,3,三长一短,4长一短 命令。 这个好像是个好方法
这样可以增加很多闪烁方式。
因此这个方法适合命令很多,执行很麻烦的地方。要把麻烦的隔离出来.
如果压缩机,就开,关,故障,没有用。
*/
- 学习 命令模式 -C语言,嵌入式单片机上
- 单片机C语言学习
- 学习嵌入式C语言
- 单片机C语言学习-1
- 单片机的汇编语言与嵌入式C语言的比较
- 可在单片机上运行的机器学习算法KNN(C语言实现)
- 51单片机C语言学习杂记
- 怎样学习单片机的C语言
- 关于C语言学习单片机的论文
- 单片机C语言学习(菜鸟入门)
- 《嵌入式linux上的c语言编程实践》(亚嵌教材)学习笔记
- 学习嵌入式C语言相关书籍
- 嵌入式学习笔记-C语言(一)
- 嵌入式学习笔记-C语言(二)
- 嵌入式学习笔记-C语言(三)
- 学习嵌入式C语言相关书籍-
- 学习嵌入式C语言相关书籍
- DSP 嵌入式C语言学习总结
- Ajax的jsonp方式跨域获取数据
- ios之远程推送
- i2c驱动
- 匿名函数lanbda
- SpringMVC-------->Controller获得上传文件的绝对路径
- 学习 命令模式 -C语言,嵌入式单片机上
- 【Android】Tab页的实现,利用tabhost
- 【Splay】[SGU 187]Twist and whirl - want to cheat
- 算法-3个水桶8升水
- Java出现No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing
- 利用观察者模式实现data和ui的独立演化
- HDU--2087
- Android 编程下 Touch 事件的分发和消费机制
- Dynamics CRM2015 2015版本可用的OData Query Designer工具