打印

学习状态机和事件,怎样设计这个状态机?

[复制链接]
1608|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zealane|  楼主 | 2008-2-20 15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
思路是这样的:
开辟2个发送缓冲区0,1.
中断发送

如果缓冲区均为空,则将数据填入缓冲区0,开启发送。
如果缓冲区0正在发送,则将数据填入缓冲区1.
如果缓冲区1正在发送,则将数据填入缓冲区0.
如果要将数据填入缓冲区0时,发现缓冲区0的数据还没有发送完毕,则等待缓冲区0发送完毕,再填入缓冲区0.
如果要将数据填入缓冲区1时,发现缓冲区1的数据还没有发送完毕,则等待缓冲区1发送完毕,再填入缓冲区1.

请指教


相关帖子

沙发
xwj| | 2008-2-20 18:30 | 只看该作者

做成循环队列即可

使用特权

评论回复
板凳
happystar| | 2008-2-20 19:56 | 只看该作者

同意xwj

在每个缓冲对首和队尾各加个指针(前驱和后继),构成双向循环队列

使用特权

评论回复
地板
armecos| | 2008-2-20 22:10 | 只看该作者

画出状态转移图就清楚了,

                 ----------
                 | 空闲态 |
                 ----------
           -------   |    S0
           |     |   V
   BUF0未  |   --------------
   发送完  V   | BUF0发送态 |<------
           |   --------------      |
           |     |   |    S1       |
           -------   | 写BUF0转S2态|
                     V             |
           -------   |             |
           |     |   |             |
   BUF1未  |   --------------      |写BUF1转S1态
   发送完  V   | BUF1发送态 |-------
           |   --------------
           |     |        S2
           -------

    本程序需要如下变量:状态号state(S0、S1、S2),BUF0发送完标志(buf0_txdone),BUF1发送完标志(buf1_txdone),BUF0和BUF1缓冲区(buf0[],buf1[])。
    
    刚开始,程序处在空闲状态S0,buf0_txdone = buf1_txdone = 0发送完标志均为“发送完”。先判断BUF0是否发送完,若未发送完则等待,否则写BUF0并转S2态。在S2态判断BUF1是否发送完,若未发送完则等待,否则写BUF1并转S1态。
    
    关于状态机及消息的更详细文档见:
    状态机和消息的相关文档

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

249

帖子

1

粉丝