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/EK-TM4C1294XL:无法识别 LoggerStream2程序命令

Guru**** 2463330 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/659794/rtos-ek-tm4c1294xl-loggerstreamer2-program-commands-not-recognized

器件型号:EK-TM4C1294XL
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

我尝试创建 由  每个实例中定义的主缓冲区和交换远程缓冲区处理程序函数指向的 UIA LoggerStreamer2应用程序管理的缓冲区。   使用 RTSC 示例作为指南 、在示例 中找不到 LoggerStream2模块的命令语法、示例包括在  C 文件顶部添加的内容。 已尝试 XDC 运行时库头文件中的其他包含 、任意尝试的任何内容似乎都没有命令结构。

是否有人知道头文件的名称是什么 、或者是否 存在头文件名称、或者 是否也在转换为 ROM 的过程中、现在已被弃用? 如果现在已弃用 、则调用日志缓冲区的实例中的 PRIME 和执行指针似乎不起作用、会从 每个实例中配置的缓冲区最小值写入到传输。 RTSC 索引(模块 ti.uIA.SysBIOS.LoggerStream2)

#include 
#include 
#include 
#include 

LoggerStreamer2_getContext ()

LoggerStreamer2_initBuffer()

//*触发交换函数*/
LoggerStreamer2_flush ();

配置指令:

LoggerStream2.TransferType_lossy;
LoggerStream2_Priority_High;
LoggerStream2.TransferType_Reliable;
LoggerStream2_TransportType;UART 

 

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

    为什么选择 LoggerStreamer2? 它虽然受支持、但专为希望拥有一些非常有创意的日志记录框架的团队而设计。

    以下是您可能感兴趣的日志记录的详细说明: processors.wiki.ti.com/.../Debugging_Exceptions_With_TI-RTOS

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

    我已附上 LoggerStreamer2的示例。 我没有在异常处理程序中对非易失性存储器执行写操作、但是主函数和交换函数应该正常工作。 注:在.cfg 中、我没有使用 LoggingSetup。 我只需手动设置我想要进行记录的模块。

    e2e.ti.com/.../loggerstreamer2_5F00_example.zip

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

    LS2背后的想法是从 RTOS 中删除缓冲区处理并让应用程序对其进行管理。  如 您所述、我在 RTSC 文档中没有阅读有关 LS2团队支持的任何内容。 另一个 UART 传输记录器示例使用空闲模块、因为它似乎将事件写入仪表主机(RTOS 分析器)、并丢弃发送到主机的数千个数据包。 LS2不限于 CPU 空闲时间写入数据并将数据流式传输到仪表主机、因此它是无损的。

    这是希望 将应用程序配置为通过 UIA 传输到 主机来管理缓冲区的主要原因。 RTOS Wiki 甚至不将 LS2列为日志 记录方法、我在这里几乎找不到任何帮助。

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

    [引用 user="ToddMullanix"]我已附上 LoggerStreamer2[/quot]的示例

    LS2示例工程 不使用 上述文章中概述   的任何 RTSC 指令、并且无法将特定日志缓冲区的上下文设置为 R/W、以用于由工程师为仪表主机选择的 UART 传输。 根据与 LS2主题相关的当前 RTSC 文档、不会识别任何命令。

    不会按照 UIA 文本遵循日志记录缓冲区示例 zip 将实例上下文值设置为特定日志记录 缓冲区。 这就是为什么 Exchange 函数发出指令来读取 返回的上下文指向的特定缓冲区的原因。

    loggerStream20Params.context = 0;
    loggerStream21Params.context = 1;
    loggerStream22Params.context = 2; 

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

    RTSC LS2示例程序文档中缺少以下两项内容。  也许 LoggerStream2库名称最近已更改、但其中的内容似乎 允许  LS2 命令语法查找的应用程序构建索引。 代码分析 进展顺利、索引器 不断执行 后台进程、尝试导入旧工程以构建每次挂起 CCS 的索引。 由于   未知原因、不得不杀死 CCS 并取消后台进程多次堆积。

    #include 
    #include 

     

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

    这两者 包括使 CCS7.3代码分析 索引分解并使用 最新 的 Java 代码更新挂起 CCS。

      导入 (empty_RTOS) 项目之前恢复的项目工作空间(.metadata)似乎修复了旧版/索引挂起等问题。 奇怪的是、我从未导入过仅上述示例的旧工程两次。   导入到 CCS7.3的示例 LS2工程 会发布 控制台警告 消息、"较新的工程需要更新 CCS7.4 "。

    似乎 项目导入 可能是在恢复 WS .metadata 后触发元数据崩溃的原因。  害怕再次导入 LS2示例 、因为 CCS7.3中的内容变得疯狂!

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

    我忘记了 LoggerStream2_initBuffer API。 它确实简化了应用程序代码。 我在.cfg 中添加了上下文设置、并展示了在新示例中实现该设置的示例。

    我使用的是 CCS7.4。 您可以抓取.cfg 和 empty.c 文件的内容。 我没有更改任何项目设置。

    e2e.ti.com/.../loggerstreamer2_5F00_exampleB.zip

    Todd

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

    感谢您、因为我遇到了类型不匹配的绑定。

    实例名称是位唯一条目""。  奇怪的是,initBuffer 调用抱怨分配给发送给 UART0的缓冲区的 Char 类型,因为 (Char * a)与下面的 UIA LS2 InitBuffer 句柄不兼容。 它仍然向 COM4发送垃圾数据、而是泛洪 Hwi 执行数据。 我认为 initBuffer 与任何8位调用不兼容,但我发现 UARTprintf()转换为 USB0输出(UINT32_T)数据类型时存在类似问题。 日志记录缓冲区数据类型可能需要与 UART0相同的数据类型、根据   UARTutils.c 的写入方式判断、它似乎具有8位 FIFO。  我将把 LS2示例文件添加到一个空项目中。

    /*乒乓填充两个缓冲区*/
    if (id =0){
    LoggerStreamer2_initBuffer("loggerStream20",buffer_0[0],0);
    LoggerStream2_initBuffer("loggerStream20",buffer_0[1], 0);
    返回((ptr) buffer_0[0]); 
    TI_UIA_SYSBIOS_LoggerStream2_initBuffer__E (ti_UIA_SysBIOS_LoggerStreamer2_Handle __inst, XDC_PTR buffer,XDC_UINT16 src); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您需要使用句柄来 initBuffer,而不是字符串。 请看我的示例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="ToddMullanix">您需要使用句柄来 initBuffer,而不是字符串。 请看我的示例。

    这是实例的句柄、 两种描述实例的方法 都产生相同的结果。

    两个示例实际上都不会将任何 UIA 缓冲 记录器数据发送到 RTOS 分析器、因此从不需要将对齐的 UINT32_t 缓冲 区数据转换为 UART0 字符 uint8_t 数据类型。 心跳中的 System_print()不会打印 UIA 缓冲 区数据 ,并且缺少 一个 System_flush()指令,它需要该指令才能将每个周期实际转换为调试控制台。 我添加了 System_flush(),但调试控制台仍然没有通过字符串或句柄名称从已初始化的缓冲区打印任何数据。  奇怪    的是、CCS 索引器会不断挂起、尝试从 UIA 指令导入旧数据、并阻止 CCS 工作区.metadata 在重建索引时正常执行。 我已经多次还原了工程.metadata 、因为此问题会 不断重复、导致许多事情难以多次终止 CCS 后台进程树。  

    对 LS2代码所做的操作不是遵循 RTSC (文档)、以便通过 UART0将适当的 Exchange Fxn (uint32_t)缓冲区移交给 UIA 仪表主机。  文本 状态应用 程序必须在 交换 Fxn 时触发缓冲 器以清除 内容(读取缓冲器)、如下所 示。 缓冲区数据实际上 正在  COM4上写入 UART0 FIFO、但 UIA_HDR 很可能被改编为数据类型不匹配、并且不会在 RTOS 实时会话窗口中打印任何数据。

    /* LoggerStreamer2缓冲器*/
    #define BUFSIZE_0 1024
    #define BUFSIZE_1 1024
    #define BUFSIZE_2 1024
    
    //记录缓冲器*/
    char buffer_0[2][BUFSIZE_0];
    char buffer_1_2][BUFSIZE_1];
    bufferbufferbufferbuffer_2[2]
    
    ;
    
    * BUFSIZE_RTOS *对象指针加载到*对象的* Loggers_2
    /*确定记录器实例上下文*/
    uint32 id =(uint32) LoggerStreamer2_getContext (log);
    
    /*乒乓填补两个缓冲区*/
    如果(id = 0){
    LoggerStreamer2_initBuffer (log、buffer_0[0]、0);//"loggerStreamer20"
    LoggerStreamer2_initBuffer (log、buffer_0[1]、0);//"loggerStreamer20"
    返回((ptr) buffer_0[0]);
    }
    /*乒乓填补两个缓冲区*/
    如果(id = 1){
    LoggerStreamer2_initBuffer (log、buffer_1[0]、1);//"loggerStreamer21"
    LoggerStreamer2_initBuffer (log、buffer_1[1]、1);//"loggerStreamer21"
    返回((ptr)(buffer_1[0]));
    }
    /*乒乓填补两个缓冲区*/
    如果(id ==2){
    LoggerStreamer2_initBuffer (log、buffer_2[0]、2);//"loggerStreamer22"
    LoggerStreamer2_initBuffer (log、buffer_2[1]、2);//"loggerStreamer22"
    返回((ptr)(buffer_2[0]));
    }
    
    返回(空);//错误
    } 

    /* RTOS 分析器缓冲区日志记录的 Exchange 指针*/
    PTR ExchangeLS2 (LoggerStream2_Object *log、ptr *Full)
    {
    静态 uint32_t count_0;
    静态 uint32_t count_1;
    静态 uint32_t count_2;
    
    uint32 id =(uint32) LoggerStreamer2_getContext (log);
    
    //LoggerStream2_getContents();
    
    如果(id = 0){
    COUNT_0++;
    while (1){
    LoggerStreamer2_getContents (log、(PTR*) buffer_0、256、*完整);
    /*每个记录器的2个缓冲器之间的乒乓*/
    UARTUtils_loggerSend ((ptr*) buffer_0、count_0);
    return ((ptr *) buffer_0[count_0 & 1]);
    }
    }
    如果(id = 1){
    COUNT_1++;
    while (1){
    LoggerStreamer2_getContents (log、(PTR*) buffer_1、256、*完整);
    /*每个记录器的2个缓冲器之间的乒乓*/
    UARTUtils_loggerSend ((ptr*) buffer_1、count_1);
    返回((PTR*) buffer_1[count_1 & 1]);
    }
    }
    如果(id ==2){
    COUNT_2++;
    while (1){
    LoggerStreamer2_getContents (log、(PTR*) buffer_2、256、*完整);
    /*每个记录器的2个缓冲器之间的乒乓*/
    UARTUtils_loggerSend ((ptr*) buffer_2、count_2);
    返回((PTR*) buffer_2[count_2 & 1]);
    }
    }
    返回(空);//错误
    } 

    /*
    === UARTUtils_loggerStream2发送====
    *插入 LoggerStreamer2以发送无损日志数据。
    //
    int UARTUtils_loggerSend (ptr * Pbuf、int size)
    {
    /*确保 UART 已初始化*/
    if (loggerHandle){
    /*
    *一次最多写入16个字节。 此函数在空闲和期间运行
    *不应绑定其他空闲函数运行。 空闲循环
    *通常足够短、此函数将在所有时间之前再次运行
    16个字节已从 FIFO 发送。
    *
    如果(大小< 256){
    返回(UART_writePolling (loggerHandle、(void *) Pbuf、size));
    }
    否则{
    返回(UART_writePolling (loggerHandle、(void *) Pbuf、256));
    }
    }
    否则{
    返回(0);
    }
    } 

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

    即使  实例名称是  句柄名称或字符串名称、指向 LS2交换缓冲区数据类型的 Exchange Fxn 指针也会出现问题。 以某种方式、8位(char)数据类型使用 UART0空闲记录器示例 、其中 RTOS 处理 缓存传输至 UART0。 因此、在    该示例中、8位(char)缓冲区数据类型似乎是一种经过验证的 UIA_HDR 惯例。

     UART0再次向 COM4发送二进制数据、但 UIA_HDR 必须进行改编甚至丢失、因为调试 RTOS 实时会话窗口 保持数据不变、无效。 不确定  是否存在 WA、此时尝试 XDC_Char、Char 和(uint32_t) Exchange Fxn 日志缓冲区类型 不会编译而不会出现错误。 似乎的想法是 应用 程序将 每个缓冲区卸载到  通过(日志记录设置)选择的传输中、而不是混合 仪表主机所需的合并(uint32_t) UIA_HDR 信息。

    FWI:使用    (typedef XDC_PTR)通过标头指针 R/W 记录缓冲区进行间接存储器寻址 是一个 WA、用于将 UARTutils.c (char)数据类型冲突到 UART0 FIFO 中。

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

    [引用 user="BP101" LoggerStreamer2_initBuffer("loggerStreamer20", buffer_0[0], 0);

    无效。 字符串是.const、而不是句柄。 看看它的地址。 例如、我在.cfg 中使用它

    VAR LoggerStreamer2 = xdc.useModule('ti.uia.sysbios.LoggerStreamer2');
    LoggerStream2.transportType = LoggerStream2.TransportType_custom;
    LoggerStream2.isTimestampEnabled = true;
    var logerStreamer2Params =新 LoggerStreamer2.Params();
    loggerStreamer2Params.instance.name ="loggerStreamer";
    logerStreamers2Params.primeFxn ="&logPrime";
    logerStreamers2Params.exchangeFxn ="&logExchange";
    LoggerStreamers2Params.bufSize = 1024;
    loggerStreamers2Params.context = 1;
    Defaults.common$.logger = LoggerStream2.create (logerStreamer2Params);
    program.global.loggerStreamer 20 =Defaults.common$.logger;

    在交换函数中、我打印出这个(obj 是传入记录器对象)

    System_printf ("0x%x 0x%x 0x%x%x\n"、obj、loggerStreamer 20、"loggerStreamer");

    这是输出  

    0x200024c4 0x200024c4 0x3694

    请附上一个示例项目、您认为该字符串与句柄相同。

    Todd

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

    您好 Todd、

    [引用 user="ToddMullanix"]

    LoggerStreamer2_initBuffer("loggerStreamer20", buffer_0[0], 0);

    无效。 字符串是.const、而不是句柄。 看看它的地址。 例如、我在.cfg 中都有这种情况。

    奇怪的是、名称在  LS2模块 GUI 中被称为(句柄)、编译器可能会将 符号链接 到索引中的句柄名称。  奇怪的 CCS7.4 C 示例 (empty.c)索引器尝试导入和迁移旧 符号、并 在 每次打开 CCS7.3索引器时挂起。    

    您是否注意"loggerStreamer20") 到我在上面发布的代码中将 LoggerStream2_initBuffer_InitBuffer()句柄(更改为(Log),没有任何区别。  System_printf()语句 (示例)似乎 使用 uint32_t 数据类型来打印控制台文本。  UART0 (char uint_8T)不 接受 (uint32_t)记录器 UIA 数据包标头 数据。 另一个问题 System_printf()只打印一次记录器缓冲区内容 ,因为没有任务触发 Exchange Fxn 对日志打印的调用以将 缓冲区内容获取或刷新到 UART0中。

     刷新任务循环仍使用 实例句柄("loggerStreamer20")我 将 尝试修改 标头以传递日志实例上下文。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    UIA_Packet 报头是四个32位字。 这似乎推断 LoggerStream2_InitBuffer()不能像 LS2示例所使用的那样使用数据类型(char)构建缓冲区数组。 警告:(LoggerStreamer2_Object *log)与数据类型(char)不兼容。

    初始化 UIA 数据包标头:
    C 概要:
    void LoggerStream2_initBuffer (LoggerStreamer2_Handle handle、ptr buffer、uint16 src);

    参数
    句柄—以前创建的 LoggerStreamer2实例对象的句柄
    Buffer (缓冲区)—指向 LoggerStreamer 2将用日志事件填充的缓冲区的指针。 前四个32位字将包含 UIAPIT_HDR 结构。
    SRC—用于初始化 UIA 源地址。 对于单核器件、这通常为0。 对于多核器件、它通常对应于 DNUM (在 C6xxxx 偏差上)或 IPC MultiProc ID。 对于所有内核、它必须是唯一的、并与系统分析仪端点配置中的配置相匹配。

    详细信息

    此 API 用于在将缓冲区提供给 LoggerStreamer 2 (通过初始化或交换)之前对其进行初始化。 此函数初始化缓冲器的 UIAPPIT_HDR 部分。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我重新编写了上述 POST 上的交换部分、并将(UARTutils.c) UART0更改为接受指向日志缓冲区上下文的指针。  也离开了收割台的 LS2prime (PTR)、但没有什么不同。

       LS2 Exchange Fxn 似乎 仍然自动查询 缓冲区交换到 UART0、而不是记录 BufferFlush (log)任务强制执行数据包交换。
    [LoggerStreamer2_getContents (log、(PTR*) buffer_1、256、*完整)]

    LoggerStream2模块必须使用 Clock_tick 来交换缓冲区 、因为 UART0输出 数据 会产生 字符。 UART0数据仍不更新 RTOS 分析器 、但会打印字符 以调试监视器 COM4、并且编译时出现0错误、无警告。