如何编写可在多硬件平台上运行的可配置嵌入式C代码

时间:2010-06-03 09:34:15

标签: c embedded

用于编写具有多种功能的嵌入式C软件的技术有哪些。功能可以配置为多硬件平台。

我开发了基于ARM7 RTOS的固件。现在我想把它变成一个基线固件,可以在不同的微控制器上使用类似的,或多或少的功能(可配置),如MSP或AVR等。

更具体一点,如果我想为一个硬件更改固件的不同功能,而为第二个硬件更改其他功能。我应该采用什么技术,是否有任何可用的研究材料。 此致

4 个答案:

答案 0 :(得分:2)

常用的方法有两种: 1)很多#ifdefs 2)写“驱动程序”并确保其他代码被抽象

如果您在类似的平台上运行,1)可能最适合您。如果平台非常不同,那么2)可能是一个更好的主意。我见过的大多数现实世界的解决方案采用#ifdef方法,但这很快就会导致难以修改的混乱的代码迷宫。我会推荐介于两者之间的东西,因为很难在2)中设计驱动程序。

应在types.h文件中指定类型,或使用uint16_t等显式类型。我们基于绝对值(U8,U16,U32,S8 ......)定义所有自己的类型,因为C中的内置类型是依赖于实现的。然后在体系结构更改时更改此文件。

答案 1 :(得分:1)

FreeRTOSported to a lot of architectures,包括您列出的三个。你为什么不看看他们porting guide的灵感?

他们的方法涉及配置头文件,用于平台特定驱动程序函数的C文件和用于更多平台特定子例程的汇编程序文件。所有其他源代码仅包含通用功能,然后根据需要使用特定于平台的驱动程序函数的通用接口和配置头中的一些#ifdef和宏。

答案 2 :(得分:1)

通常可以通过以下方式解决可移植性:

  1. 使用I / O驱动程序,因此应用程序代码没有特定于硬件的依赖。
  2. 为OS调用编写一个抽象层,这样您的应用程序代码就可以通过重写一层薄薄的函数调用来适应不同的RTOS。
  3. 避免使用特定于编译器的指令和编译指示,或将它们隔离到可以集中替换的几个头文件中。
  4. 避免使用平台相关的数据类型,例如'int',并使用指定存储大小定义的类型,其重要位置(即uint32_t)。
  5. 在选择应如何设计内存架构时,请考虑最低的共同点。
  6. 祝你好运。

答案 3 :(得分:0)

一般关键是获取所有平台相关信息并将其收集在一个或多个头文件中。如果您不能让它们运行相同的代码,您也可以让系统由#ifdef配置。我在AVR'r MSP上使用这种方法,并在标准计算机上运行代码。