在微控制器上用C ++调整动态数组的大小是否是一个好主意

二元组

我正在构建模型的铁路道口信号,并正在研究微控制器代码以使其起作用。我遇到了一个问题,使我对自己的方法提出了质疑。

一旦火车触发进入交叉口区域,我将读取RFID标签(每辆车内都装有一个),并将标签编号放入一个阵列中。问题在于,很可能总是需要调整阵列的大小,因为并非每列火车都有相同数量的汽车,因此也有相同数量的RFID标签。我需要捕获最后一个汽车标签,因为我需要从出口区域RFID读取器中监视该标签,因此我知道何时关闭门并关闭闪光灯。另外,当发现一个新标签时,我可以对汽车进行计数,并且与出口区域中的计数恰好匹配,因此不需要数组。

除了数组,还有一种更有效的方法吗?我是一个C#专家,所以并不是所有人都非常熟悉C ++中的处理方法,指针以及所有附带的内容。

另一个想法是放弃数组,只用读取的每个标签替换一个tagID变量,以为最后一个汽车标签将一直存在于变量中,并匹配进入和退出汽车数量,这可能是最简单的解决方案。

对最佳方法有何想法?

稻田

在现实世界的铁路道口中,这最终会影响人们的安全。尽管这只是一个模型,但它可能是使您思考在现实世界中可能遇到的事物类型的好练习(因为这只是放大的版本,其后果会更大)。

我建议:

  • 使代码尽可能简单;
  • 提供内部验证措施,以确保假设与现实相符;
  • 定义了恢复程序,以在上述验证失败时进行处理;
  • 编写单元测试以验证所有边缘情况和模式异常操作(如果您具有强迫性)。

除非您真的知道自己在做什么,否则不建议在微控制器环境中使用动态内存。内存不足以及由于意外碎片而导致崩溃是一个非常实际的问题。

一种简单的方法是记录第一个标签,最后一个标签和标签数量。这样,您可以对启动和退出滑架进行一些完整性检查,并确保退出的滑架数量与输入的数量相同。如果不是,请进入某种警报恢复状态,在其中记录问题,并可能使用一些超时或其他检测来确定抬起手臂是安全的。

另一种方法是制作一个静态数组,该数组足以存储比两个检测器之间实际容纳的托架更多的托架,并将其用作环形缓冲区。这样,您就可以验证每辆车离开十字路口时的情况。

如果您确实需要使用动态内存,请继续。但是请考虑,如果这样的系统可能由于分配失控而失败,那么任何静态阵列解决方案在这种情况下也可能会失败。您可能需要重新考虑您的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在浏览器根据文本长度和字体大小调整大小后更改 div 的高度是一个好主意吗?

哪些变量类型/大小在STM32微控制器上是原子的?

与微控制器上的常规内存相比,读取内存映射的IO是否需要更长的时间?

在MongoDB中使用oplog进行版本控制是否是一个好主意

覆盖指令中的控制器功能是一个好主意吗?

在Firebase中使用附加服务器是否是一个好主意?

如何修复“被中断中断的 2 个微控制器之间的 I2C 通信”

检查每个细节上的SharedPreferences是一个好主意

微控制器中的以太网控制器行为是否正确描述?

在生产服务器上启用jmx(lambda探针)是一个好主意吗?

是否可以通过蓝牙模块连接两个微控制器?

用微控制器提取根

微控制器的每个引脚都与一个寄存器相关联吗?

单例在微控制器上

VLC Player是否可以嵌入微控制器中以播放视频?

ARM是否假定所有Cortex-M微控制器都是低端字节序的?

在裸机微控制器应用中是否需要GCC的.fini部分?

用提取方法重构,这总是一个好主意吗?

用接口创建模块只是一个好主意吗?

始终用final标记非虚拟方法是一个好主意吗?

在HttpContext.Current上发送覆盖响应不是一个好主意吗?

为了可移植性,在游戏引擎的API上构建API是一个好主意吗?

在heroku上从rails调用python脚本进行多种操作是一个好主意吗?

在静态文件上分块使用Transfer-Encoding:是一个好主意吗?

在Firebase Cloud Function上运行Socket.io是一个好主意吗?

在繁忙的构建节点上通过NFS托管Yocto SSTATE_MIRROR-一个好主意?

台式机USB扬声器:一个好主意?

为什么在终结器中序列化对象不是一个好主意?

什么时候在C ++中返回const引用是一个好主意?