DSP

CCS中如何生成LIB文件,并在另外CCS项目中引用LIB文件

2019-07-13 15:35发布

       CCS项目建立时,默认是生成.OUT可执行文件。当想把一个实现的代码较多的功能加入到一个项目中,把这个功能做成一个LIB文件,然后引入到项目中直接调用,是最方便和简洁的。
图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 的提示。