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.

[参考译文] TDA4AEN-Q1:[TDA4AEN J722S] MCU 域发生挂起问题

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1611286/tda4aen-q1-tda4aen-j722s-mcu-domain-happen-hang-problem

器件型号: TDA4AEN-Q1

您好 TI:

   我在 TDA4AEN J722S 平台上工作、 在 MCU 域 R5F 内核中实现了 ADAS 函数。 我们使用 FreeRTOS 对其进行设置。 在 MCU 固件中、将发生崩溃并触发预取异常句柄。 我在 Perfectch 事务处理中实施了一些处理来转储 CPU 故障信息。

    我们有测试两个用例、结果不同。

    1.未运行 version_app 以为摄像头过程启用主域 R5F。 不会发生 MCU 域 R5F 发生崩溃。

    2.运行 version_app、为摄像头过程启用主域 R5F。 片刻之后、我可以通过检查远程日志“cat /sys/kernel/debug/remoteproc/remoteproc2/trace0 “看到 MCU R5F 崩溃。

    从上面的测试到缩小 MCU 域 R5F 崩溃似乎取决于主域 R5F 是否执行摄像头过程。 并且 在测试案例 2 中、重现率为 100%

 

 

[mcu-r5f0-0]   181.090000s : DATA[EXECP]PREFETCH[EXPREFETCH[EXECP] [FATAL]: Core has Aborted!!!
[mcu-r5f0-0]   181.096000s : DFAR =0x43566fac DFSR =0x8
[mcu-r5f0-0]   181.096000s : [EXECP] IFAR =0x40847800 IFSR =0xd
[mcu-r5f0-0]   181.096000s : [EXECP] CPSR =0x80000197 SP =0xa1ac1f28
[mcu-r5f0-0]   181.096000s : [EXECP] LR =0x60000093 R0 =0x60000093
[mcu-r5f0-0]   181.096000s : [EXECP] R1 =0x0 R2 =0xa1aa8812
[mcu-r5f0-0]   181.096000s : [EXECP] R3 =0x8a9 R4 =0xa1aa6544
[mcu-r5f0-0]   181.096000s : [EXECP] R5 =0x7 R6 =0x2c366
[mcu-r5f0-0]   181.096000s : [EXECP] R7 =0xa1aa6d33 R8 =0xa1ac0a68
[mcu-r5f0-0]   181.096000s : [EXECP] R9 =0xa193fc6c R10 =0xa193fc70
[mcu-r5f0-0]   181.096000s : [EXECP] R11 =0xa193fc74 R12 =0x2c366
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandler_prefetch_abort]: trigger it
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]: ================= CORE CRASH DUMP =========
[mcu-r5f0-0]   181.096000s : ========
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]: FIRMWARE     : ADAS MCU1_0 Application
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]: BUILD TIME   : Jan 28 2026 15:41:58
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]: [DATA FAULT]
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep get_fault_status_str]: Fault Status: 0x8
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]:   STATUS   : Synchronous External Abort
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]:   ADDRESS  : 0x43566FAC (DFAR)
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]:   OPERATION: READ
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]:   RAW DFSR  : 0x00000008
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]: [INSTR FAULT]
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep get_fault_status_str]: Fault Status: 0xd
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]:   STATUS   : Permission Fault
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]:   ADDRESS  : 0x40847800 (IFAR)
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]:   RAW IFSR : 0x0000000D
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]: [CPU STATE]
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep get_cpsr_mode_string]: CPSR: mode: 0x17
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]:   MODE        : ABT (Abort)
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]:   THUMB STATE : NO
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]:   IRQ DISABLED: YES (Masked)
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]:   FIQ DISABLED: NO  (Masked)
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]:   ENDIANNESS  : LITTLE
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]:   RAW CPSR : 0x80000197
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]: ===========================================
[mcu-r5f0-0]   181.096000s : ========
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]: SP (Stack) : 0xA1AC1F28   LR (Link) : 0x600
[mcu-r5f0-0]   181.096000s : 00093
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]: R0 : 0x60000093   R1 : 0x00000000   R2 : 0xA
[mcu-r5f0-0]   181.096000s : 1AA8812   R3 : 0x000008A9
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]: SR4 : 0xA1AA6544   R5 : 0x00000007  R6 : 0x
[mcu-r5f0-0]   181.096000s : 0002C366   R7 : 0xA1AA6D33
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]: SR8 : 0xA1AC0A68   R9 : 0xA193FC6C  R10: 0x
[mcu-r5f0-0]   181.096000s : A193FC70   R11: 0xA193FC74
[mcu-r5f0-0]   181.096000s : [EXECP] [Excep ExceptionHandle_ShowFaultyInfo]: SR12: 0x0002C366

 

 

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

    您好 TI:

       以下是我的使用 Yocto 和 RTOS SDK 版本信息。

    Linux Yocto 版本:10.01.00.04

    MCU SDK RTOS 版本:sv_oz_tda4x_psdk_10_01_00_04_j722s

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

    尊敬的 Chang:

    您能否检查 mcu r5f 固件使用的存储器区域、确保它未使用 vision_apps 存储器区域、并在 vision_apps Linux DTB 覆盖层中保留 MCU 固件的存储器吗?

    此致、
    Gokul

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

    尊敬的 Chang:

    IFAR 和 DFAR 值在每次碰撞中是否一致?  

    您能否检查导致崩溃的 API、它是在某个 API 调用中一致发生的还是随机发生的。 您能否在 CCS 中尝试调试并找到崩溃的位置?

    在 vision_apps 中、您正在运行任何应用程序(如单个 cam 或多 cam 应用)、或者只加载 vision_apps 二进制文件就会重新创建问题。

    您能否检查是否存在任何防火墙例外情况?

    您使用的引导方法是 u-boot、SBL 还是 bootapp?

    此致、
    Gokul

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

    Gokul 您好:

       每次碰撞的 IFAR 和 DFAR 值是否一致?  

         --> 是的、我总是能看到 IFAR 为 0x40847800、IFSR 为 0xD。 0xD 是 MPU 的权限违例。  

       对于 vision_app、我与 使用多摄像头应用的摄像头 RD 确认。 我的硬件板中有一个真实的摄像头硬件。  

       当我遇到这个问题时、我不知道为什么 MCU 域 R5F 挂起、UART 日志没有输出我的周期性日志。  

       之后我发现函数 IpcNotify_sendMsg() 有一个 DebugP_assert()。 已触发此断言。 因此、我在此 IpcNotify_sendMsg() 中添加了一些日志、以便在 mailboxBaseAddr 获得空地址时显示日志。 发生问题时、我转储 显示的 gIpcNotifyMailboxConfig 阵列已更改阵列数据。 所以我想有些东西覆盖了这个常量数组 gIpcNotifyMailboxConfig[]导致系统挂起。 下面的屏幕显示了这一点。 启动时左侧是转储。 当 mailboxBaseAddr 获得空地址时、右侧显示。  

       当我使用多摄像头应用运行 vision_app 时、这个问题总是会重现。 如果不使用多摄像头应用运行 vision_app、则不会出现此问题。

       我的引导方法是使用 SPL 模式。 一些基本功能。  

    int32_t IpcNotify_sendMsg(uint32_t remoteCoreId, uint16_t remoteClientId, uint32_t msgValue, uint32_t waitForFifoNotFull)
    {
        uintptr_t oldIntState;
        uint32_t mailboxBaseAddr, hwFifoId, isFull;
        int32_t status = SystemP_FAILURE;
    	static bool dump_flag = false;
    	uint8_t *ptr;
    	uint8_t *ptr1;
    	uint32_t i, j;
    
        if((remoteCoreId < CSL_CORE_ID_MAX) && (gIpcNotifyCtrl.isCoreEnabled[remoteCoreId] != 0U))
        {
            IpcNotify_getWriteMailbox(remoteCoreId, &mailboxBaseAddr, &hwFifoId);
    		if(mailboxBaseAddr == 0U) {
    			IpcNotify_MailboxConfig *pMailboxConfig;
    			DebugP_log("11: %d, %d\r\n", remoteCoreId, remoteClientId);
    			pMailboxConfig = &gIpcNotifyMailboxConfig[gIpcNotifyCtrl.selfCoreId][remoteCoreId];
    			DebugP_log("22: 0x%08x, 0x%08x\r\n", gIpcNotifyMailboxBaseAddr[ pMailboxConfig->mailboxId ], pMailboxConfig->hwFifoId);
    			DebugP_log("33: 0x%08x, 0x%08x\r\n", gIpcNotifyCtrl.selfCoreId, pMailboxConfig->mailboxId);
    			DebugP_log("44: 0x%08x, 0x%08x, 0x%08x, 0x%08x\r\n", gIpcNotifyMailboxBaseAddr[0], gIpcNotifyMailboxBaseAddr[1], gIpcNotifyMailboxBaseAddr[2], gIpcNotifyMailboxBaseAddr[3]);
    			DebugP_log("55: 0x%08x, 0x%08x, 0x%08x, 0x%08x\r\n", gIpcNotifyMailboxBaseAddr[4], gIpcNotifyMailboxBaseAddr[5], gIpcNotifyMailboxBaseAddr[6], gIpcNotifyMailboxBaseAddr[7]);
    			DebugP_log("66: 0x%08x\r\n", gIpcNotifyMailboxBaseAddr[8]);
    			ptr = (uint8_t *)&gIpcNotifyMailboxConfig[0][0];
    			ptr -= 1024;
    			for(i = 0; i < 2048; i+=4) {
    				DebugP_log("88: 0x%02x, 0x%02x, 0x%02x, 0x%02x\r\n", ptr[i+0], ptr[i+1], ptr[i+2], ptr[i+3]);
    			}
    		}
    		if(dump_flag == false) {
    			ptr1 = (uint8_t *)&gIpcNotifyMailboxConfig[0][0];
    			ptr1 -= 1024;
    			for(j = 0; j < 2048; j+=4) {
    				DebugP_log("77: 0x%02x, 0x%02x, 0x%02x, 0x%02x\r\n", ptr1[j+0], ptr1[j+1], ptr1[j+2], ptr1[j+3]);
    			}
    			dump_flag = true;
    		}
            DebugP_assert(mailboxBaseAddr != 0U);
    
            oldIntState = HwiP_disable();
            do
            {
                isFull = IpcNotify_mailboxIsFull(mailboxBaseAddr, hwFifoId);
                if((isFull != 0U) && (waitForFifoNotFull != 0U))
                {
                    /* allow interrupt enable and check again */
                    HwiP_restore(oldIntState);
                    oldIntState = HwiP_disable();
                }
            } while((isFull != 0U) && (waitForFifoNotFull != 0U));
    
            if(isFull == 0U)
            {
                uint32_t value = IpcNotify_makeMsg(remoteClientId, msgValue);
                IpcNotify_mailboxWrite(mailboxBaseAddr, hwFifoId, value);
                status = SystemP_SUCCESS;
            }
            else
            {
                status = SystemP_TIMEOUT;
            }
            HwiP_restore(oldIntState);
        }
        return status;
    }

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

     Gokul 您好:

       您能否检查是否存在任何防火墙例外情况

         “对不起,我不知道这是什么意思吗? 是指 MCU 域 R5F 上发生了任何异常吗?

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

    Gokul 您好:

    您能否在 CCS 中尝试调试并找到崩溃的位置?

       -->如果我将 CCS 工具设置为附加的 J722S、请观察 R5F 崩溃点、如何知道谁覆盖了 R5F 存储器? 因为可以看到摄像头函数导致 MCU 域 R5F 崩溃正在工作。 如何使用 CCS 对其进行调试分析?

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

    尊敬的 Chang:

    您能否在 MCU 链接器中检查该区域、它似乎与 wkup r5f 的存储器重叠  

    我的测试将转到/opt/vision_apps 并运行命令./run_app_multi_cam_ccodec.sh

    您是否可以运行任何简单的演示 (如./run_app_multi_cam.sh 或./run_app_single_cam.sh) 并检查问题是否存在。

    我仅在 SoC 和 MCU 双核之间实现了 IPC

    关于这一点、您能详细解释一下、MCU 内核是与哪些内核通信吗?

    抱歉、我不知道这是什么意思? 您是指在 MCU 域 R5F 上发生任何异常吗?

    我说的是 sysfw 调试日志、  【常见问题解答】系统固件调用失败或崩溃。 该怎么办? 

    如果我将 CCS 工具设置为连接的 J722S、请观察 R5F 崩溃点、如何知道谁覆盖了 R5F 存储器? 因为可以看到摄像头函数导致 MCU 域 R5F 崩溃正在工作。 如何使用 CCS 对其进行调试分析?

    我告诉 CCS debug 找到导致崩溃的 API、但您似乎已经找到了某个原因、存储器损坏。 我认为默认的 vision_apps 演示不会使用未映射的存储器。

    发生崩溃时、vision_apps 演示是否正常?

    此致、
    Gokul

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

    Gokul 您好:

    您能否在 MCU 链接器中检查此区域、它似乎与 wkup r5f 的存储器重叠 

      “是的,你是对的,那已经重叠的 wakeup r5f 内存,我会删除它。 但我甚至从链接器文件中删除了该存储器设置。 我也可以重现这个问题。

    您能否运行任何简单的演示 (如./run_app_multi_cam.sh 或./run_app_single_cam.sh) 并检查问题是否存在。

      -->当然、我将使用这些命令进行测试、以缩小问题范围。 这将在稍后更新测试结果。

    您能详细解释一下这一点吗?MCU 内核与哪些内核通信?

      -->为 ADAS 功能实现了 MCU 域固件。 MCU 域有一个周期性的 20ms 任务、以通过 IPC 将车辆 CAN 数据从 MCU 侧发送到 SOC A53。 SOC A53 还通过 IPC 定期将感知 CAN 数据从 SOC 侧发送到 MCU 侧。 MCU 还具有来自 MCU CAN 总线的周期性发送 CAN TX 输出。 因此、当我重现此问题时、如果 MCU 仍然正常工作、我会检查 MCU 是否可以传输数据和 UART 日志功能。 所以在我的设计中、我仅使用 IPC 在 A53 和 MCU R5F 内核之间进行通信。 无法触及 MAIN 域 R5F。 我还在 Linux 端运行了一个测试程序。 该测试程序用于使这两个 IPC 数据流 (SOC -> MCU 和 MCU -> SOC) 有效。 在不运行摄像头的情况下进行夜间测试。 没有发生 MCU 挂起问题。

    发生崩溃时、vision_apps 演示是否正常?

      -->是的、我认为 vision_app 演示仍然可以正常工作。 但我将使用 ./ run_app_multi_cam.sh 和./ run_app_single_cam.sh 再次进行测试和确认。 任何测试结果都将在稍后更新。

    BR、

    Simon

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

    嗨、Gokul

    Simon 是我的客户。

    等待客户反馈之前、这是一个想法、但我不太确定是否可行。

    在 Linux 操作 (+Boot) 时、我们是否有办法使用 CCS (JTAG) 调试 MCU R5 或主域 R5 内核?

    因为在 Linux 操作期间、一旦我们通过 JTAG “重新加载 R5“FW、我不确定 RPMsg 是否仍会继续工作。

    谢谢你。

    Gibbs   

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

    尊敬的 Chang:

    您能再做一些实验来进一步缩小问题范围吗?

    运行 IPC 测试应用程序 ./vx_app_arm_ipc.out 并查看是否发生问题。

    要找出问题并确保 c7x 不会导致问题、请持续运行./run_app_c7x.sh 并检查是否发生崩溃。 此应用只会触发 c7x 任务。

    如果 IpcNotify_sendMsg() API 持续崩溃、并且怀疑 gIpcNotifyMailboxConfig 损坏。  在 CCS 中获取 gIpcNotifyMailboxConfig 存储器地址并将其作为该地址的硬件观察点放置、观察该观察点是否达到。 如果 main.c r5f CPU 写入或读取存储器、观察点将被命中。 但是、如果任何 DMA 损坏存储器、则该方法用处不大。

    此致、
    Gokul

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

    嗨、Gibbs、

    在 Linux 操作 (+Boot) 的同时、我们是否有任何方法可以使用 CCS (JTAG) 调试 MCU R5 或主域 R5 内核?

    是的、可以。

    您可以使用 CCS 并连接到要调试的内核、如果已加载固件、则无需从 CCS 加载固件、只需加载符号并开始调试。 确保已加载调试二进制文件。

    因为我不确定一旦我们在 Linux 操作期间通过 JTAG “重新加载 R5“固件、RPMsg 仍会继续工作。

    您可以重新引导整个系统、而不是重置单核。

    此致、
    Gokul

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

    尊敬的 Chang:

      在  app_mem_map.h 中、我发现 DDR_MCU1_0_*存储器不正确。 似乎该存储器用于唤醒域 r5f 存储器映射。   该头文件 app_mem_map.h 中未定义 MCU 域 R5F 0xA1000000 和 0xA110000u 是否有任何问题? 我是否需要更正?

    是的、您更正了 wkup_MCU 内核的存储器映射。 该命名约定遵循另一个 J7 器件命名。 此 wkup 内核运行 DM 固件。 您无需在 vision_apps 中添加 MCU 域存储器。  

    运行 vision_apps 二进制文件的内核使用 app_mem_map.h 中定义的存储器区域。 只需确保 MCU 域 r5f 不与该存储器区域冲突。

    固件使用 app_mem_map.h 和 example.syscfg 文件来配置 r5f 和 c7x 内核的 MPU/MMU。

    应在 example.syscfg 中手动更改 app_mem_map.h 文件。

    那么我是否需要修改  rtos-build\vision_apps\platform\j722s\rtos\k3-j722s-rtos-memory-map.dtsi 文件来进行更正?

    您不必更改 dtsi 文件、因为它会从 Linux 为远程内核保留内存。

    因此、通常 MAIN r5f、c7x、A53 内核不应访问 MCU r5f 的存储器。 但要确认这一点、请在 CCS 中从 main r5f core 添加一个观察点、指向您看到 mcu r5f core 损坏的位置。

    还可以进行之前的回复中提到的更多实验。

    您能做更多的实验来进一步缩小问题的范围吗?

    此致、
    Gokul

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

    尊敬的 Chang:

    当 LDC 发生时、MCU 挂起
          如果没有 LDC、则不会发生 MCU 整晚挂起[/报价]

    好的。

    启用 LDC 后、它与 持续发生损坏的 gIpcNotifyMailboxConfig 位置相同。 您能否共享该变量的地址。
    您能否分享有关您正在使用的摄像机和正在运行的摄像机数量的一些信息?

     无法打开文件 [/报价]

    为此、您需要将测试数据复制到 SD 卡、请参阅
    https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/11_01_00_04/exports/docs/vision_apps/docs/user_guide/RUN_INSTRUCTIONS.html#run_steps_linux

    此致、
    Gokul

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

    尊敬的 Chang:

    a1ab7e10 gIpcNotifyMailboxConfig 是内存损坏 地址。

    您能否确认该地址始终被损坏、每次创建问题时、同一地址都会被损坏?

    确认未对 vision_apps 应用程序进行 SDK 更改。

    让我运行相机应用程序,看看内存是否从我这边得到了修改

    此致、
    Gokul

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

    尊敬的 Goku:

       

    您可以使用 CCS 并连接到要调试的内核、如果已加载固件、则无需从 CCS 加载固件、只需加载符号并开始调试。 确保您已加载调试二进制文件。

        我想尝试使用 CCS 来调试这个问题、但我以前没有使用 CCS 工具。 我想看看当 MCU 出现挂起问题时会发生什么。  

        我已 在 Windows PC 中安装 CCS 版本 12.8.1.00005、并且还安装了 XDS110 探针。 我想知道在出现问题时如何进行在线调试。 使用 CCS 加载符号、然后在没有加载和复位系统的情况下连接到 MCU R5F?  

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

    尊敬的 Chang:

    我建议在开发主机 (Ubuntu 22.04) 上运行 CCS。

    首先连接到 EVM、然后连接要调试的内核、

    连接内核后加载该内核的符号、然后恢复内核。 您不必重置内核。

    符号将是 MCU2_0(主域 r5f)的固件二进制文件 vx_app_rtos_linux_mcu2_0.out ->

    如果要与源代码一起进行调试、请使用调试二进制文件 sdk_builder/build_flags.mak

    此致、
    Gokul

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

    Gokul 您好:

       我想检查一下最初的问题、即 MCU 挂起问题。 我将使用 CCS 观看问题发生时会发生什么。

       下面列出了我的步骤、您能帮助我确认步骤是否正确吗?

    1.打开设备电源。

    2.等待问题发生(MCU UART 记录停止输出、MCU 可以停止周期性输出)

    3.按如下所示的调试底部。 它将连接到目标和停止内核。

    4.停止 MCU 域 R5F 内核。 并加载用于 ADAS FW 的符号。

    5.检查 MCU 域 R5F 内核上发生的情况。 为什么任务无法运行? 为什么没有任何对数周期性输出? 为什么无法周期性输出?

    Simon

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

    尊敬的 Chang:

    在步骤 2 中、问题已经发生、那么内核将处于中止状态、因此加载符号后您将看不到任何内容。

    加载符号不会复位内核。

    因此、在为器件通电后、请先连接到内核并加载符号、以免问题发生。

    现在、您应该能够停止和恢复内核并设置断点。

    一旦问题发生、内核将进入中止状态、它将卡在中止处理程序处。

    您可以在 CCS 存储器浏览器中检查问题前后的存储器、以检查存储器是否已损坏。

    如果要在引导后立即停止代码执行、则添加一个 while (gloop);循环、使内核卡住、然后连接到 CSS、并使用 CCS 更改 gloop 变量来解锁循环(gloop 应是易失性变量)。

    此致、
    Gokul

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

    感谢 Gokul 的答复。

    这是根据 戈库尔的建议所作的发言。

    总结如下:  

    (1) 客户应按照此参考在 Linux 引导完成后连接每个内核。 我觉得客户已经完成了。

    https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-j722s/11_01_00_04/exports/docs/psdk_rtos/docs/user_guide/ccs_setup_j722s.html

    ->参考第 7.3 节

    (2) 在启动目标配置并连接每个内核之前、应通过低音 SMS_CM4_TIFS 进行配置

    (3) 您应该 在您的主函数代码中添加“while loop“、我认为此 while 循环应位于“RPMsg init“后面。 一旦由引导加载程序加载/运行 MCU 固件、程序计数器将始终在此  while 循环函数中循环。

    参考示例。  https://www.youtube.com/watch?v=w_MY5LeW_Rw --> 18:43,检查变量“ccsHalt"</s>“

    (4) 不要忘记遵循 Gokul 的评论、将构建配置文件更改为“调试“、并重新构建 MCU 的软件

    (5) 在 SD/eMMC 中更改 MCU SW、连接 R5 内核、并在 Linux 引导完成后加载符号文件

    视频--> 17:04

    (6) 我认为 MCU SW 应该已经在此 while 循环中运行、您可以暂停 R5 内核、并将变量 “ccsHalt = 1“更改为在循环期间退出

    (7) 然后继续运行(自由运行,单步...) 在设置“断点“之前。

    您好、 Gokul

    如果我说了任何错误、请对我进行纠正。

    谢谢你。

    Gibbs

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

    嗨、Gibbs、

    谢谢、这是对我想说的话的详细解释。

    此致、
    Gokul

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

    嗨、Gokul、Gibbs:

       下面的显示发生问题时使用了 CCS 附加目标。 我看到目标发生了 Hwip_undefined_handler ()。

       如何使用 CCS 工具进行高级分析?

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

    嗨 、Gokul、Gibbs:

        我尝试在 Hwip_undefined_handler () 处添加断点。 之后、我可以让 LR 看看谁导致了未定义的异常处理程序触发。

        您能帮助检查为什么会出现这种异常吗?  LR 是 0xA1A31F48。  

    a1a31f38:FC0DF043 .word 0xfc0df043
    a1a31f3c:F96DF01b .word 0xf96df01b
    a1a31f40:F0402800 .word 0xf0402800
    a1a31f44:DF00808A svcle #0x808a
    a1a31f48:9804E087 stmdals R4、{r0、r1、r2、r7、 R13、r14、PC}
    a1a31f4c:3FFFF1B0 svclo #0xfff1b0
    a1a31f50:F24CDC13 vfma.f32 d29、d12、D3
    a1a31f54:46586682 ldrbmi R6、[R8]、-R2、LSL #13
    a1a31f58:16A9F2CA strtne PC、[R9]、R10、ASR #5

    ...

    ...

    ...

    ...

    ...

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

    嗨 、Gokul、Gibbs:

      更新 CCS 屏幕截图。  

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

    尊敬的 Chang:

    如果内核未识别指令、则会命中 HwiP_undefined_handler。  

    在 LDC 开启的情况下运行 multi_cam 演示时会发生什么情况。 上次出现预取中止、这次处于 UNDEF 中止状态。

    如果您看到调用栈,在点击  Hwip_undefined_handler () 之前,它正在运行 UpdaeRadInfo (),您可以在其中放置断点,并逐步识别它发生异常的点。

    您还可以检查正常运行和崩溃运行期间内存之间的差异。

    此致、
    Gokul

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

    尊敬的 Chang:

    我想您也可以参考本调试文档进行 PC 跟踪

    https://www.ti.com/lit/an/sprac17b/sprac17b.pdf

    ->第 6.1 节、Cortex-Axx PC 跟踪

    Gibbs

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

    嗨、Gokul、Gibbs:

       分享了我在使用 CCS 检查该问题时看到的内容。

       我在下面的 pptx 中的 CCA 中总结了我看到的内容。 我分享它让你知道状态。 简要总结 gIpcNotifyMailboxConfig 阵列已被 ADAS 固件覆盖。 当有人想要对 gIpcNotifyMailboxConfig 存储器进行写入时、我设置观察点时、CCS 回溯轨迹中显示的该代码。 我会一直跟踪 ADAS 固件将存储器覆盖到  gIpcNotifyMailboxConfig 阵列的原因。

       docs.google.com/.../edit

    Simon

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

    尊敬的 Chang:

    我无法打开您共享的 ppt、您能否将其转换为 pdf 然后共享它。

    此致、
    Gokul

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

    Gokul 您好:

       我向您提供 pdf 格式文件! 请检查以下文件。 谢谢您!

    e2e.ti.com/.../J722S_5F00_MCU_5F00_hang_5F00_20260211_5F00_2.pptx.pdf

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

    尊敬的 Chang:

    我会仔细研究它,并在下周回复你。

    此致、
    Gokul

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

    尊敬的 Chang:

    您可以使用“Locate File“选项找到源文件、并准确查看哪行代码调用此 vstr 指令。

    此致、
    Gokul

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

    Gokul 您好:

        我已经检查了是否在第 1187 行调用了 vstr 指令。 这是执行数组元素填充值。 我想数组索引中会发生溢出。

        此代码位于我们的 ADAS 库中。 这只是一段代码。 但它在我的一个周期 20ms 任务中运行。 每个 20ms 将唤醒以执行该过程。 我们已创建周期性任务 (10ms、20ms、100ms、200ms)。 我们将这些任务优先级设置为仅 5。 如果我将 20ms 任务优先级设置为 8、 此 MCU 挂起问题不会重现。 似乎只有 20ms 的周期性任务优先级集 a 5 可以重现。 但我不知道任务优先级与 ADAS LFC 模块之间的关系会发生存储器覆盖。 我 还是试着分析一下。 我还尝试将 20ms 任务堆栈从 40KB 扩大到 100KB。 此 MCU 挂起问题仍然可以重现。   

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

    尊敬的 Chang:

    很奇怪、首先可以解决数组索引溢出问题、看看。

    此致、
    Gokul

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

    Gokul 您好:

        我可以使用 CCS 工具在存储器地址发生写入访问时设置观察断点。 但我是否可以设置一个条件、如果存储器地址值很大、那么特定的值就终止它?

    BR、

    Simon

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

    尊敬的 Chang:

    您可以在属性中尝试范围掩码、并查看其是否有效。  
    这也在中进行了介绍 5.4 硬件观察点  一些内容。

    此致、
    Gokul

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

    Gokul 您好:

        1.我们有四个定期任务。 10ms、20ms、100ms 和 200ms 周期性任务。

        2.这四项任务将运行 ADAS 函数的 ADAS 库 API。

        3. ADAS 库将使用浮点指令计算。

        4.我 在这四个周期性任务中添加 porttask_uses_float_point() 函数。 这个问题无法重现。  

    BR、

    Simon

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

    尊敬的 Simon:

    很高兴听到这个消息。

    portmacro.h 文件中也记录了这些信息。

    感谢您确定问题并告知该问题。

    由于问题已解决、我将关闭此主题。

    此致、
    Gokul