在标准C中映射不同的记忆

时间:2015-09-08 11:58:00

标签: c testing memory standards iar

我正在开发一些带有8051的嵌入式系统。今天,所有代码都是用IAR编写的,它使用__xdata,__ pdata等一些关键字来管理微观的不同记忆......

我们开始使用Ceedling框架进行单元测试,我认为测试单元的最佳方法是制作本机可执行文件(http://www.throwtheswitch.org/build/which)并在我的linux中进行测试然后,一旦我的软件完成,为8051编译。

我现在的问题是我不知道如何在不使用IAR关键字的情况下映射不同类型的微观记忆。有人有这个问题吗?

1 个答案:

答案 0 :(得分:0)

您可以考虑使用C预编译器来定义一组声明'宏,虽然这可能会使代码混淆,从而使维护更加困难。

#ifndef UNIT_TEST
    #define DECLARE_DATA_VAR(type,name)   type __data name
#endif

然后,您可以为单元测试框架定义类似的宏。以下假设为GCC,以便可以为链接器指定输出节以表示__data个变量。

#ifdef UNIT_TEST
    #define DECLARE_DATA_VAR(type,name)    type name __attribute__((section ("__data")))
#endif

然后在您的代码中,您将不得不使用宏替换标准变量声明。

 DECLARE_DATA_VAR(int,aNumber);

警告:如果您确实使用GCC __attribute__将变量放在命名部分中,则必须注意部分属性,如data和{{ 1}}部分具有不同的属性,您将无法混合它们。 (有些架构和编译工具也有附加部分)!例如,以下内容可能不相互兼容;

bss

替代方案:您应该非常仔细地考虑您的确切情况'单元测试'。考虑将业务功能封装到独立于底层硬件实现的功能中,并为所有那些真正依赖于目标并且不需要进行单元测试的部分(即低级驱动程序)提供单独的硬件抽象层。

您最终可能会编写自己的8051模拟器,或者为了单元测试而花费更多时间来抽象代码,而不是为您的软件增加业务价值。