范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

嵌入式开发工程师必备有限状态机

  有限状态机示意图(Finite State Machines)图片来源:flaviocopes.com
  作者 |  Peter Galan
  "
  获取有关使用C语言为嵌入式系统的有限状态机进行编程的帮助。
  "
  有限状态机(FSM)的定义是:描述特定(逻辑)过程的一系列事件和动作的数学模型。在工程实践中,你可以找到无数类似的过程,从简单的通过几个按钮控制电机的FSM, 到可以监控非常复杂的生产制造过程或航天飞机的复杂FSM 系统。
  我曾经为广泛应用于光通信领域的掺铒光纤放大器(EDFA)设计过固件。一个固件部分必须处理E DFA 的安全问题,如果设计不当,EDFA 可能会使用对人体有害的强激光。这似乎是一个常规的FSM 代码设计,但其结果却是一个非常复杂的、难以遵循和维护的冗长过程。需要一种不同的方法来实施FSM,这可能会引起嵌入式代码设计者的兴趣。
  有限状态机理论
  根据有限状态机理论,你可能会想起两种类型的FSM 表示,一种是Mealy 有限状态机,另一种是Moore 有限状态机。这两类FSM 都处理三组变量,一组输入变量X(k), 一组内部状态U(k)和一组输出变量Y(k)。这两类FSM 使用相同的转换函数δ 来映射U x X
  Mealy 和Moore FSM 的区别在于用于输出状态的第二个映射函数。Mealy 的输出状态映射函数λ 表示U x X   Y 映射,而Mooreλ 表示一个更简单的映射,从U   Y。从实现的角度来看,虽然Mo o re FSM 可能更简单,但Meal y FSM 也有其优势。例如, 与内部状态的数量相比,它可以有更多或不同的输出状态,而在Mo o re FSM 中,每个内部状态都与一个输出状态相关联。
  通用的Mealy FSM 可用下面的表格来表示:
  其中u k 列表示当前的内部状态,x k 行表示当前的输入状态。表格显示下一个内部状态(δ 映射)和相应的输出状态(λ 映射)。
  图1 :单级EDFA 安全状态图。
  图1 显示了FSM 另一种更常见的表达形式,即状态图。你可以看到一个完整的单级EDFA 安全序列状态图。
  每个EDFA 使用一个或两个(更常见的两级EDFA)激光泵,将能量提供给EDFA 内的特殊光纤线圈。通过放大器,该能量从上一个节点传输到下一个节点的光信号(光子) 放大。当连接E D FA 和其它节点的光纤断开并且检测到信号丢失(LO S)时,就会出现问题。这种情况必须立即处理,激光功率必须降低或完全切断。其它情况也需要立即关注。整个安全序列是E D FA 固件实施的一部分。
  FSM 的基本实施
  实现有限状态机(通常用于嵌入式控制软件),最好的编程语言是什么?答案可能是C 语言。还有许多其它更现代的、面向对象的编程语言,但C 语言就像嵌入式系统的"母语言"。一个经验丰富的嵌入式软件设计师, 如何在C 语言中实现这种FSM ?它很可能从这样一个函数开始:
  如果查看上面的代码,您可以看到条件(事件标志组合)如何在满足条件的情况下, 将c u r r State 变量从初始、禁用状态移动/ 更改为下一个状态。每次这样的内部状态变化,都会触发一个特定动作,在某些情况下, 输出状态会触发多个动作。
  到目前为止一切都还正常进行,但随着整个过程变得更加复杂,i f- e l s e 决策语句也变得更加复杂(而且嵌套更深)。然后,如果需要修改任何if-else 决策语句,它可能会影响诸多其它语句。接下来,整个处理功能将需要反复测试。两级E D FA 需要两个类似的FSM 功能,再加上另一个控制A D FA 放大器的FSM 功能,需要做很多工作。
  改进FSM的实现
  还有另一种方法来表达有限状态机:通过状态转换表(STT) 来实现。STT 是Mealy FSM 描述的另一种形式。这样的表通常有四列,行数根据需要确定。每行描述从当前状态到下一状态的转换。转换由事件(一个或多个事件标志的组合)触发。该动作描述了与转换相关的所有动作。例如,如下是一个STT(只是它的片段),对应于图中所示的状态图。
  为什么这样的表示比状态图更好?因为它可易于实现。下面,来看看如何用C 语言来实现。
  一位经验丰富的软件设计师, 会将FSM 代码拆分成几个源文件, 并从FSM_ example.h 头文件开始,其中包含特殊类型的定义和所有函数的原型。下面是此类头文件的一个示例。
  对于经验不足的程序员来说,前两个定义可能值得解释。每个函数定义一个特定函数指针的名称。在C# 中, 这些定义与使用delegate 关键字的定义相同。它们是C 语言编程中非常强大的工具,使C 程序能够像使用C# 这样面向对象的编程语言,更方便地编写程序。除了最后一个函数外,其它所有函数都应该非常清楚。一类是F_FSM_EVENT_T 类型的函数,它们用于测试某些系统状态(标志),并返回true 或false。请注意IsLosON() 和IsLosOFF()等"成对"的函数。在这种特殊情况下,只需测试一个:通过硬件(H/W)报告的状态/ 标志, 来测试输入信号的丢失。如果检测到信号丢失,此函数将返回true,否则将返回false。第二个函数只是一种封装器,它调用第一个函数并返回一个否定的结果。
  这里定义的第二类函数是F_FSM_ACTION_T 类型。这是"动作"功能,它们控制(打开或关闭)微控制器所需的内部/ 外部设备或一些H /W 电路,整个嵌入式系统由这些电路组成。
  无论FSM 如何实现,都需要这两类功能,例如"状态图"过程或STT 实现。现在,FSM_sstKernel() 函数是一个新功能。它取代了实现函数FSM_stage1() 的"状态图"。它处理ST T 类型的数据。这些数据被定义为S_FSM_STT_T 类型,并作为FSM_sstKernel ()函数的参数。由于FSM_ s st Ke r n e l()需要修改至少一个数据项,因此必须将其作为指向S _ FSM_ STT_ 类型数据的引用/ 指针。
  图2 :单级EDFA 安全状态图模拟。
  FSM_sstKernel()所做的事情非常简单。它在S _ FSM_ R OW_ T 类型的行(数组元素)中"循环", 并查找presentState 与当前内部状态currentState 相同的行。如果找到这样的行,将调用其对应的事件测试函数,并将它们的返回值"a n d - e d"放在一起,以确定是否满足了移动到下一个内部状态的条件。但有个限制,只能将两个逻辑值"and-ed"加在一起。如果需要更多个,则需要通过另一个F _ FSM_ EVENT_T 类型的事件,来扩展S_FSM_ROW_T 数据结构。如果内部状态之间的转换,必须将条件/ 事件"or-ed"放在在一起,那又如何处理呢?每个事件(或它们"and-ed"的组合)必须在单独的、但在其它方面相同的行中提供。
  然后,FSM_sstKernel()继续(如果瞬态条件满足)启动在行数据中找到的动作。最后,它将行的nextState 复制到stt 的currentState。
  如果我想使用FS M _ s st Ke r n e l() 来处理更多ST T 行数截然不同的FSM,该怎么办?必须定义ROW_MAX 常量,以满足最长的STT,但最好的解决方案是用行的链接列表替换行数组。然后,每个S_FSM_STT_T 型数据, 将使用一个最佳内存空间。然而,一些简单的嵌入式系统,不支持动态分配内存空间。
  现在,在FS M _ s st Ke r n e l()中取消对这两个p r i n tf()语句的注释,可以看到FSM 是如何从当前状态发展到下一个状态的。这显然不适用于嵌入式系统, 但整个代码可能会在P C 机上进行测试, 例如在Microsoft Visual S tudio 中。
  完成和编译
  一旦FSM _ exa m p l e . h 和 FSM _ example.c 完成后(甚至可以编译它们并创建对应的.o b j 文件),就可以将它们添加到应用程序中。在另一个源文件中,需要创建STT 表。这意味着首先定义ST T 的每一行,最后定义STT 本身。然后可以调用FS M _ s st Ke r n e l()函数。您很可能会在F/W 应用程序的main()函数中, 将其作为后台任务之一调用。您可以定义更多这样类似S_FSM_STT_T 变量,并调用FSM_sstKernel()来引用它们。
  为了更好地可视化, 请在MS V i s u a l Studio 下的PC 上编写以下源文件:
  在编译和运行程序( 以及FSM_ example.h 和FSM_example.cpp)时,如果FSM_sstKernel()中的两个printf() 语句并未注释掉,您应该会看到如图2 所示的结果。
  关键概念:
  检查有限状态机的基本实现。
  考察有限状态机实现的改进。
  思考一下:
  如果通过一种不同的方法来实施有限状态机?

相约省旅发大会花开青岛春意盎然老城春花喜迎大会!青岛新闻网原创(记者宋波鸿)山东省旅游发展大会将于3月2627日在青岛隆重召开,这是一次展示青岛的绝佳机会。旅发大会即将来到,为了营造热烈的大会氛围,青岛各区市以花为主题,举办了丰安徽广德茶园春色采摘忙刘福桥村茶园(央广网发胡六青摄)央广网宣城3月23日消息(记者赵家慧通讯员徐泽俊)春回大地,茶吐新绿。近日,安徽广德市柏垫镇刘福桥村的茶园满目翠色茶香飘溢,一千余亩春茶陆续进入采摘福见,福建!又一场文旅盛会就要来啦!旅游因文化赋能丰富内涵文化因旅游带动更有魅力为打响福文化品牌决策部署深化清新福建品牌建设做好福文化宣传推广福建省文化和旅游厅举办来福建集福气美好生活在福地2023福建文旅云分享会暨总奖金22万!长治此项大赛等你来!山西新闻网长治频道讯(记者张浩)3月23日下午,长治市人民政府新闻办公室召开新闻发布会。市文旅局市文联相关负责同志发布了长治市以地名景区名命名歌曲创作大赛的组织实施活动安排奖项设置神奇891!一关冠军二关冠军三关上不上?石家庄市赵县的一羽鸽子火了,今年春赛打俱乐部三关鸽王赛,连续两关500公里飞得冠军,包揽多项娱乐赛冠军。这是石家庄赵县兄弟赛鸽俱乐部2023年的500500600公里三关免费鸽王赛隐没在都市中的火车站大丰满站对位于吉林市区的龙丰铁路情有独钟,因为它承载了我儿时好多美好的记忆,而大丰满站是这条铁路线的终点站。龙丰铁路全长仅有二十余公里,始发龙潭山站,终点大丰满站。六七十年代的吉林市城区不聚焦萤石新品发布会多款重磅智能锁新品震撼亮相3月24日,以睿见智联万家为主题的2023萤石春季新品发布会暨渠道合作伙伴大会在杭州成功举办。会上,萤石发布了智能入户智能家居摄像机TVStudio家居智能控制系统及产品解决方案等2023年,LED显示屏配套设备急需升级和优化纵观全球LED显示屏行业的发展,中国也是当之无愧的LED显示屏制造大国。甚至在这些年的发展中,中国LED显示屏也在改写着世界LED显示屏产业格局。在这个过程中,不仅仅靠应用端产品首补贴缩水90多家美企砍单!台积电赴美成笑话我们低估了代价当初眼红老美承诺的520亿美元补贴,台积电狂砸400亿将先进制程芯片工厂搬去北美。如今开工不到三个月,人员短缺补贴大幅缩水各种问题接连暴露,台积电一下子傻了眼。断供华为砍掉大陆市场发展卫星互联网要兼容5G融合6G3月22日,中国信科集团副总经理陈山枝在全球6G技术大会上表示,发展卫星互联网要注重5G兼容6G融合。以5G为基础,利用5G的规模经济,卫星通信技术能够复用5G技术,同时降低成本。微软又摊上事了?欧洲科技业在云计算垄断问题上须做更多调整新浪科技讯北京时间3月24日上午消息,据报道,之前,欧洲的云计算服务商向欧盟委员会投诉微软有关操作系统捆绑自家云计算服务的垄断问题,欧盟委员会正在商讨是否展开正式的反垄断调查。日前
6159!中国队绝杀澳大利亚,挺进决赛!疯狂庆祝,姚明乐开了花9月30日17点30分,女篮世界杯半决赛迎来巅峰对决,中国女篮挑战澳大利亚女篮。澳大利亚世界排名第3,实力了得。中国队想要掀翻劲敌,难度极大。当然,我们也不能妄自菲薄,在主教练郑薇佛山隐形女富豪张赤梅57岁公司上市,与前夫一起敲钟,身家15亿今年9月22日上午,佛山市联动科技股份有限公司在深交所创业板成功上市,联动科技上市后,成为佛山市南海区第22家上市企业,也揭开了联动科技背后的隐形女富豪张赤梅的神秘面纱。今天,我们云南大山里有个神秘古国,光听名字就害怕,关于它的传说有很多云南是我国最美的省份,那独一无二的风光和四季如春的气候,让无数人心向神往。它也是一个多民族的省份,26个民族相互包容和谐发展,而且关于各个民族的历史和传说非常丰富。今天来讲的是,在经纪人回应武汉三镇外援马尔康转会传闻!长春亚泰VS深足裁判确定北京时间9月30日消息,经纪人回应武汉三镇外援马尔康的转会传闻,马尔康的经纪人没有与埃及俱乐部谈判。相关报道称一些新闻报道说,埃及俱乐部正在与巴西前锋马尔康进行认真的谈判。他的经纪年增速15的东南亚手游市场,如何实现出海效率提高与打法升级?截至2021年,开启出海航路的中国本土游戏在全球化大潮中高歌猛进,据历年发布的中国游戏产业报告显示,20182021四年间,中国自研游戏在海外市场获取的实际销售收入分别为95。9亿用安全锁锁住快递实名制信息作者莫开伟系中国知名财经作家据相关媒体披露,我国自开始实施居民寄快递需实名制之后,有数据显示,78。2的网民个人身份信息被泄露过,包括网民的姓名学历家庭住址身份证号及工作单位等63中国女篮十二朵金花个人简介,内蒙古五人山东两人女篮世界杯,中国已经晋级四强,今天将迎战东道主澳大利亚队,取胜则创造历史进入决赛,即使意外输球也创造了近二十年的最佳记录。世界杯六场比赛,全队十二朵金花全部有过出场记录,且全部都有赚大了!山东白菜价外援又爆发407再创新高取代哈神成王晗法宝山东队今年夏天可以称得上是联盟当中最为忙碌的一支球队,先是在阵容方面进行全方位的整改,紧接着又开始投入到热身赛的磨合当中,整个夏天山东队进行了12场热身赛,对于检验集训成果以及发现成都世乒赛,陈梦代表运动员宣誓,领衔冲击冠军北京时间9月30日消息,2022年国际乒联成都世乒赛团体赛今天将正式拉开帷幕。奥运会女团和女单双冠王陈梦,作为球队的一号主力,将与队友孙颖莎王曼昱王艺迪陈幸同全力拼搏,将考比伦杯留什么是虚拟计算机集群LAXCUS分布式操作系统用户桌面问题来自近期几位网友的私信,他们不约而同问到一个问题什么是虚拟计算机集群?Laxcus分布式操作系统是如何做的?下面就正式回答一下这个问题。在我们双频路由器2。4g和5。8g工业级无线路由器TG463计讯物联5G千兆工业级无线路由器,支持2。4G5。8G无线WIFI,标准SMA阴头天线接口,特性阻抗50欧,强信号高速率稳定无线通信,标准的抽屉式用户卡接口,支持1。8V3VSIM十一假期出行如何选择拍照手机跟着京东排行榜买就行十一假期不少消费者选择了周边游,不知道你是否是其中一员呢?出门游玩,除了饮用水纸巾等必备品,一款拍照功能强大的手机也必不可少,既能减少背相机的重量,又能记录下旅行过程中的美好瞬间,中国女篮郑薇用人惊艳,女排蔡斌一套阵容打天下,这就是境界北京时间9月30日,这一天对中国球迷来说是国庆欢愉的提前到来。在澳大利亚,中国女篮两分淘汰东道主杀入决赛在荷兰,中国女排四连胜,并且四战未失一局。然而两线告捷的背后,两个主帅的用人世乒赛中国队今天登场!国庆参加战斗,首发阵容待定(附赛程)北京时间10月1日,中国乒乓球队即将在祖国生日这天正式加入成都世乒赛的战斗,分别迎战波多黎各男队加拿大女队。从实力对比上看,国乒输球的可能性不大,所以大家相对更关注另一个问题,那就苹果上半年总销量1亿部,全球排名第二根据潮电智库统计,苹果在上半年畅销手机机型中总销量为1亿部。其中,畅销的机型有11款,前三机型销量分别是iPhone13的3644万部,iPhone13ProMax的1803万部,红警大玩家第二季内容征集活动获奖名单红警大玩家第二季内容征集大赛已经结束了,近一个多月的时间中我们收到了很多优质的投稿,感谢各位作者的积极参与,让我们看看有哪些作者获奖吧。积分满100的创作者红警西湖爱玩红警的小橙子育碧合作射击游戏ProjectU展开BETA封测育碧宣布正在开发一个新的合作射击游戏,代号为ProjectU,探索基于活动的合作射击游戏,在里面大量玩家团结起来对抗强大的威胁。ProjectU尚在开发早期,将在西欧地区展开仅限P起底Mirror2ProjectX游戏公司背后发展的草蛇灰线9月30日,Mirror2ProjectX给全国热爱该系列的玩家送上了一份国庆大礼。其表示因在Mirror2ProjectX抢先体验版发布时没有声明本作内容将仅为16级别,可能误导联想拯救者Y70适配穿越火线枪战王者120Hz高帧率IT之家9月30日消息,联想今晚宣布拯救者Y70和小新PadPro2022适配穿越火线枪战王者120Hz高帧率。官方表示,为了给大家带来更加畅快的游戏体验,联合联合穿越火线枪战王者从双轮驱动的快手电商,看快手整体战略的提升虽然全球股市一路跌个不停,但是其中还是有一些不错的公司标的值得深入研究和耐心等待。我个人认为快手是其中之一。原因也很简单,现在是一个属于短视频的时代,虽然快手和抖音相比有差距,但无荣耀MagicBookV142022评测体验更智能的旗舰商务本去年,荣耀首款旗舰级的商务本第一代荣耀MagicBookV14的发布给人留下了很深的印象,它在拥有比主流轻薄本更优秀的做工设计性能释放和续航表现的基础上,带来了许多更智慧更人性化的安徽宁国山乡晒秋忙9月29日拍摄的安徽省宁国市南极乡龙川村。近日,一场热闹喜庆的秋收嘉年华系列活动在安徽省宁国市南极乡龙川村举行,游客们现场体验山核桃采摘山核桃制作和品鉴高山露营等活动。宁国市南极乡