分类: C/C++
2012-05-29 20:40:30
图1
编译之前要设置编译选项,设置的依据是要引入的项目编译选项。下图2是test_programmer的编译选择设置。主要要注意字节顺序(Endian),ABI。
图2
对于现有的DDR项目,将项目的中源文件,头文件和库文件,都复制到新建的LIB工程下,并在CCS中添加进去。添加完成之后要看一下,是否每个函数的实 现都包含在了这个LIB工程中。因为有些函数的是定义在头文件中的,而其实现是在对应的源文件中;如果调用该函数,如果只添加了该头文件,而没有添加对应 的源文件,在LIB工程中编译是没有错误的,但是引用该库时编译会报错。例如DDR项目中main.c中的EVMDM355_init()函数,定义在 evmdm355.h头文件中,加入了该头文件编译会通过。其实现是在evmdm355.c中,在这个文件中又调用了evmdm355_i2c.h的函 数,所以必须把evmdm355.c,evmdm355_i2c.h和evmdm355_i2c.c这个三个文件也加入进来,生成的.lib文件,引用时 才不会报错。
将DDR项目中的main.c文件修改,修改其中main函数名,改为DDRMain(因为要调用main函数,而一个项目只能有一个main函数)。编 译成库文件DDR.lib。在test_programmer中加入DDR.lib库文件,再调用DDRMain函数,即测试模块的入口。
测试发现,该模块可以执行,并完成对DDR的测试,如下图3所示。但随后出现“File not found”的问题,main.c没有找到。如下图4所示。
图3
图4
在main.c中打印出“***ALL Tests Passed***”后,有条语句SW_BREAKPOINT。其定义为#defineSW_BREAKPOINT asm( " .long0xE1200070" ); 注释为Software Breakpoint code. Uses inlineassembly command
可以看出SW_BREAKPOINT是一个中断点,程序运行到这里会暂停。将SW_BREAKPOINT注释掉,再次编译成LIB文件,加入到test_programmer中,再次实验,测试完成并且没有出现File not found 的提示。