我正在构建模型的铁路道口信号,并正在研究微控制器代码以使其起作用。我遇到了一个问题,使我对自己的方法提出了质疑。
一旦火车触发进入交叉口区域,我将读取RFID标签(每辆车内都装有一个),并将标签编号放入一个阵列中。问题在于,很可能总是需要调整阵列的大小,因为并非每列火车都有相同数量的汽车,因此也有相同数量的RFID标签。我需要捕获最后一个汽车标签,因为我需要从出口区域RFID读取器中监视该标签,因此我知道何时关闭门并关闭闪光灯。另外,当发现一个新标签时,我可以对汽车进行计数,并且与出口区域中的计数恰好匹配,因此不需要数组。
除了数组,还有一种更有效的方法吗?我是一个C#专家,所以并不是所有人都非常熟悉C ++中的处理方法,指针以及所有附带的内容。
另一个想法是放弃数组,只用读取的每个标签替换一个tagID变量,以为最后一个汽车标签将一直存在于变量中,并匹配进入和退出汽车数量,这可能是最简单的解决方案。
对最佳方法有何想法?
在现实世界的铁路道口中,这最终会影响人们的安全。尽管这只是一个模型,但它可能是使您思考在现实世界中可能遇到的事物类型的好练习(因为这只是放大的版本,其后果会更大)。
我建议:
除非您真的知道自己在做什么,否则不建议在微控制器环境中使用动态内存。内存不足以及由于意外碎片而导致崩溃是一个非常实际的问题。
一种简单的方法是记录第一个标签,最后一个标签和标签数量。这样,您可以对启动和退出滑架进行一些完整性检查,并确保退出的滑架数量与输入的数量相同。如果不是,请进入某种警报恢复状态,在其中记录问题,并可能使用一些超时或其他检测来确定抬起手臂是安全的。
另一种方法是制作一个静态数组,该数组足以存储比两个检测器之间实际容纳的托架更多的托架,并将其用作环形缓冲区。这样,您就可以验证每辆车离开十字路口时的情况。
如果您确实需要使用动态内存,请继续。但是请考虑,如果这样的系统可能由于分配失控而失败,那么任何静态阵列解决方案在这种情况下也可能会失败。您可能需要重新考虑您的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句