设计解决方案时,大部分项目模块/代码文件使用/执行相同的代码部分,分布不同的架构级别

问题描述 投票:1回答:1

我想知道,当这些模块处于不同的架构级别时,一个好的嵌入式sw架构师将如何选择在不同C文件模块上使用相同代码部分的最佳选择。

每个模块都是一个带有内部和外部函数的file.c,其对应的.h文件带有公共函数声明。

我有1)低级模块,2)中级模块,3)高级模块和4)应用级模块。其中4)调用3)函数,3)调用2)函数等。

但我已经意识到1),2)和3)函数中的一些函数在它们的例程的不同点处执行相同的指令。如果某些1)例程中的一部分代码也出现在某些2)和3)模块的例程中,那么做一个好的和有效的代码架构设计的最佳选择是什么?

我的第一个想法是将指令集打包在公共function_x中,并在头文件中声明它,以便为上层模块函数调用它。作为建筑师我学到了:

  1. 将头文件file_x.h视为要查看的模块API,并将其用于其他和上层文件(模块之间唯一的接口通信)。
  2. 如果API函数在实现它们的同一模块file_x.c中用作内部函数,那么这不是一个好的设计。
  3. 即:4)模块不能直接与1)模块API通信。 A)4)模块功能只能调用3)模块API函数,3)模块函数只能调用2)模块函数;因此2)模块功能只能调用1)模块功能。

事实上,我已经继承了一个旧项目,他们通过数字输出写入一个字节,通过串行总线将字节发送到电位计。但是他们已经实现并声明了相同的功能,其名称与每个模块/文件的内部功能相同。其他时候我发现他们在其他例程中重写了这段代码,在那里我只调用例程而不是。我认为它可以改进。

所以,我的怀疑是:

  1. 是一个很好的设计,可以在1)模块级别的函数中包含设置的指令,并从其他级别模块调用吗?
  2. 如果2)level模块还包含1)级模块函数给出一个不同的名称并将其带到其API头,准备用于3级模块函数,这是一个更好的想法吗?
  3. 如果我还在不同模块中使用代码但它们属于相同的模块级别,该怎么办?
  4. 如果需要将相同的函数用作内部函数并且同时需要被其他文件作为公共函数调用,那么如何面对设计。
c architecture embedded software-design
1个回答
2
投票

一些提示和经验(不是一个决定性的答案)。

实用程序函数可以打包在一个或多个源级“库”C文件中。它们是实用程序,因此不是特定于硬件的,只能实现重复性任务。例如,strcmp是一个效用函数。您还可以将这些作为真正的对象库提供给开发人员/团队。

数据结构及其操作可以在它们自己的模块(C文件)中实现。例如,Btree或链表。

硬件特定功能是您的“1级”低级功能。它们提供API,没有人可以直接操作硬件;只有通过这个API。您可以“堆叠”API,提供越来越多的抽象,但您也可以将其视为“1级”设计,它本身由多个级别组成。

应用级编码使用前面描述的所有内容。

在你的关卡中不要过于教条。必要时,更高级别的函数可以直接调用低级函数,而不强制它通过中间级别。从上到下的干净设计通常很难实现。

© www.soinside.com 2019 - 2024. All rights reserved.