This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/TMS320C6657:无法使 Log_info0()正常工作。

Guru**** 2568585 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/623862/rtos-tms320c6657-cannot-get-log_info0-to-work

器件型号:TMS320C6657
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

你好

我编写了一个非常简单的程序(请参阅下面的 main.c 和 app.cfg)。System_printf()的输出会转到 SysMin 并在那里得到它。 但是 Log_info0()的输出... 我在 LoggerBuf 中找不到它。 我还尝试了 LoggerRunMode,但它也不起作用。 必须有一些非常基本的东西、我做错了。

万一它很重要:评估板 TMDSEVM6657L、CCS 7.2.0.00013、BIOS_6_46_05_55、UIA_2_00_06_52、xdctools_3_32_02_25_core

任何建议都将非常有帮助。 谢谢!

此致、

Pablo

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 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 Task = xdc.useModule('ti.sysbios.knl.Task');
var LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');
VAR LoggerStopMode = xdc.useModule('ti.uia.loggers.LoggerStopMode');

/*
取消注释此行以全局禁用断言。
*所有模块继承'库'模块的默认值。 您
*可以使用 Module.common$按模块覆盖这些默认值。
*禁用断言将节省代码空间并提高运行时性能。
Defaults.common$.diags_ASSERT = Diags.always_off;
*/

*
取消注释此行以防止模块名称加载到目标上。
*模块名称字符串放置在.const 段中。 将此
*参数设置为 false 将节省.const 段中的空间。 错误和
*断言消息将包含"未知模块"前缀、而
不是*实际模块名称。
*/
Defaults.common$.namedModule = true;

/*
最小化系统中的退出处理程序数组。 System 模块包括
*一组函数,这些函数在 System_atexit()中注册,
*由 System_exit()调用。
//
System.maxAtexitHandlers = 4;

//
*取消注释此行以禁用 Error print 函数。
*禁用时,我们会丢失错误信息,因为
*不打印错误。 如果
*由于 Error_print()函数
*调用 System_printf(),禁用 raiseHook 将节省一些代码空间。
error.raiseHook =空;
*/

/*
取消注释此行以防止*在
目标上加载错误、断言和日志字符串。 这些字符串放置在.const 段中。
*将此参数设置为 false 将节省.const 段中的空间。
*错误、断言和日志消息将打印原始 ID 和 args、而不是
*格式化的消息。
//
text.isLoaded = false;

//
*取消注释此行以在
程序退出时禁用 SysMin *的字符输出。 SysMin 向循环缓冲区写入字符。
*可以使用 ROV 中的 SysMin Output 视图查看该缓冲器。
//
SysMin.flushAtExit = false;

//
* BIOS 模块将为系统创建默认堆。
*指定此默认堆的大小。
/bios.heapSize
= 512;

/*系统堆栈大小(由 ISR 和 Swi 使用)*/
Program.stack = 0x400;

// System_printf ()的循环缓冲区大小*/
sysmin.bufSize = 128;

//
*为整个系统创建和安装记录器
*/
var logerBufParams = new LoggerBufParams (

var LoggerBufParf = 0);var loggerBufParams = 0.Params = loggerBufParams;var loggerfParams = 4.
Defaults.common$.logger = logger0;
Main.common$.diags_INFO = Diags.always_on;

System.SupportProxy = SysMin;

/*
构建自定义 BIOS 库。 自定义库将小于
*预编译的"已检测"(默认)和"未检测"库。
*
* BIOS.logsEnabled 参数指定
是否在此自定义构建的 BIOS 中启用日志记录*。 RTA 和
* UIA 分析工具使用这些日志。
*
* BIOS.sertsEnabled 参数指定 BIOS 代码是否
*包括 assert()检查。 将此参数设置为"false"将生成
*更小、更快的代码、但建议
在*早期开发中启用断言、因为断言()检查将捕获大量编程
*错误(无效参数等)
//
BIOS.libType = BIOS.LibType_Custom;
BIOS.logsEnabled = true;
BIOS.assertsEnabled = true;

//
*创建任务。 'taskFxn'函数可在 main.c 中找到
//
var task0Params = new Task.Params ();
var task0 = Task.create ("&taskFxn"、task0Params);
LoggingSetup.sysbiosTaskLogging = true;
LoggingSetup.loadLogging = true;

// Debug 填充*/BIOS.customCCOpts
= BIOS.CCOpts.replace("-o0");

/*
 * ==== main.c ======
 *

#include

#include
#include
#include
#include

void taskFxn (UARg a0、UARg A1)

   system_printf ("enter taskFxn ()\n");

   Task_sleep (10);
   log_info0(“诸如此类”);

   system_printf ("exit taskFxn ()\n"\});


/*
 * ==== main ====
 *
int main()

   /*
    *使用 ROV->SysMin 查看循环缓冲区中的字符
    *
   system_printf ("enter main()\n");

   BIOS_start();   /*不返回*/

   返回(0);


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已将您的疑问转发给软件专家。 他们的反馈应发布在此处。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有几个 TI RTOS 论坛主题涉及此问题。 您是否查看过它们:
    e2e.ti.com/.../347574
    e2e.ti.com/.../347591
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    巴勃罗
    我将文件复制到一个新项目中、然后我注释掉了引用"LoggingSetup"的行、因为我没有安装 UIA。 构建并运行应用程序后、我能够在 ROV 中的 LoggerBuffer.Records 中查看日志记录。 这是您在寻找的地方吗? 您能否尝试同样的方法、看看注释掉这些行是否会对您有所帮助?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rahul

    感谢您的提示帮助。

    你建议的论坛主题对我来说非常有趣,但对这个问题来说不是很有趣。

    此致、

    Pablo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你 Sasha。 它的工作原理。
    现在我有点困惑。 我以前认为、"日志记录"的方法是 UIA。 但事实证明、UIA 会阻止它、至少在我使用它的方式中是如此。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    巴勃罗
    UIA 是进行日志记录的方法之一。 我对 UIA 不是很了解、我评论了参考 UIA 软件包的行、因为我没有安装它。 如果您想使用 UIA、请告诉我、我可以找到一个了解更多信息的人来帮助您。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当然可以、Sasha。
    我必须承认、我不熟悉 TI-RTOS。 虽然我目前并不绝对需要 UIA、但我计划利用这一最初的经验、在几个月内尝试更多参与的项目。 我一直在阅读 UIA 的相关信息、但显然不足以让入门级项目正常运行。
    此致、
    第页
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pablo、

    TI-RTOS 支持在 Log_XYZ 下插入的多种类型的记录器。 LoggerBuf 是此类记录器之一。 这是我们在推出 UIA 产品之前使用的主要记录器。 UIA 提供更多记录器(例如 LoggerStopmode、LoggerRunmode 等) 要使 CCS 中的系统分析器正常工作,您需要使用 UIA 记录器(而不是 LoggerBuf... 事后看来、这是我们的糟糕决策)。 LoggerStopmode 与 LoggerBuf 非常相似(例如用于保存日志记录的内部缓冲区)。 LoggingSetup 是一个模块,希望它能使配置记录器更容易。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Todd 的解释。

    或许我对 TI 的工作方式了解有点慢、但这将有助于我看到描述 简单程序的日志记录时间线的图片。 也就是说、在什么时候进入什么缓冲区、假设在一个简单的程序中、只需从尽可能少的任务中进行日志记录。 此外、我不清楚调试器选择(硬件)会影响选择的方式。

    可能已经有一个指南对其进行了确切解释、但我还找不到。

    此致、

    Pablo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pablo、

    spruh43f.pdf...probably 中的文档太多了。 下面是简要概述

    LoggerStopmode:
    调用 Log_xxx 时、二进制日志记录会写入由记录器实例管理的缓冲区。 缓冲区填满后、默认情况下将自动换行。 在进行 Log_xxx 调用的线程的上下文中完成对缓冲区的写入。 注意:如果多个线程尝试同时调用 Log_xxx、日志将管理线程安全。

    您可以有多个记录器实例。 例如,LoggingSetup 为所有内核模块(除 Load 外)创建一个记录器,为 Load 创建一个记录器,为要使用的应用程序创建一个记录器(也称为 Main())。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 Todd 为文档提供了指针。 我以前没见过这种情况。

    此致、

    Pablo