gpt4 book ai didi

c++ - 在微 Controller 上用 C++ 调整动态数组的大小是个好主意吗

转载 作者:搜寻专家 更新时间:2023-10-31 00:10:43 25 4
gpt4 key购买 nike

我正在构建一个铁路道口信号模型,并正在编写微 Controller 代码以使其正常运行。我遇到了一个让我质疑我的方法的问题。

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

除了和数组之外,还有更有效的方法吗?我是一个 C# 人,所以不太熟悉如何在 C++ 中处理,使用指针和所有随之而来的东西。

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

关于最佳方法的想法?

最佳答案

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

我会推荐:

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

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

一个简单的方法是记录第一个标签、最后一个标签和标签的数量。这样你就可以对开始和退出的车厢进行一些完整性检查,并确保退出的车厢数量与进入的车厢数量相同。如果不是,请进入您记录问题的警报恢复状态,并可能使用一些超时或其他检测来确定举起 ARM 是安全的。

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

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

关于c++ - 在微 Controller 上用 C++ 调整动态数组的大小是个好主意吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36993091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com