当手头遇到一个问题想寻找方案借鉴时,更大的问题其实是 不知道这是个什么问题(单片机从业者,发这里纯属希望有更多软件视野回复)
辛昕 2014-10-11 09:44:48 我们很习惯在别人提问的时候,扔出一句,去百度。
百度确实很伟大,但前提是你知道输入什么关键词。有时候仅仅只是不了解或者不知道 专有名词 就找不到可能非常成熟,人尽皆知的答案。
举个很简单的例子。
两三年前,刚毕业,做的一个项目很多处理是并发的,是普通的单片机C程序,不存在什么线程不线程(裸机C程序要实现线程,实现本身的代价可能要比使用线程的回报高得多)。
那个时候我处理 并发的套路 其实基本上就是 状态机 的套路。
简单的说就是,把与过程有关的量,绝大多数是各类标志位,以及需要记忆的数值,
还有状态本身(那时候的东西实质上有两套状态。),把这些东西定义成 模块或者函数里的静态变量,从而达到 记忆功能;
那时候我虽然听说过 状态机 这个名词,但具体有什么应用我并没有去看。
更不会想到我在做的事情其实都属于 状态机 范畴。
只把自己做的事情看成是 并发的、异步的函数。
直到很久以后的不久前我无意想看看,这才发现我干的事全都是状态机能完美解决的。
包括非常有用的 序列检测器(用在通信字节流的接收和解析上极其管用),以及 状态转移表;
同时也让我明白了以前做的模式里,哪里是导致失败的原因(状态量外泄,具体来说,我那会两套状态,一套来自上位机通信CMD,一套属于自己的运行状态(RUN),我本该做成CMD作为输入,RUN作为状态,那就是一个 米利状态机。)
但我那会根本没这种概念,结果两套状态相互缠绕,最后变成了一个可怕的怪兽,就那样被纠缠了几个月。
如果我能早一两年知道去看状态机,或者说我知道状态机的设计方法可以用在这里,那我该会省事多少?!
但有时候,差的就是这一步——百度上能搜的东西太多了,讲软件的书也太多了,有思想,有语法,还有模式(设计模式,这也是我现在开始看的东西)......有时候我们根本不知道自己手头要做的事情其实从属于什么概念?
于是似乎只能靠一点点积累,对名词,对相应问题的抽象?加之我本身是机械专业,写程序纯属半路出家。
如果只是这样,那就没什么可问的了。而且也是完全没办法。
显然,浏览群书是最好的办法。而这方面,一直以来我都希望借鉴其他领域程序开发的成熟方法,思想,用在我的单片机上。所以也有去看一些自己了解到的,比较经典的书。
但我知道去找这本书来看必然意味着我大概了解它会讲什么,是什么主题的,假如是我不知道的,我很可能会错过——因为看书花的时间也不少,更严重的是,一知半解的情况下试图应用起来,经常会造成很多乱子。
也许多沟通是更加有效的方式。
只是我是做单片机的/嵌入式的,不是你们想象那种动不动vxworks,linux的,有很多时候甚至不用ucos等,或者说它对于我是不可见的。
我面对的更多的是裸机程序。我身处的行业是机电行业,大家的软件素养都有限。
从他们那里我能听到许多关于机械,电子的见闻,而软件方面,有时却是我才是信息源。
所以我想,还是回到软件圈里吧。
把自己遇到的问题 原原本本 讲述出来 或者 稍加抽象,看看能不能对应到一些早已成熟的理论或者方法,或者是一个模式。