四、源代码打点编译
目标环境:嵌入式linux (kernel 2.2.14)
1、修改instrconfig文件
libctHwic库中的初始化程序ctlib.c完成了物理地址到逻辑地址的映射,这个逻辑地址被赋给amc_ctrl_port_ptr、amc_ctrl_port_ptr,使Probe可以正确接收数据。
这个逻辑地址的值同样需要被用户程序知道,我们的初始化程序ctlib.c必须先于用户的主程序运行。而在RTOS Linux中不同的用户程序无法实现变量的共用,所以我们采用了软件打点的方法来决这个问题。
存放在<installation_dir>/instrconfig目录下的打点配置文件为隐藏文件,为了对其进行相应修改,需要让系统显示所有文件。
根据环境变量AMC_TARGET的值,选择同名文件进行修改。修改的内容主要包括:
为CodeTEST确定当前环境使用的编译器类型,即令:
AMC_CC=ppc_8xx-gcc
AMC_CXX=ppc_8xx-gcc
在AMC_TAGDEFAULTS中增加-tags-to-ctTag选项,-tags-to-ctTag选项令CodeTEST采用软件方式打点。注释去
#AMC_TAGDEFAULTS=-gnu -no-placement-delete \
# -allocator-call-map=$AMC_HOME\lib\rtos\vxworks\ctvxwrap.map
令
AMC_TAGDEFAULTS=-gnu \
-no-placement-delete \
-tags-to-ctTag \
-allocator-call-map=$AMC_HOME\lib\rtos\linux\ctlinuxwrap.map
举例打点函数:
int ctTag( unsigned long tagID )
{
if ( amc_ctrl_port == NULL )
ct_init();
*amc_ctrl_port = tagID;
return( tagID );
}
int ctDataTag( unsigned long tagID )
{
if ( amc_data_port == NULL )
ct_init();
*amc_data_port = tagID;
return( tagID );
}
接下来需要对编译目标源代码的makefile文件进行修改,
1、 确定CodeTEST打点编译选项
注释去CC = ppc_8xx-gcc
令CC = ctcc -CTv –Ctkeep \
–CTtag-allocator=$AMC_HOME\lib\rtos\linux\ctlinuxwrap.map
其中-CTv选项提供版本号信息,–CTkeep选项将保留中间过程文件,通过*.i和*._i可察看源程序中的打点情况。
2、在编译需要链接的*.o文件,增加libctHwic.a,即令
mginit_OBJECTS = mginit.o \
libctHwic.a libctmem.a
3、令CodeTEST采用软件方式打点,注释去
#CFLAGS = -g -O2 -Wall -fomit-frame-pointer -fno-strength-reduce -g -O2 –pipe,令
令
CFLAGS = -g -O2 -Wall -fomit-frame-pointer -fno-strength-reduce -g -O2 –pipe -DTAG_DEST=1
保存修改好的makefile文件。
使用上述的makefile文件,对待测代码进行打点编译。打点编译完成后将在当前编译目录增加codetest.idb 和mginit.exe文件。