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.
工具与软件:
尊敬的专家:
我有一个用于 AM243X R5F 的软件工程
该软件使用两个内核、每个 FreeRTOS 均在运行、一些硬实时中断(IRQ 和 FIQ)会中断系统。 我们还通过 DebugP_LOG 使用到 UART 的调试输出
SysConfig 内核#1: 启用 UART 日志和 启用共享内存日志读取器
SysConfig 内核#2:启用共享存储器日志写入器
我发现硬实时任务(IRQ 和 FIQ)未定期运行、这会导致系统出现时序故障。 仅当我从 CCS Debugging 中运行软件、且"Debug Outputs"处于活动状态时、才会发生这种情况。 如果软件从闪存运行(但仍然可以看到 UART 的调试输出)、问题就会消失。 如果我删除对 DebugP_LOG 的所有调用、该问题也会消失。
在 DebugP_log 的情况下、调试会话为什么会停止系统?
BR
Alexander
调试配置为:
您好、 Alexander、
实际上,当你使用 DebugP_LOG 时,这个 API 用于在 UART 寄存器上写入数据。
因此、在向 UART 寄存器写入数据之前、所有中断都将被禁用。 写操作完成后停止。 它启用所有中断。 因此、您可能会延迟中断。 但是、FIQ 通常不起作用。由于 FIQ 是最高优先级、而不是 IRQ、因此在 MCU+SDK 中、在所有关键部分中、我们仅禁用 IRQ、而不禁用 FIQ。 因此、FIQ 基本上不起作用。
请分享有关哪些外设配置为 IRQ 或 FIQ 的详细信息?
根据上面的注释、内核2中未启用 DEBUG_LOG。
因此、我假设这些问题属于核心问题1?
请确认。
您是否在两个内核中使用了相同的 UART?
您是否在应用中使用 IPC?
是否也在内核2中使用调试日志?
如果软件是从闪存运行的、则问题就消失了
该版本是哪个版本还是调试版本?
此致、
Anil。
您是否 无意中启用了"在任何调试器访问之前停止目标"? 某些方面来实现的。
否、此项目已禁用。 .
(如果我知道调试设置所在的文件、我会将其附加...)
谢谢和 BR
Alexander
进一步深入探究,问题并不取决于 DebugP_log()。 有时会出现错误、有时不会出现错误、但仅在使用调试器时才会出现。 因此、 我们必须查看整个调试环境。
BR
Alexander
Anil、您好!
来自内核2的调试消息通过 共享存储器日志写入器、共享存储器日志读取器传输到 UART。 这实际上在工作。
我同意问题最有可能出现在核心1上。 因此、更多信息是有关内核1的。
我们有三个作为 FIQ 实现的 ePWM 中断。 一个软件中断 Hwip_post ()被作为 IRQ 触发。 以及 SysConfig 的大量模块:时钟、MPU、ePWM、GPIO、MCAN、 QSPI、调试 UART、ETHPHY、FLASH
我已验证当我 HWIP_DISABLE ()一段较长的时间后我不能产生影响。
我不理解 IPC -如果你是说的斜坑( )、我已经在调试代码中删除了它们。
我将使用程序的"Debug"构建用于调试和闪存。 SDK 库在不同版本中随意使用:
${INHERITED_LIBRARIES}
${sysconfig_tool_libraries}进行配置
${COM_TI_MOTOR_CONTROL_SDK_AM243X_libraries}进行编程
freertos.am243x.r5f.ti-arm-clang.release.lib
drivers.am243x.r5f.ti-arm-clang.release.lib
enet-Cpsw.am243x.r5f.ti-arm-clang.Debug.lib
lwip-freertos.am243x.r5f.ti-arm-clang.Debug.lib
lwip-contrib-freertos.am243x.r5f.ti-arm-clang.Debug.lib
lwipif-cpsw-freertos.am243x.r5f.ti-arm-clang.Debug.lib
board.am243x.r5f.ti-arm-clang.Debug.lib
libc.a
libsysbm.a
BR
Alexander
您好、Alexander、
根据上述注释、您已确认该问题不是由 Debug_LOGP 和调试器连接引起的。
[报价用户 id="479799" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1406078/am2432-ccs-debugging-causes-timing-problems/5384911 #5384911"]您是否 无意中启用了"在任何调试器访问之前停止目标"? 某些方面来实现的。
[报价]请检查除上述配置之外的任何其他调试配置。 我不熟悉上述调试器。
如果您仍面临此问题、需要我们的帮助、我可以将其重新分配给合适的专家。
此致、
Anil。
尊敬的 Anil:
以下是我在 CCS 项目中针对第一个内核进行的调试器设置。 我找不到任何可疑的东西。 有什么想法我应该改变什么?
BR
Alexander
您好、 Alexander、
禁用以下选项的节拍并在调试器连接后检查中断时序。
我们在 MCU+SDK 级别中不使用 XDS 560V2调试器。
同时、我可以在内部与其他团队成员一起查看这些调试器设置。
此致、
Anil。
Anil、您好!
我删除了第一个和第二个内核中的两个项目、但问题仍然存在。 抱歉混淆了 "在任何调试器访问之前停止目标"。
我接下来可以尝试什么?
BR
Alexander
您好、Alexander、
在内部、我需要检查调试器设置并更新状态。
此致、
Anil。
您好、Alexander、
我正在使用 XDS 110调试器,并捕获 XDS 调试器设置的图像供您参考。
我看着他们。 您的设置和我的设置看起来是相同的,有些是不同的。
我认为这种改变不会造成问题。 但是、您可以尝试选择我的设置并查看结果。
同时,您能否确认您如何确认 IRQ 和 FIQ 未在特定时间触发。
它是基于 GPIO 还是基于任何计时器?
如果它是基于计时器、那么您使用哪个计时器进行性能分析?
我希望在调试过程中不要停止 调试器和配置 IRQ 的..如果您停止调试器,这也会影响 IQR/FIQ 配置。
请确认。
此致、
Anil。
Anil、您好!
在随附的图像中、黄色是 PWM 输出、D0、D2是 GPIO、指示内核1上的两个 FIQ 中断、D3、D4是 GPIO、指示内 核2上的两个 FIQ 中断。 下面是上面的放大图。 PWM 将不断闪烁、但中断会被阻止大约300ms。
我使用 Spectrum Digital XDS200调试器进行了测试、结果是相同的。
否、我不手动停止内核。
性能评测呢? 我可以在哪里打开和 关闭它?
BR
Alexander
Anil、您好!
我能够跟踪该问题、 从后台任务调用 std::time (NULL)。 如果我剪掉这个、我将无法再重现错误。
这是如何干扰调试器的?
BR
Alexander
您好、Alexander、
您能否分享完整的 API std :: time (NULL)和文件详细信息?
我可以检查一下、然后返回。
此致、
Anil。
Anil、您好!
我不明白您的问题。 关键指令是
如果( )
{
debugVariable = std::time (NULL);
}
该指令在 debugVariable 中返回时间值、但会导致时序问题。 std :: time ()是 C++编译器 API 中的标准函数。 如果我可以配置此函数、请给我一点提示。
BR
Alexander
Anil、您好!
我不明白您的问题。 关键指令是
如果( )
{
debugVariable = std::time (NULL);
}
该指令在 debugVariable 中返回时间值、但会导致时序问题。 std :: time ()是 C++编译器 API 中的标准函数。 如果我可以配置此函数、请给我一点提示。
[报价]您好、Alexander、
我们不会在 MCU+SDK 中使用上述 API 来获取时间值。
为了获取当前时间值、我们需要 根据需要启用计时器、并采用我们在 MCU+SDK 中采用的相同方法从同一计时器获取时间戳。
实际上、有一个 GTC 计时器是64位的。 因此、您可以在应用中使用该变量、并在需要时读取时间值。
所有 API 均可用于读取 GTC 时间值。
uint64_t GTC_getCount64 (空)
要启用 GTC、请在系统 cfg 文件中启用 GTC 外围设备。
此致、
Anil。
Anil、您好!
要获取当前时间值、我们需要 随时启用计时器并从同一计时器获取时间戳、所需方法与我们在 MCU+SDK 中采用的方法相同。
谢谢您的提示。 我将和我的同事讨论这一点、
如果挖掘到 API 源代码中,则看起来 std :: time()实际上在调用主机以获取实时值...
ccs1260\ccs\tools\compiler\ti-cgt-armllvm_3.2.1.LTS \lib\arm\time.c src
ccs1260\ccs\tools\compiler\ti-cgt-armllvm_3.2.1.LTS \lib\hosttime.c src
BR
Alexander