主题中讨论的其他器件:AM5728
工具/软件:Code Composer Studio
大家好、
我尝试使用 System_printf 进行调试、我使用的是 ti-RTOS 和 am5728 idk、我的 CCS 版本为9.1.0.00010。 我创建了一个新的 CCS 项目、选择了 cortex A15和典型的 SYS/BIOS 项目。 我编译了该项目并在目标板上运行它、但无论是在控制台还是在 ROV->SysMin 中都看不到任何输出。 下面是我的 main 和.cfg:
VAR Defaults = xdc.useModule('xdc.runtime.Defaults');
var Diags = xdc.useModule('xdc.runtime.Diags');
var Error = xdc.useModule('xdc.runtime.Error');
var Log = xdc.useModule('xdc.runtime.Log');
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
var Main = xdc.useModule('xdc.runtime.Main');
var Memory = xdc.useModule('xdc.runtime.Memory'
) var SysMin = xdc.useModule('xdc.runtime.SysMin');
var System = xdc.useModule('xdc.runtime.System');
var Text = xdc.useModule('xdc.runtime.Text');
var BIOS = xdc.useModule('ti.sysbios.BIOS');
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
VAR Swi = xdc.useModule('ti.sysbios.knl.Swi');
var Task = xdc.useModule('ti.sysbios.knl.Task');
var Semaphore = xdc.useModule('ti.sysbios.knl.Semaphore');
var Hwi = xdc.useModule('ti.sysbios.hal.Hwi');
//
*取消注释此行以全局禁用断言。
*所有模块继承'库'模块的默认值。 您
*可以使用 Module.common$按模块覆盖这些默认值。
*禁用断言将节省代码空间并提高运行时性能。
Defaults.common$.diags_ASSERT = Diags.always_off;
*/
*
取消注释此行以防止模块名称加载到目标上。
*模块名称字符串放置在.const 段中。 将此
*参数设置为 false 将节省.const 段中的空间。 错误和
*断言消息将包含"未知模块"前缀、而
不是*实际模块名称。
Defaults.common$.namedModule = false;
*/
/*
将系统中的 exit 处理程序数组最小化。 System 模块包括
*一组函数,这些函数在 System_atexit()中注册,
*由 System_exit()调用。
//
System.maxAtexitHandlers = 4;
/*
取消注释此行以禁用错误打印功能。
*禁用时,我们会丢失错误信息,因为
*不打印错误。 如果
*由于 Error_print()函数
*调用 System_printf(),禁用 raiseHook 将节省一些代码空间。
error.raiseHook =空;
*/
/*
取消注释此行以防止*在
目标上加载错误、断言和日志字符串。 这些字符串放置在.const 段中。
*将此参数设置为 false 将节省.const 段中的空间。
*错误、断言和日志消息将打印原始 ID 和 args、而不是
*格式化的消息。
text.isLoaded = false;
*/
/*
取消注释此行以在
程序退出时禁用 SysMin *的字符输出。 SysMin 向循环缓冲区写入字符。
*可以使用 ROV 中的 SysMin Output 视图查看该缓冲器。
SysMin.flushAtExit = false;
*/
SysMin.flushAtExit = true;
//
* BIOS 模块将为系统创建默认堆。
*指定此默认堆的大小。
//
BIOS.heapSize = 0x1000;
//
*从源代码构建自定义 SYS/BIOS 库。
//
BIOS.libType = BIOS.LibType_Custom;
//系统堆栈大小(由 ISR 和 Swi 使用)*/
Program.stack = 0x2000;
// System_printf ()的循环缓冲区大小*/
sysmin.bufSize = 0x200;
//
*为整个系统创建和安装记录
器*/
var logerBufParams = loggerBufParams;
创建 LoggerBufParams = 16.0=LoggerLoggerBufParams;创建和安装记录器
Defaults.common$.logger = logger0;
Main.common$.diags_INFO = Diags.always_on;
System.SupportProxy = SysMin;
这是我的主要:
/*
=== main.c ======
*/
#include
#include
#include
#include
#include
/*
=== taskFxn ====
*/
void taskFxn (UArg a0、UArg A1)
{
system_printf ("enter taskFxn ()\n");
Task_sleep (10);
system_printf ("exit taskFxn ()\n"\});
system_flush();/*强制 SysMin 输出到控制台*/
}
/*
=== main ====
*/
int main()
{
Task_Handle 任务;
ERROR_Block EB;
system_printf ("enter main()\n");
ERROR_INIT (&EB);
任务= Task_create (taskFxn、NULL、&EB);
if (task =NULL){
System_printf ("Task_create() failed!\n");
BIOS_exit (0);
}
BIOS_start();/*不返回*/
返回(0);
}
您可以看到、这些是默认文件、我没有更改任何内容。 有趣的一点是,当我根据 c66x DSP 和 SYS/BIOS->典型值(使用完全相同的.c 和.cfg)创建项目时,它可以正常工作,但是它会在控制台中打印输出,而不是 ROV->SysMin:
我搜索了文档和论坛、但仍然无法理解如何使用 xdc.runtime 系统模块、为什么我的代码不起作用? 为什么 DSP 在控制台上打印其输出? 因为我读取了必须使用 SysStd 来实现该目的的某个位置、但如您所见、我正在使用 SysMin (System.SupportProxy = SysMin;)。
