发新帖本帖赏金 3.00元(功能说明)我要提问
返回列表
打印

事件驱动构架

[复制链接]
楼主: Simon21ic
手机看帖
扫描二维码
随时随地手机跟帖
41
keer_zu| | 2015-8-26 11:27 | 只看该作者 回帖奖励 |倒序浏览
yyy71cj 发表于 2015-8-26 11:18
难道这个你还有不解?想那大清:骑射乃满洲只根本。又想那大清:皇上万岁、江山永固。再想那 ...

这都哪跟哪啊

使用特权

评论回复
42
keer_zu| | 2015-8-26 16:54 | 只看该作者
yyy71cj 发表于 2015-8-26 16:49
你灵敏度什么时候变得这般粗糙了?豪言壮语与光辉理论,最后都停留在了空谈之中……,这是不 ...

:L 最近这是怎么了?

使用特权

评论回复
43
Simon21ic|  楼主 | 2015-8-28 11:23 | 只看该作者
本帖最后由 Simon21ic 于 2015-8-28 11:26 编辑

突然想到的,在轮询构架下的事件驱动,是否可以称为伪事件驱动?
轮询构架,是否可以认为是时间片系统的一种特例?
轮询构架中,要做低功耗的话,需要增加一个轮询任务,检测所有其他任务状态,当其他任务都处于等待状态时,就休眠。但是,如果有一个任务不在等待,那么其他在等待状态的任务也跟着一起轮询。

使用特权

评论回复
44
hunyuanqi| | 2015-8-30 10:39 | 只看该作者
"状态机轮询构架和状态机事件驱动构架"

这个话题以前有人讨论过,实质是轮询与调度之间的孰优孰劣问题。

轮询以状态机为主,用状态机来消化事件和消息,调度以事件为主,把事件分发给相应的消息处理状态机。

实际上两者是统一的,都是事件(或消息)驱动的编程架构。只不过是处理事件的实时性不同。

对于不需要实时处理的事件,可以用状态机轮询的方式来处理,事件被延时处理的时间就是轮询的时间;对于需要实时处理的事件,则需要用事件调度的方式,只要该类事件发生,马上分发给事件处理状态机去处理,这实质上也是合作式调度器和占先式调度器的区别,轮询是合作式调度,事件驱动是占先式调度。

使用特权

评论回复
45
hunyuanqi| | 2015-8-30 10:42 | 只看该作者
在编程框架的讨论中,状态机才是灵魂,傻孩子也说,状态机是万能语言,状态机即提供轮询的机制,又提供事件驱动的机制,是程序框架的实现者。

使用特权

评论回复
46
hunyuanqi| | 2015-8-30 10:45 | 只看该作者
讨论多任务编程,如果脱离了实时性的束缚,是没有意义的。
一个程序框架最重要的是区分非实时任务、软实时任务、硬实时任务。
非实时任务放在while(1)超循环,软实时任务放在tick中断中,硬实时任务放在高优先级的中断中,这种架构可以通吃,一切裸机编程架构。

使用特权

评论回复
47
hunyuanqi| | 2015-8-30 10:47 | 只看该作者
实际上上述的三种任务也对应非实时事件、软实时事件、硬实时事件,各种事件在上述的各个模块中解决。

使用特权

评论回复
48
hunyuanqi| | 2015-8-30 10:49 | 只看该作者
编程的精髓之一就是把一个任务分成三部分,非实时部分,软实时部分,硬实时部分,然后把这三部分放到上述的模块中,然后以信号量或事件的机制连接或通讯。

使用特权

评论回复
49
hunyuanqi| | 2015-8-30 10:56 | 只看该作者
基于现有的嵌入式操作系统的编程的缺点是:对于协作时操作系统,把非实时部分和弱实时部分统一了,补求的办法是把非实时部分放在空闲任务中;对于占先式操作系统,把弱实时部分和硬实时部分统一了,补求的办法是用任务的优先级来划分。

使用特权

评论回复
50
hunyuanqi| | 2015-8-30 10:58 | 只看该作者
对编程框架的真正挑战是:不用现有的嵌入式操作系统,采用裸机编程模式,如何把上述的三部分有机的稳定的结合起来。

使用特权

评论回复
51
Simon21ic|  楼主 | 2015-8-30 12:31 | 只看该作者
本帖最后由 Simon21ic 于 2015-8-30 12:33 编辑
hunyuanqi 发表于 2015-8-30 10:49
编程的精髓之一就是把一个任务分成三部分,非实时部分,软实时部分,硬实时部分,然后把这三部分放到上述的 ...

是的,清晰明了
我做的就是协作式内核,事件驱动的调度器,就是把事件从队列里取出,发给任务处理,没有事件就休眠。很普通的调度策略。
之所以发这个帖子,是因为看到不少说是事件驱动的构架里,还是在使用轮询的方法。就举了一个事件驱动,但不用轮询的构架。

使用特权

评论回复
52
racinglam| | 2015-8-31 00:47 | 只看该作者
其实很多物联网平台的协议是公开的,像京东云,机智云等,只是前提要有产品接入他们平台

使用特权

评论回复
53
Simon21ic|  楼主 | 2015-8-31 10:55 | 只看该作者
racinglam 发表于 2015-8-31 00:47
其实很多物联网平台的协议是公开的,像京东云,机智云等,只是前提要有产品接入他们平台 ...

京东云是公开的吗?
机智云我发了帖子,一直没人理,不知道是否已经做不下去了

使用特权

评论回复
54
racinglam| | 2015-8-31 11:39 | 只看该作者
本帖最后由 racinglam 于 2015-8-31 11:40 编辑
Simon21ic 发表于 2015-8-31 10:55
京东云是公开的吗?
机智云我发了帖子,一直没人理,不知道是否已经做不下去了 ...

楼主应该在做WIFI模块吧?
京东的可以参考这里,http://devsmart.jd.com/dev/guide?menu=cooperation#      的下载中心
其实就是tcp连接,使用json数据交互,具体的应用层要有产品合作与京东定协议,还有楼主的软件框架很好,现在硬件资料越来越丰富,嵌入式也需要有一个软件框架

使用特权

评论回复
55
racinglam| | 2015-8-31 11:45 | 只看该作者
机智云好像他们已经写好了模块的固件,所以好像没有公开云平台的协议

使用特权

评论回复
56
Simon21ic|  楼主 | 2015-8-31 21:28 | 只看该作者
racinglam 发表于 2015-8-31 11:39
楼主应该在做WIFI模块吧?
京东的可以参考这里,http://devsmart.jd.com/dev/guide?menu=cooperation#     ...

这个我知道,他们需要用到ssl的,但是,他们不会提供资料给我,也并不是所有人要用,就可以用的,门槛还是比较高的

使用特权

评论回复
57
lance_h| | 2015-8-31 22:52 | 只看该作者
使用switch结构开发,会使代码逻辑看起来复杂,因为单片机本身就是一条条指令顺序执行的。对开发人员要求较高,不仅开发,而且维护上。如果是一个功能库,想移植到阻塞代码上比较麻烦,移植到操作系统上也比较麻烦。PT线程确实是个好方法。

使用特权

评论回复
58
Simon21ic|  楼主 | 2015-9-1 00:41 | 只看该作者
本帖最后由 Simon21ic 于 2015-9-1 00:43 编辑
lance_h 发表于 2015-8-31 22:52
使用switch结构开发,会使代码逻辑看起来复杂,因为单片机本身就是一条条指令顺序执行的。对开发人员要求较 ...

你说的switch是事件驱动的方式吧?这个确实对开发人员要求比较高。不过PT一般不也是switch的实现方式吗?goto只有少数编译器支持的
开发上其实可以很灵活,2种方式根据方便程度选择,如果都很方便,就不用PT,逼近占的资源多一点点

使用特权

评论回复
59
kamen588| | 2015-9-2 09:17 | 只看该作者
hunyuanqi 发表于 2015-8-30 10:39
"状态机轮询构架和状态机事件驱动构架"

这个话题以前有人讨论过,实质是轮询与调度之间的孰优孰劣问题。

精辟

使用特权

评论回复
60
kamen588| | 2015-9-2 09:21 | 只看该作者
hunyuanqi 发表于 2015-8-30 10:45
讨论多任务编程,如果脱离了实时性的束缚,是没有意义的。
一个程序框架最重要的是区分非实时任务、软实时 ...

对于裸编程 硬实时任务放在高优先级的中断中,还必须保障中断的处理时间,不影响软实时的相应,否则只要上抢占式的操作系统了。个人理解。

使用特权

评论回复
发新帖 本帖赏金 3.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则