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.

[参考译文] AM263P4:SDK 修复建议

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1587971/am263p4-sdk-fixes-suggestions

器件型号: AM263P4

  1. 共享存储器写入器 API 应具有放置字符或缓冲区的选项。 理想情况下我们会拥有两个 API
void DebugP_shmLogWriterPutChar(char character);
int DebugP_shmLogWriterPutBuf(const char* buf, uint16_t num_bytes);


2.`DebugP_shmLogRead` API 应配置为在处理一定数量的日志条目后生成。 建议将字段放在`DebugP_ShmLogReaderCtrl`内

3. DebugPShmWriter API 应可配置为禁用(或配置)日志消息前奏。 如果没有这一点,就不可能创建机器可分割的结构化日志,例如 JSON/CBOR
 
4、`DebugP_shmLogReader.c`中的行 buf 大小与 `DebugP_shmLogWriterPutChar`的内部缓冲区之间似乎存在一个偏离 1 的错误

如果您认为这些内容有用、我很乐意在 https://github.com/TexasInstruments/mcupsdk-core 上提出有关这些更改的 PRS

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

    尊敬的 Carl:

    感谢您提出上述建议并报告您发现的错误、让我在内部与团队讨论此问题、然后返回给您。

    此致、
    Shaunak

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

    尊敬的 Carl:

    1.在 1 上、如果我理解正确、拨打 DebugP_shmLogWriterPutChar 所需的次数应该能得到相同的结果吗? 您是否也看到了任何性能瓶颈。 您是否预计这里会出现巨大的性能瓶颈? 我已经将此问题传达给 SDK 团队、但我不确定这是否会被视为有效的错误、因为在更高的优化级别下、性能差异应该非常小/没有。 会在讨论继续时提交错误。

    2. JIRA 已归档: jira.itg.ti.com/.../MCUSDK-15062 (内部跟踪链接)

    3. JIRA  提交: jira.itg.ti.com/.../MCUSDK-15061 (内部跟踪链接)

    4、错误归档: jira.itg.ti.com/.../MCUSDK-15060 (内部跟踪链接)

    此致、
    Shaunak

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

    非常感谢第 2、3 和 4 项

    对于项目 1 — 如果 SDK 团队决定不是完全由你们决定的优先级。

    但是,我想非常清楚,即使在-O3 上的穿孔也是相当重要的。

    编译器不会 跨 TU 边界进行优化。

    这些 API 旨在用于日志记录/故障排除、应该尽可能轻量级。 从用户缓冲区复制到 SDK 内部缓冲区、并为每个单个字节产生堆栈帧推送/弹出绝对不是编译器能够在调用站点进行优化的事情。  

    例如、请参阅下面的。

    下面的代码肯定不会进行优化以将字符合并到字符串文字或 char/uint8_t 缓冲区中。  编译器资源管理器的证据。 即使在 O3 上 、您也会看到 5 个堆叠架的推/弹出、而不是单个堆叠架。

    extern void DebugP_shmemPutchar(char c);
    
    // Original function
    void User_writeMessage() {
        DebugP_shmemPutchar('h');
        DebugP_shmemPutchar('e');
        DebugP_shmemPutchar('l');
        DebugP_shmemPutchar('l');
        DebugP_shmemPutchar('o');
        DebugP_shmemPutchar('\n');
        DebugP_shmemPutchar('\0');
    }
    
    // WILL __absolutely__ not be optimized to
    void User_writeMessage() {
        const char* message = "hello\n";
        DebugP_shmemPutBuf(message, sizeof(message));
    }


    很明显, 一个现实世界    的例子更可能有函数 (uint8_t*fmt, vargs args) 或其他函数,因此示例代码只是为了证明这个点。

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

    尊敬的 Carl:

    感谢详细的解释,我将进一步与团队内部,我已经提出了上述要求,谢谢.

    此致、
    Shaunak