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

din*_*tom 2 c++ arrays

我正在构建一个模型铁路道口信号,正在研究微控制器代码以使其正常工作.我遇到了一个让我质疑我的方法论的问题.

我正在阅读RFID标签(每辆车内都有一个),一旦列车触发进入过道门区域,并将标签号码放入一个阵列中.问题是阵列很可能总是需要重新调整大小,因为不是每辆列车都有相同数量的汽车,因此RFID标签的数量相同.我需要捕获最后一个汽车标签,因为我需要从出口区RFID阅读器监控该标签,所以我知道何时关闭大门并关闭闪光灯.此外,我可以计算汽车,因为发现了新标签,并且刚刚匹配出口区域中的计数,因此不需要阵列.

除了和数组之外还有更有效的方法吗?我是一个C#家伙,所以不熟悉如何在C++中处理,使用指针和随附的所有内容.

另一个想法是放弃数组,只需更换每个标签的标签识别变量阅读,思考过去的汽车标签将在变量所有的时间,并匹配入口和出口的汽车数量,这可能是最简单的解决方案.

关于最佳方法的想法?

pad*_*ddy 5

在现实世界的铁路道口,这最终会影响人们的安全.虽然这只是一个模型,但是让你思考在现实世界中可能遇到的事物的类型可能是一个很好的练习(因为这只是一个具有更大后果的扩大版本).

我建议:

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

除非您真正知道自己在做什么,否则不建议在微控制器环境中使用动态内存.由于意外碎片而耗尽内存和崩溃是一个非常现实的问题.

一种简单的方法是记录第一个标签,最后一个标签和标签数量.通过这种方式,您可以对起动和退出车厢进行一些完整性检查,并确保输入的车厢数量相同.如果没有,请进入一些警报恢复状态,您可以在此处记录问题,并可能使用一些超时或其他检测来确定抬起手臂是否安全.

另一种方法是制作一个静态数组,足以存储更多车厢的标签,而不是物理上适合两个探测器之间的标签,并将其用作环形缓冲区.这样你就可以在离开十字路口时验证每一辆马车.

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

  • 很好的答案,但我不知道模型铁路如何伤害任何人.:P (2认同)