我有一个USART类,它使用tx中断传输数据。 现在我想创建一个使用DMA传输数据的变体。 你更喜欢什么:
或
答案 0 :(得分:2)
这不能轻易回答。与许多设计决策一样,这是“魔鬼在细节中”的案例。所以我的答案不是“与解决方案A一起”或“与解决方案B一起”,而是“你需要看看决定走哪条路” - 因为这也将帮助你更多直截了当地说“你应该选择答案A”,因为它会引导你完成整个过程,你也可以将这个过程用于未来的设计决策。
主要问题是:
代码有何不同?
如何使用?
一种解决方案比另一种解决方案有什么好处?
一种解决方案比另一种解决方案有什么缺点?
您是唯一可以回答这类问题的人,因为我们没有您的代码,而且我们不知道您正在处理的硬件。
澄清以上几点:
如果“与DMA”和“没有DMA”之间的代码差异非常小,并且可以在正确的位置添加几个if,那么这可能是正确的解决方案。另一方面,如果有许多地方完全不同,那么显然这是分裂代码以使其更清晰的一个很好的论据。
如何使用代码也是设计的关键问题。您需要确定DMA与中断选择的位置和方式,以及放置位置。它是一个工厂函数,然后从class BaseSerial
初始化正确的派生类。也可能
“利益与缺点”可能相当明显。但是,如果不知道你的代码目前是什么样的,以及差异是什么,很难说每个选择中获得和丢失的是什么。
通常,拥有一个公共接口/基类,然后一个派生类似乎是一个合理的解决方案。但如果做得不对,那么这至少就像使用“更基本”的方法并拥有两组代码一样令人困惑和复杂。
当然,人们还必须考虑表现。如果添加额外的层(实际上是在代码中生成,而不是优化),那么这可能会影响设备的整体性能,就像“不必要的if / else”语句一样。同样,在不了解实际设计细节的情况下,很难从性能角度说出哪种解决方案更好。
使用您认为正确的解决方案进行实验并制作原型可能是一个好主意,看看它“看起来”和“感觉”如何,如果它可能是正确的,那么就去做吧。如果它“感觉不对”,那就回去看看另一个解决方案。重复,直到你想出一个好的解决方案,或被迫选择最差的,因为你的时间不多了....