我正在开发一些带有8051的嵌入式系统。今天,所有代码都是用IAR编写的,它使用__xdata,__ pdata等一些关键字来管理微观的不同记忆......
我们开始使用Ceedling框架进行单元测试,我认为测试单元的最佳方法是制作本机可执行文件(http://www.throwtheswitch.org/build/which)并在我的linux中进行测试然后,一旦我的软件完成,为8051编译。
我现在的问题是我不知道如何在不使用IAR关键字的情况下映射不同类型的微观记忆。有人有这个问题吗?
答案 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模拟器,或者为了单元测试而花费更多时间来抽象代码,而不是为您的软件增加业务价值。