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.

[参考译文] AM2432:"hwiP_armv7r_handlers_freertos.c"似乎未被编译、需要有关&quot 的更多详细信息;读取 exception&quot 中的 DFAR CPU 寄存器

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1395414/am2432-hwip_armv7r_handlers_freertos-c-seems-not-be-compiled-and-more-details-about-read-dfar-cpu-registers-in-the-exception-needed

器件型号:AM2432
主题中讨论的其他器件:AM2434

工具与软件:

尊敬的专家:

由于不确定的原因、该程序将进入"Hwip_data_abort_handler_c"。

我已经在"Hwip_data_abort_handler_c"中添加了函数"read_DFAR" 、但它不起作用。

在调试的表达式监视中、我也没有找到新添加的变量"unsigned int rt"

因此、我想知道是否遵循了更改后的"Hwip_armv7r_handler_freertos.c"。 如果没有、原因是什么、如何才能实现?

顺便说一下、直接在"Hwip_data_abort_handler_c"中添加代码似乎不可访问。 这是一个相关链接。 能否提供更多详细信息?

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1394905/am2432-data-abort-handler-example/5337234#5337234

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

    关于链接的内容、它是否就像上面所说的那样?

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

    您好!

    因此、基于上述代码、

    我知道您正在读取 DFAR 寄存器值,但从未在任何地方使用过它,并且您正在尝试从异常中复位器件。

    实际上、这里的用例是什么?

    在 获得 一个异常后、你想要 进行 SOC 复位、那么为什么不能使用 WDT 而不是从异常处理程序进行复位呢?

    我想您尚未完成 库的编写。

    您 应该按照下面的方法使用 DFAR API 正在调用异常处理程序。

    1.取一段代码片段、然后将其放入 freertos_asm.s 文件、如下所示。

    /*==============================================================================
    *   Get Data Fault Address Register (DFAR) value
    ==============================================================================*/
        .text
    
        .global SDL_UTILS_getDFAR
    SDL_UTILS_getDFAR:
        MRC p15, #0, r0, c6, c0, #0
        BX      lr

    2. 客户端不是从 SCI 复位器件、而是使用 API 来复位器件。

    SoC_generateSwWarmResetMcuDomain ->进行整个 SOC 复位。

    3.使用以下命令编译库。

    调试构建:  

    gmake -s -f .\makefile.am64x.r5f.ti-arm-clang profile=debug

    发布版本 :  

    gmake -s -f .\makefile.am64x.r5f.ti-arm-clang profile=release

    4.编译应用程序  

    此致、

    Anil。

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

    尊敬的 Anil

    感谢您的答复。

    起初、我真想在"Hwip_data_abort_handler_c"中进行 SOC 复位、并使用"Sciclient_pmDeviceReset"、因为它的行为是当程序在 "Hwip_data_abort_handler_c"中执行时 WDT 不起作用。

    但结果是"Sciclient_pmDeviceReset" 在这个时候不工作. 之后我没有注意到操作。

    我将遵循使用的建议  SoC_generateSwWarmResetMcuDomain 中的内容。

    现在、另一个目标 是 查找程序出现的原因。 添加与 读取 DFAR 寄存器值相关的代码。 不幸的是、操作是错误的。

    下面是目前有关 WDT 的内容。

     

    我已经尝试了命令 "gmake -s -f .\makefile.am64x.r5f.ti-arm-clang 曲线=release" 只是现在。但它不起作用。 您能告诉我原因吗?

    此致

    σ

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我尝试了该命令 "gmake -s -f .\makefile.am64x.r5f.ti-arm-clang 曲线=release" 只是现在。但它不起作用。 您能告诉我原因吗?

    实际上、您没有使用 CCS12.7.0版本。

    要执行 make 命令、需要 Cygwin。

    通常、该版本应低于 CCS 版本。 用户无需单独下载。

    只需执行一个操作、下载 CCS 12.7.0版本并进行库编译。

    起初、我真想在"Hwip_data_abort_handler_c"中进行 SOC 复位、并使用"Sciclient_pmDeviceReset"、因为它的行为是当程序在 "Hwip_data_abort_handler_c"中执行时 WDT 不起作用。

    但结果是"Sciclient_pmDeviceReset" 在这个时候不工作. 之后我没有注意到操作。

    [报价]

    看门狗过期后重置 SOC 的方法似乎不正确。

    实际上、在 AM64X/243X 器件上、不支持 在看门狗过期后自行复位 SOC。

    在当前的测试案例中,已经有 SOC 在例外,一旦内核处于例外状态, WDT 中断 也是一个通用中断, 内核 从不会命中 WDT 中断 。 因此、您无法通过 WDT 中断进行 SOC 复位 。

    我已经创建了一个关于如何 在 ESM 模块的帮助下复位 SOC 的常见问题解答。

    请仔细阅读。

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1283237/faq-am64x-am62x-how-to-reset-the-soc dt-whit-timer-expires-in-am64x-and-am62x#:~:text=set%20the%2017%20bit%20of、SoC%20by%20the%20ESM%20module

    此致、

    Anil。

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

    感谢您的提醒。

    CMD 窗口有警告以及是否可以忽略它?

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

    您好!

    请按如下方式定义函数名称。

    请检查第一个功能、 例外情况是您不能读取异常地址。

    因为,我从来没有尝试过这种方法在我的身边。

    此致、

    Anil。

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

    您好!

    是您尝试呼叫的设备  SDL_utils_getDFAR 您的应用程序中的 API?

    此致、

    Anil。

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

    有。

    这是呼叫的位置。

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

    还是另一个角度、是否有更好的方法来查找程序进入"Hwip_data_abort_handler_c"的原因

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

    作为更新、将.end 移到了 asm 的末尾。 S 文件已解决未引用的符号问题

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

    您好、

    我在我这边重现了这个问题、并且这个问题没有将.s 文件链接到应用程序。

    请按照以下步骤操作。

    1.我在下面的文件夹下单独创建了.s and.h 文件。

    2.接下来、将.s 文件添加到 make 文件中、如下所示。  

    3.编译驱动程序

    4.编译应用程序  

    .e2e.ti.com/.../Exception_5F00_r5_5F00_utils.Se2e.ti.com/.../Exception_5F00_r5_5F00_utils.h

    e2e.ti.com/.../makefile.am64x.r5f.ti_2D00_arm_2D00_clang

    此致、

    Anil。

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

    您好!

    感谢  Anil 和 Hang。 关于编译库和项目的问题已经解决。

    现在、请回到原来的问题:

    由于不确定原因、程序将进入"Hwip_data_abort_handler_c"。

    执行这些步骤的目的是分析程序进入 "Hwip_data_abort_handler_c"的原因以及从何处。

    运行一段时间后、异常再次出现。 但是、'的值 gdfarValue "似乎不是某个函数的地址。

    因为我们可以找到函数的地址 0x7XXXXXXX 文件中删除。

    那么、通过上面的信息、我如何在 "Hwip_data_abort_handler_c"中找到最后一个程序地址?

    如果这种方法目前是假的、有没有更好的方法?

    或者另一个角度、是否有更好的方法可以找到程序进入"Hwip_data_abort_handler_c"的原因?

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

    您好、

    该过程正确。

    我们需要检查映射文件中的 DFAR 值。

    实际上、您需要检查映射文件中的0xA8C00B09值而不是 DFAR 变量地址 、然后查看该地址是否属于任何函数。

    我认为您的代码也是从 DDR 运行的。 因此、该地址属于 DDR 地址。

    此致、

    Anil。

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

    您好!

    感谢您的答复。

    有。 我在映射文件中搜索了0xA8C00B09值、但没有找到任何结果。 从内存浏览器,我们可以确认该地址与任何一个函数没有任何关系。

    此外、我检查了寄存器 R14和(R14 - 8)、结果如下所示:

    看来我们不能仅仅通过上述这些信息来实现这一目标。

    这是.map file.e2e.ti.com/.../1.zip

    https://developer.arm.com/documentation/ddi0406/cb/System-Level-Architecture/Protected-Memory-System-Architecture--PMSA-/Exception-reporting-in-a-PMSA-implementation/Data-Abort-exceptions

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

    为纠正这一问题、下面是有关 R14的内容。

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

    您好!

    LP 器件上没有 DDR。

    但是、您的示例是将一个值写入 0xA8C00B09 DDR 地址空间、因为该器件正在获取有关错误的数据。

    您能否在问题发生时分享 DFSR 寄存器值?

    此致、

    Anil。

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

    您好、

    请从调试器窗口共享 DFSR 寄存器值。

    转到"Registers"窗口->点击"System Registers"->选择 DFSR 寄存器值

    此致、

    Anil。

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

    您好!

    谢谢。 这是 "Registers"窗口。

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

    您好、

    实际上、当您 遇到 异常时、至少您应该使 DFSR 值不为零。

    您能否确认、  在 SOC  成为 异常后或异常前您是否得到了 DFSR 寄存器值?

    此致、

    Anil。

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

    您好!

    当电路板出现异常时,我将使用 XDS110通过"加载符号"检查它的状态。 电路板上运行的程序与这次使用的项目相同。 下面是"load symbols"后面的屏幕截图。

    在这张图片中,我们可以找到程序卡在' while (loop != 0U){;} "因为这样、我们可以认为 发生了一个例外。

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

    尊敬的  Anil:

    我们正在测试" RTI 超时 -> ESM 事件 -> CTRL MMR 寄存器 "链接中引用了。

    [报价 userid="525901" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1395414/am2432-hwip_armv7r_handlers_freertos-c-seems-not-be-compiled-and-more-details-about-read-dfar-cpu-registers-in-the-exception-needed/5340144 #5340144"]

    请仔细阅读。

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1283237/faq-am64x-am62x-how-to-reset-the-soc dt-whit-timer-expires-in-am64x-and-am62x#:~:text=set%20the%2017%20bit%20of、SoC%20by%20the%20ESM%20module

    [报价]

    由于.zip 文件中的 syscfg 文件 处于打开状态失败、因此我无法使其清楚其中包含的内容。

    然而、通过比较、syscfg 中似乎没有关于 WDT 和 ESM 模块的配置。 您能告诉我、这是否对?

    此外、我引用了示例"2068.WDG_Reset_AM64X.zip"、并将相关文件添加到了我的当前项目中、但在 syscfg 中没有关于 WDT 和 ESM 的配置。

    结果表明程序未正常运行。 因此、我无法验证此方法"  在 WDG 计时器到期后使 SoC 复位 "。

    我们现在需要这种应用方法。

    您能告诉我它无法工作的原因、并给我一些建议吗?

    此致

    σ

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="580575" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1395414/am2432-hwip_armv7r_handlers_freertos-c-seems-not-be-compiled-and-more-details-about-read-dfar-cpu-registers-in-the-exception-needed/5347349 #5347349"]

    我们正在测试" RTI 超时 -> ESM 事件 -> CTRL MMR 寄存器 "链接中引用了。

    [报价]

    尊敬的  sigong:

    在讨论上述问题之前、我对 DFSR 值始终为零感到惊讶。

    如果您有 EVM 硬件并且确实有 DDR、我们可以再做一个测试用例吗?

    那么、在 EVM 上运行该应用程序、看看同一问题是否正在重现。

    这将告诉我们、您的 LP 应用似乎在 DDR 上写入了一些内容、从而产生了问题。

    现在、我们来看一下 WDT +ESM 模块。

    如果未打开 cfg 文件 、则这可能是 cfg 版本的问题。

    我们没有在系统 cfg 中进行任何配置。

    我们从 muck+sdk 获取最新示例、

    C:\ti\mcu_plus_sdk_am243x_09_02_00_50\examples\sdl\rti\uc1

    然后从常见问题解答中执行以下步骤。 如果仍然无法正常工作、请分享您的代码我可以添加所有更改。

    但是、请按照常见问题解答中清楚说明的步骤操作。

    此致、

    Anil。  

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

    尊敬的  Anil:

    有一个关于"数据中止"问题的链接、我们正在等待您团队的分析结果。

    从您的角度来看、似乎还有另一个原因可能导致了这个问题。 您能给我们更多的建议和细节吗?

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1396873/am2432-ethernet-ip-stack-enter-data-abort-after-several-hours-test/5346654#5346654

    我们有 AM2434_LP 测试板(EVM)。 但由于 应用方面的原因、我们对自己的开发板也进行了很多改动 、比如外设、PHY、OSPI 闪存及相应的代码。 如果时间允许、我们将对 EVM 进行测试。

    问题 'RTI 超时的方法 -> ESM 事件 -> CTRL MMR 寄存器'  有效的问题、它终于可以工作了。 感谢您的建议。

    此致

    σ

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

    尊敬的  sigong:

    关于此问题 'RTI 超时的方法 -> ESM 事件 -> CTRL MMR 寄存器'  有效的问题、它终于可以工作了。 感谢您的建议。

    很高兴听到您已启用看门狗。

    我们拥有 AM2434_LP 测试板(EVM)。 但由于 应用方面的原因、我们对自己的开发板也进行了很多改动 、比如外设、PHY、OSPI 闪存及相应的代码。 如果时间允许、我们将对 EVM 进行测试。

    是的、我理解您的担忧。 好的、如果您忙于其他工作、我们可以在稍后进行此测试用例。

    e2e.ti.com/.../5346654

    Archit Dev 已经在处理上述问题。 我不熟悉以太网应用。 因此,最好从以太网专家那里获得意见。

    如果您没有任何疑问,请关闭此主题。

    此致、

    Anil。

    [报价]