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.

[参考译文] TMDSCNCD28388D:TCP/IP 调试

Guru**** 2539500 points
Other Parts Discussed in Thread: TMDSCNCD28388D, SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/874899/tmdscncd28388d-tcp-ip-debugging

器件型号:TMDSCNCD28388D
Thread 中讨论的其他器件: SYSBIOS

大家好

我在 TMDSCNCD28388D 板上的 tcpEchoF2838X 示例调试有问题。

我已经将这个与 C2000Ware-v2.01.00.00中的 Resource Explorer 一起安装为使用 SYS/BIOS 的工程。

之后、我开始调试 使用 CPU1上的以太网 UART USB 选项编译的 cm_common_config_C285x 项目

对于低级配置、这些 外设(配置 I/O 和时钟)和 CM 的时钟频率为125MHz。

调试器将其加载到闪存中、并在主代码的入口点停止。

之后、我 将 tcpEchoF2838X 示例加载到 CM 闪存中、我希望 调试器在主闪存的入口点将其停止

但遗憾   的是、它会立即启动、单击"SUSPEND (暂停)"按钮不会引起任何反应。

另一方面、如果我单独上传 tcpEchoF2838X (CM 时钟频率为95MHz)、则会正常启动、但会在  Ethernet.c 文件中的函数 EMACF2838XLLD_resetModule (uint32_t base)(等待重置完成)上挂起。

据我了解、在这种情况下、以太网没有低级配置(至少时钟)。  

在这两种情况下、 选项 Global breakpoint.

有人可以咨询我吗?

谢谢

Andrii Shevchuk

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

    大家好

    其他信息

     CCS 版本为:9.1.0.00010

    Accordinhly cfg 文件- 路径 SYS/BIOS->System->Startup->Module Settings

    初始大小选项                                                                                    启动设置

    堆大小0                                                                                                 用户复位函数- 空

    堆栈大小2048                                                                                                   最大模块初始化通过- 32

    参数大小0

    在 C 运行时初始化之前调用的函数                     模块初始化前调用的函数

    不适用                                                                                                                    第一个函数0 - ti.sysbios.heaps.HeapMem.init

                                                                                                                          Firstfunction 1 - ti_SysBIOS_family_ARM_f2838x_init_Boot_initStartup

    第一个函数2 - ti_sysbios_hal_hwi_initStack

    第一项功能3 - ti.sysbios.family.arm.m3.Hwi.initNVIC

    模块初始化后调用的函数

    不适用

    此致

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

    大家好

    工程*。cfg 文件的内容

     =================== 常规配置=================== *
    VAR 默认值= xdc.useModule('xdc.runtime.Defaults');
    VAR 诊断= xdc.useModule('xdc.runtime.Diags');
    VAR 错误= xdc.useModule('xdc.runtime.Error');
    VAR 日志= xdc.useModule('xdc.runtime.Log');
    VAR Main = xdc.useModule('xdc.runtime.Main');
    VAR 内存= xdc.useModule('xdc.runtime.Memory');
    VAR 系统= xdc.useModule('xdc.runtime.System');
    var text = xdc.useModule('xdc.runtime.Text');

    VAR BIOS = xdc.useModule('ti.sysbios.BIOS');
    VAR 时钟= xdc.useModule('ti.sysbios.knl.Clock');
    VAR 任务= xdc.useModule('ti.sysbios.knl.Task');
    VAR Hwi = xdc.useModule('ti.sysbios.hal.Hwi');
    VAR HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
    VAR 启动= xdc.useModule('xdc.runtime.Startup');

    BIOS.heapSize = 12288 + 2048;

    BIOS.heapSection =".tcpecho_BIOS_heap";
    Program.sectMap[".tcpecho_bios_heap"]="E0RAM";

    task.idleTaskStackSize = 1024;
    program.stack = 2048;

    /*========================= 系统配置=================== *
    VAR SysMin   = xdc.useModule('xdc.runtime.SysMin');
    SYSMIN.bufSize = 2048;
    System.SupportProxy = SysMin;

    /*为 GNU 目标启用半主机功能以打印到 CCS 控制台*/
    if (Program.build.target.$name.match (/GNU/)){
       VAR SemiHost = xdc.useModule('ti.sysbios.rts.gnu.SemiHostSupport');


    VAR Main = xdc.useModule('xdc.runtime.Main');
    Main.common$.diags_INFO = Diags.RUNTIME_ON;

    /*引入 POSIX 并启用互斥优先级*/
    /* TODO - NDK 是否需要互斥量优先级?! *
    VAR 设置= xdc.useModule('ti.posix.tirtos.Settings');
    settings.enableMutexPriority = true;

    /*
     *=================== NDK 配置===================
     *创建一个任务挂钩集并配置其寄存器函数、以便
     *启用 Thread 本地存储(NDK 需要)。
     *
    VAR 任务= xdc.useModule('ti.sysbios.knl.Task');
    var ndkHooks =新建 Task.HookSet();
    ndkHooks.registerFxn ='&NDK_hookInit';
    Task.addHookSet (ndkHooks);

    /* NDK 要求 BIOS 自动删除终止的任务线程*/
    Task.deleteTerminatedTasks = true;
    Main.common$.diags_ENTRY = Diags.RUNTIME_ON;
    Main.common$.diags_EXIT = Diags.RUNTIME_ON;
    Main.common$.diags_STATUS = Diags.RUNTIME_ON;
    Main.common$.diags_ANALYSIS = Diags.RUNTIME_ON;
    Defaults.common$.diags_ENTRY = Diags.RUNTIME_ON;
    Defaults.common$.diags_EXIT = Diags.RUNTIME_ON;
    Defaults.common$.diags_STATUS = Diags.RUNTIME_ON;
    Defaults.common$.diags_INFO = Diags.RUNTIME_ON;
    Defaults.common$.diags_ANALYSIS = Diags.always_on;
    bios.cpufreq.lo = 125000000;

    此致

    Andrii Shevchuk

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

    您好!

    您能否先运行 C28x 端代码、然后连接并加载 CM 端项目并运行。

    在控制卡上、如果您观察到代码卡在 CM 侧的_resetModule 中、则可能是由于运行 CM 侧之前将在 C28x 侧运行的错误序列/引脚多路复用。 因此、请按照上面的顺序操作、并告诉我它是否有用。

    此致、

    Sudharsanan

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

    你好

    我也更深入地研究了这个问题。

    因此 tcpecho_pem4.c - path folder_of _project/Debug/configPkg/package/cfg/

    函数 ti_sysbios_family_arm_f2838x_init_resetISR 仅包含到汇编器 standart _c_int00的跳转

    #if defined (_ti__)

    pragma RETAIN (ti_SYSBIOS_family_ARM_f2838x_init_resetISR)

    #pragma CODE_SECTION (ti_sysbios_family_arm_f2838x_init_resetISR、".resettisr")

    #endif

    void ti_sysbios_family_arm_f2838x_init_resetISR (void)

       /*跳转至程序入口点*/

       _asm ("   .global _c_int00\n"

             "   b.w    _c_int00");

    但链接器会找到该汇编器函数并将其链接到代码。

    因此、 我认为在上传后、ti_sysbios_family_arm_f2838x_init_resetISR 未正确初始化复位矢量。

    在列表中、先复位八个字节、然后复位 矢量初始化。  它的处理非常简单。

    要在 调试模式下正确启动此示例、 需要执行此操作

    1) 1)如有必要、连接 CPU1和 CM

    2) 2)在 CM 上启用全局断点

    3)将 cm_common_config_C28x.c 加载到 CPU1、将 tcpEchoF2838X 加载到 CM

    4) 4)选择 CM 并 单击按钮"Restart"(而不是"Reset")。

    之后、CM 在_c_int00上停止

    5) 5)在 CM 上启动 tcpEchoF2838X 后、在 CPU1上启动 cm_common_config_C28x.c

    就这些。 之后、可以在 SysMin OutputBuffer 中查看 TCP/IP 地址。

    我只想在信号复位和复位矢量初始化之间存在竞态不良情况、

    但解决问题的方法是有效的。

    在任何情况下、都应由德州仪器 来找出真正的原因并加以解决。

    在我的调查过程中

      我已学习 TI_RTOS 内核(SYS/BIOS)用户指南 SPRUEX3U 2018年2月

    第 3.1章 SYS/BIOS 启动顺序

    1. CPU 复位后立即执行目标/器件专用 CPU 初始化(从 c_int00开始)。

    请参阅的《汇编语言工具用户指南》中的"程序加载和运行"一章

    您的目标系列,了解有关此步骤和 cinit()步骤的详细信息。

    2.在 cinit()之前,运行"reset functions"表(xdc.runtime.Reset 模块提供此挂钩)。

    调用 Reset.Fxns[]数组中指定的函数。 这些复位功能只在上调用

    在运行程序之前执行复位的平台。

    3.运行 cinit()以初始化 C 运行时环境。

    4.运行用户提供的"第一个函数"(xdc.runtime.Startup 模块提供此挂钩)。

    5.运行所有模块初始化函数。

    6.运行用户提供的"最后功能"(xdc.runtime.Startup 模块提供此挂钩)。

    7.运行 Pinit()。

    8.运行 main()。

     

    但我发现上面提到的函数 ti_sysbios_family_arm_f2838x_init_resetISR 、它会跳转到汇编器 standart _c_int00、"Module  Initialization 之前调用的函数"列表的成员。

    但第 3.1章中相应地说,这应该在第1步中进行,但它在第4步中完成(我的问题是否会导致我们所放弃的问题?  )

     无论如何、我尝试更改此函数列表都会导致编译错误。

    因此、我将提出其他问题。

    此致

    Andrii Shevchuk