脑浆不够用,寻求理论、方**上的帮助。

[复制链接]
12262|86
thankw 发表于 2007-11-23 10:47 | 显示全部楼层

看书

看书,谭浩强的C语言,看指向函数的指针,看结构体,要慢慢看,因为你完全没概念的,不要再想什么程序了,看完书就明白了,书上也有例子的,你得先相信书,再抛弃书。
王会锋 发表于 2007-11-23 11:46 | 显示全部楼层

是否可以先给我一份呀!谢谢了,我是一名新手。
linqing171 发表于 2007-11-23 13:03 | 显示全部楼层

回jetbo

回jetbo:
函数指针:State[CurrentState].Key1Function
然后
State[CurrentState].Key1Function();
就是调用这个函数了。


记得数字电路中的状态机就是 一个变量,在不同的外来输入信号的激励下可以有不同的变化吧? 像设计I2C的接口的时候,收到地址就进入收数据的状态,任何时候收到复位就进入复位状态。 TCP的协议要维持连接的各个状态。

实现起来似乎没有学过系统理论。
标记一下,明天来看。

ldyeah 发表于 2007-11-23 13:21 | 显示全部楼层

期待匠人老头的书~~~

看了下贴出来的部分
觉得不错~~
jetbo 发表于 2007-11-23 15:44 | 显示全部楼层

.

再厚着脸皮问一问^_^

函数指针:State[CurrentState].Key1Function

的这 State[CurrentState] 部份是什么?值怎么来?
好像State结构里没有CurrentState 这个啊

呵,偶的C没入门,但想弄明白,汗一个~~~
 楼主| qihao 发表于 2007-11-23 17:21 | 显示全部楼层

呵呵 上C语言课,我也听课

写法体现思想,  

 thankw  的示例有写大系统的功力了



    状态迁移和状态间上下文关联、时序(敌人狡猾,陷阱很多!),唉,不过这个不是状态机管的事了,归脑浆管。

    有一个例子用 开关门 来说 状态机 控制的自动化实现,很好,但不小心就是一个陷阱---门正在自动关的时候,有人又要进来,推了一把门。
    状态的多态性---同一个状态,可能是不同的动作激发的,这个时候要处理,还要分析该状态的激发者

-----不同动作激发的同一状态是不是该被裂解成不同的状态? 
-----或者应该定义为一个带参数的状态?(这个咋用C来写呢?问做过大系统的兄弟们)

thankw 发表于 2007-11-23 18:37 | 显示全部楼层

CurrentState

CurrentState就是你实际状态序号呀,也就是结构体数组的下标,只要你把状态分的够细,那么都可以用程序描述出来的。CurrentState是无符号char型的变量就有255种状态了,足够用了。
 楼主| qihao 发表于 2007-11-24 09:48 | 显示全部楼层

"状态分的够细" 唉,就是,真很麻烦

dld2 发表于 2007-11-24 09:57 | 显示全部楼层

关门的时候

状态就是closeing。如果要知道关门的进度,用其他数据变量来描述。
状态分得太细或者失去一般物理或逻辑意义,不好。
另外,如果事件发生,处理时不但要判断当前状态,而且要判断上一个状态,则不是一般意义的状态机。有可能状态定义有问题。
 楼主| qihao 发表于 2007-11-24 11:31 | 显示全部楼层

"状态分得太细或者失去一般物理或逻辑意义,不好。"

"状态分得太细或者失去一般物理或逻辑意义,不好。"   正确! 所以一直没有试图这样干,觉得这也太BT了, 但又没有思考出一个优美的逻辑联系出来。
 楼主| qihao 发表于 2007-11-24 11:38 | 显示全部楼层

~

所以想到是不是又一种思想,叫做 带参数的状态------有可能又形成一个子状态机。

这个对我的问题,描述也不精确,  好像应该是 有一个第一阶段,是一个状态机,进入第二阶段,有第二阶段的状态机, 进入稳定状态,一个状态机。  当然,期间有外部事件促成阶段间的迁移。
yewuyi 发表于 2007-11-24 11:43 | 显示全部楼层

状态机也要进行状态合并的……

很多人开始一听状态机,就直觉认为状态机是平面二维的,但根据俺的体会,状态机是多维的,否则状态机也没什么意义。


呵呵,其实IC设计中用状态机是最多的,例如24C02这样的IIC从器件~~
 楼主| qihao 发表于 2007-11-24 11:49 | 显示全部楼层

"状态机是多维的"

状态机是多维的---   唉,再度感慨自己数学智商了 

好像说到点子上了,容我想想
thankw 发表于 2007-11-24 19:10 | 显示全部楼层

呵呵,觉得你在这个上面花太多时间了。

呵呵,你第一要把整个过程弄明白,第二要把硬件驱动写好,第三才考虑程序架构的,第四就开始动手了,想太多没用,差不多就开始了。硬件没问题,软件随便改改,总能改好的,关键是硬件要调通,每一个器件都要保证正确工作。
 楼主| qihao 发表于 2007-11-24 20:33 | 显示全部楼层

有道理啊! thankw

俺又在非正道上跑太久了,   谢谢thanlw
gdpbeyond 发表于 2007-11-25 19:17 | 显示全部楼层

re

快,快,我要买!
yewuyi 发表于 2007-11-25 21:39 | 显示全部楼层

俺的认知和thankw正好相反……

程序结构是最关键的,至于具体的什么函数都是次要的,结构搞好了,函数随便写写都能跑通的……


哈哈哈哈……
 楼主| qihao 发表于 2007-11-25 21:50 | 显示全部楼层

关键是要进入状态!

先写驱动,可以促进自己进入状态,写驱动的时候,逐步也就是清理思路了,今天把程序结构彻底推翻了来,觉得自己前几天太冲动了,试图用一段通用代码搞定几个过程,又没有这么深的功力,老老实实的分成几个过程来写吧。
xwj 发表于 2007-11-25 22:16 | 显示全部楼层

呵呵,会跑是很关键,但你得先学会走!

 楼主| qihao 发表于 2007-11-26 23:54 | 显示全部楼层

程序大流程一换,一天跑出效果来了!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部