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.

[参考译文] SDK-AM243X:MCU-PLUS-SDK 设计人员打算如何使用 SDK 来确定哪个问题导致了错误?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1355220/mcu-plus-sdk-am243x-how-did-the-sdk-designers-intend-for-users-of-the-sdk-to-identify-which-problem-caused-an-error

器件型号:MCU-PLUS-SDK

在整个 SDK 中、有一些函数会为多个不同的错误条件分配相同的错误值。 随机示例是来自八进制 SPI 驱动程序的代码

静态 int32_t Flash_norOspiWrite (Flash_Config *configuint32_t offsetuint8_t * buf、uint32_t len)
{
int32_t status = SystemP_Success
Flash_Nor OspiObject *obj =(Flash_Nor OspiObject *)(config->object);
Flash_Dev *devCfg = config->devConfig;
Flash_Attrs *attrs = config->attrs

/*验证地址输入*/
if ((offset + len)>(atts->flashSize))
{
status = SystemP_failure;
/*检查偏移量是否与页对齐*/
if (0!=(偏移% atts->pagesize))
{
status = SystemP_failure;

同一错误值被分配给两个不同的错误条件。 这似乎在整个代码库中重复。

这被认为是我组织中非常糟糕的代码、因为调试代码的唯一方法是每次遇到错误时使用断点来规范 API 代码。 下游代码无法针对错误执行任何智能化操作、如果需要捕获和处理错误条件、则必须在下行函数中重写验证校验代码。

捕捉和调试用户代码中错误的建议方法是什么? 可能有一种我不知道的技术吗?

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

    旅行者们好!

    感谢您的提问、我已经注意到您的关注。

    ‘s、当前的"状态"具有少量预定义且在整个 SDK 代码中使用的不同宏。  
    其中很少包括 SystemP_SUCCESS 和 SystemP_FAILURE。

    我可以理解您的观点、即在整个代码的各个环节都定义了一条类似故障的简单声明。 但在大多数情况下、这就是如何正确调试。 假设有一个 API 启用了 PHY、如果启用了 PHY、则返回成功、否则如果未启用 PHY、则返回失败。 在这种情况下、如果 PHY 启用失败、则控制台上会打印某些日志、提示"PHY 启用失败!! 不使用 PHY 继续!"。

    这应该为开发人员提供需要注意的特定 API、因为它规定了相应的故障日志消息。  
    除此之外、CCS 还提供了一种简洁的代码调试方法、其中包含观察点、断点、内存浏览器和大量可在调试步骤上提供帮助的功能。
    此外、我将介绍高效调试并在几个工作日内与您联系的最佳实践。

    此致、

    瓦伊布哈夫

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

    您好、Vaibhav、

    在考虑您的回应后、我不确定您的调试做法是否会有任何新的或有用的东西。

    请将以下内容告知 SDK 架构师或团队经理:

    使用唯一的错误编号(您有200万个可用错误!) 对于每个代码路径、SDK 用户可以快速识别错误的确切性质、并消除配置错误或对 API 设计方式产生误解等潜在原因。 调试日志打印并不总是足够或可用。

    请考虑使用每个 SDK 调用链中每个错误都唯一的错误编号。 SystemP_failure 适用于具有单个错误原因的函数。 但是、如果该函数是从子函数调用传播错误、或有多个故障源、则应使用该调用链中唯一的错误编号。

    我提到这一点是因为我花费了大量的时间来复制我自己代码中的前提条件以找出错误的原因、或者设置断点和跟踪以找出错误是什么。 如果您可以通过简单地使用良好的错误编号实践来节省我、单个用户、那么请考虑可以节省的所有客户的小时数!

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

    旅行者们好!

    我注意到您的关切。 我会将此 E2E 分享给相关人员、让他们将您的意见考虑在内。

    同时、我将这些信息分享给相关人员、希望大家访问 https://software-dl.ti.com/ccs/esd/documents/users_guide/ccs_debug-main.html

    感谢您的耐心等待。

    此致、

    瓦伊布哈夫