在用CCS开发及调试项目时,总是会需要当程序运行到某一位置或者当某一错误出现时时打印一段消息给开发者,以便于其调试及排错。DSP/BIOSD提供的强大的LOG模块可以很好的帮助开发者完成这些工作,以下是LOG模块的介绍及本人在使用过程中的注意事项。
一、LOG模块概述
目标程序执行时,可以使用LOG模块中的事件日志来记录实时的事件。我们可以使用系统日志,也可以创建用户自定义的日志。如果日志类型是循环的,那么缓存区始终保存的是最后一次记录的信息。如果日志类型是固定的,那么缓存区始终保存了第一次记录的信息。LOG模块的系统日志存储与系统事件有关的消息,这些系统消息应该是我们在TRC跟踪模块中激活了的事件。
为了减少运行时间,日志数据的格式化处理总是在主机上完成。也就是说,由运行CCS的主机而不是DSP目标系统来处理这些日志数据,理解这点很重要。我们通常使用LOG_printf函数来替代标准C语言中的printf函数,以便更快的在CCS中显示需要打印的信息。
日志缓存区是在数据存储器中一段固定大小的存储空间。在日志缓存区里,一个消息占用4个字的存储空间。第一个字用来存储序号,这些序号控制事件日志用正确的顺序显示日志。剩下的3个字记录数据,它们是调用API函数时写进日志的。
二、LOG模块配置
打开DSP/BIOS配置文件,然后展开“Instrumentation”选项,LOG - Event Log Manager菜单下:“LOG_system”对象是系统创建该配置文件时自动添加的,用于系统事件记录;“LOG_msg”是用户自定义。鼠标右键单击该对象名称,在弹出的菜单中选择“Properties”激活属性窗口。
comment:添加一段注解来说明该LOG对象。
bufseg:选择日志缓冲区的存储段的名称。
buflen:说明日志缓冲区的大小(以字为单位)。
logtype:说明日志类型,循环或者固定。在缓冲区内,原有的循环类型的日志可以被新的事件覆盖,但是固定类型的日志不能被覆盖。因此,当你的日志消息可以正常显示但不更新时,请设置日志类型。
fixed(固定):只存储其最先接收的信息,当消息缓冲区满时就会拒绝接收新的信息。
circular(循环):当消息缓冲区满时,新日志会自动覆盖原有的日志。
datatype:如使用LOG_printf函数来打印输出日志信息时,请选择“printf”类型。如使用LOG_event函数记录日志信息,请选择“raw data”。
format:当datatype选择“raw data”即原始数据作为数据类型,那么就要写一段“printf风格”的格式串。
三、LOG模块API函数说明
1、LOG_disable:关闭指定对象的日志记录功能,此时日志缓冲区的内容将不会被更新。
2、LOG_enable:允许日志记录事件。DSP/BIOS默认日志记录功能为打开状态。
3、LOG_error:将一个事件、数据或者出错信息按指定的格式串写入系统日志。
4、LOG_event:将一个为格式化的事件消息吸入日志中。
5、LOG_message:功能及用法与LOG_error相同,只是它要受跟踪管理模块的影响。
6、LOG_printf:在指定的LOG窗口中显示消息,等效于标准C的printf()函数。
7、LOG_reset:复位日志缓冲区。