完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
大家好!我正在PIC32MZ中编写销售点终端(POS),您可能认为它有很多外围设备:打印机、显示器、GPRS、以太网、键盘、Wifi等等……我决定使用微芯片文档中建议的状态机方案。我会有一些疑问。我几乎每一个函数都有一台状态机,所以我为每一个函数创建了一个枚举来跟踪状态。这些枚举被放置在头文件中,因此它们是全局变量。这意味着,从长远来看,我有大量的全球枚举和难以保持命名整洁。这是最好的方法吗?有什么好的文章或书能让我了解更多的编程方法吗?谢谢!
|
|
相关推荐
13个回答
|
|
|
我认为状态机枚举应该是每个模块的本地枚举,例如,打印机、显示器等:每个模块都有一个头文件和一个实现文件,并且它的枚举应该在头中。或等待完成)你可以用多种方式来处理这个问题…
|
|
|
|
|
|
我不确定一场全球峰会如何使调试更有效。随着项目规模的扩大,管理全球A变得更加困难。这是一个关于C++的原因。所以我同意DarioGIf你新的价值模块可以有一个什么是我的状态函数。可选地,和声具有一个AppDATA结构。数据可以通过在结构中放置结构来组织。
|
|
|
|
|
|
PIC32 MZ?很多接口?许多状态机?正如NKurzman在文章中提到的,C++是前进的道路。我意识到您可能不熟悉C++,但是对于一个大小和级别复杂的项目(以及在一个可以处理C++的处理器)中,我肯定会使用C++。史提夫。
|
|
|
|
|
|
我没有说C++是走的路。我认为C++对于小型嵌入式系统来说太重了。面向对象编程的概念可以用C。第一个是数据隐藏。变量的范围应尽可能有限。如果你认为应对全球化是一个糟糕的开始,等到时间和程序员通过。他们将被孤立和复制。这就是程序员不必通过触摸它们而产生副作用的风险。
|
|
|
|
|
|
我有很多状态机的经验。我在90年代使用对话板帮助开发了一些流行的语音邮件系统。他们(对话机)需要状态机编程。在10到20年前,App Notes显示了这一点。我相信你能找到应用笔记。这里还有一个链接,这里是我20年前编写的语音邮件系统的真正代码。这是C++。你需要把它改成C。这是PROB比你需要的更复杂,但是研究几个小时。您定义了一个满足您需求的函数原型。通常,它需要某种类型的事件,并返回一个值,该值根据该值控制下一个状态将是什么。对话需要输入和退出功能。你可能不会。您编写一个事件触发器,它获取事件的极点,然后查找函数从函数指针表中调用。您根据事件对表格进行索引。从0开始定义EnUM事件。永远不要跳过数字。每一个索引表。您可以用一个函数指针数组的静态静态全局定义来构建表。然后在初始化过程中设置表。被调用的函数也可以操作表。*event)、void(*aexit)(TChanEvent*event)、char*atext、int rr、int ofh、int ld、int endf、int to、int dtmf、int maxd、int sil、int dc、int onh、int app);int getNextState(int event);};类TStateFunctionTable{public:TStateFunctionTableEntry*table;int tableSize;int funcSize;int stateSize;public:TStateFunctionTable();~TStateFunctionTable();void setState();void set(int state,char*desc,void(*aentr)(TChanEvent*event),void(*aexit)(TChanEvent*event),int rr,int ofh,int ld,int endf,int to,int dtmf,int maxd,int sil,int dc,int onh,int app);char*getText(int astate);};
|
|
|
|
|
|
|
|
|
|
|
|
函数指针在某种程度上是“状态机的进化”,但在更小的图片上使生活变得非常困难。
|
|
|
|
|
|
你的意思是:函数指针是状态机的进化?我认为进化是RTOS。
|
|
|
|
|
|
函数指针是执行状态机的一种方式。不是最好的办法。只是一种方式。由于这篇文章是关于在单个程序中处理大量的状态机状态变量,我不确定一百个不交状态函数将如何解决这个问题。
|
|
|
|
|
|
在新的PIC中没有那么糟糕:这适用于所有PIC16F1*和PIC18Fif XINST=ON(当然,如果您的PIC具有超过64K的内存,您还需要PCLATU)。
|
|
|
|
|
|
在新的PIC中没有那么糟糕:这适用于所有的PIC16F1*和PIC18Fif XINST=ON(当然,如果您的PIC具有超过64K的内存,您还需要PCLATU)。那么编译后的堆栈又如何呢?(在XC我的意思)但无论如何,我是一般的发言。我的意思是,它们是一种“进化”,在某种意义上说,它们可以更高效,可能更“清晰”,更接近C++的方法。然而,标准的状态机*做工作*,你只需要小心一点你的代码。
|
|
|
|
|
|
在新的PICS中并不坏:这将对所有PIC16F1*和PIC18FIF XSTST =(当然,如果你的PIC有64K以上的内存,你也需要PCLATU)。那么编译的堆栈呢?
|
|
|
|
|
|
编译堆栈可以处理函数指针。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1124浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 02:45 , Processed in 0.988730 second(s), Total 100, Slave 82 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2253