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.

[参考译文] RTOS/EK-TM4C1294XL:tcpEchoIPv6

Guru**** 2478485 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/680689/rtos-ek-tm4c1294xl-tcpechoipv6

器件型号:EK-TM4C1294XL
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

我在 CCSv8上尝试了 RTOS 网络示例 tcpEchoIPv6。 它成功地使用 XDCtools 3.32.2.25_core 和3.32.0.06_core 编译、而3.50.5.12_core 则无法正常工作。
然后、我使用调试版本和发布版本对开发板进行了编程。 控制台输出与预期的一样:


启动 TCP Echo IPv6示例
系统提供商设置为 SysMin。 停止目标以查看 ROV 中的任何 SysMin 内容。
服务状态:DHCP:   已启用 :000          
服务状态:DHCP:   已启用 :正在运行 :000
地址:器件1上的 fe80:21a:b6ff:fe03:3d97是唯一的
网络已添加:if-1:192.168.1.25
服务状态:DHCP:   已启用 :正在运行 :017
地址:器件1上的2003:80:2f1d:2c44:21a:b6ff:fe03:3d97是唯一的  

ping IPv4地址也起作用。

但是、在运行大约一分钟后、它始终运行为异常:

FSR = 0x0000
HFSR = 0x40000000
DFSR = 0x0000000b
MMAR = 0xe000ed34
BFAR = 0xe000ed38
AFSR = 0x00000000
正在终止执行...

如何找出原因???? 请提供任何帮助。

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

    对于 TivaC 2.1x 版本、XDC3.50工具与 TI-RTOS 不兼容。 您使用哪个版本来运行应用程序?

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很棒的一天
    如上所述、我使用了3.32.2.25_core 版本以及3.32.0.06_core 版本、结果相同。 只要演示成功(大约一分钟)、就可以成功 ping 通 IPv4地址。
    但 tcpSendReceive.exe 不起作用、无论是 IPv4还是 IPv6地址。 它回显"连接失败111"和"连接失败101"。
    您能否给我一个提示、在哪里可以查看控制台上显示的关于异常的信息?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Claus、

    以下是调试异常的良好参考: training.ti.com/debugging-common-application-issues-ti-rtos 。 注意:异常的一个常见原因是堆栈溢出(本演示中也介绍了这种情况)。

    您是否对 tcpEchoIPv6示例进行了任何修改?

    另一个值得注意的好方法是在您的 PC 上使用 Wireshark 来查看 PC 和目标之间的流量。 异常发生之前、进出设备的网络流量是多少?

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

    G'Day Todd、

    感谢您提供有关这些例外情况的培训提示。 我们会来看看...

    我没有对 tcpEchoIPv6进行任何修改。 我还尝试了3.31.3.43_core 工具。 情况是一样的。 我还使用了 Wireshark。 没有什么特别的东西 即使没有任何网络活动,也会在一分钟后发生异常。 我想问题是 RTOS 中的问题。 顺便说一下、IPv4 tcpEcho 示例毫无例外地运行得非常完美。

    来自巴伐利亚的问候。 克劳斯

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

    Claus、

    我尝试重现您观察到的 tcpEchoIPv6故障、但该程序对我有效。 我尝试了 TI 网络示例和 GNU 网络示例。 您使用的是哪个示例?

    但是、我确实注意到一些任务堆栈大小接近于达到其最大大小。 特别是 tcpWorkertcpHandler Idle_loop 任务。 您是否会尝试增加这些任务的堆栈大小、看看它是否有用。

    以下是我的结果:

    tcpEchoIPv6 - CCS

    HwiStackSize       HwiStackPeak
    ----------------------------

    2048               416

    Fxn                                STACKSIZE      StackPeak
    ----------------------------------------

    TI_NDK_CONFIG_Global_stackThread   1536           1072
    TI_SYSBIOS_KNL_Idle_LOOP_E        512            384
    dhcpState                          1024           648
    tcpHandler                         1024           960
    tcpWorker                          1280948            

    tcpEchoIPv6 - GCC

    HwiStackSize       HwiStackPeak
    ----------------------------

    2048 456                

    Fxn                                STACKSIZE      StackPeak
    ----------------------------------------

    TI_NDK_CONFIG_Global_stackThread   1536           1080
    TI_SYSBIOS_KNL_Idle_LOOP_E        512            472
    dhcpState                          1024           616
    tcpHandler                         1024           804
    tcpWorker                          1280           980

    此外、我在几分钟内检查了堆栈大小、但它们并未增长。 堆栈峰值使用情况保持不变。 您是否会在大约5秒后检查堆栈峰值、然后在大约40秒(程序崩溃之前)再次检查堆栈峰值。 请注意、峰值大小是否缓慢增大。

    请注意。 我发现、当我停止目标以检查堆栈大小时、有时 tcpSendReceive 程序会断开连接。  这是预期的。 如果发生这种情况、只需重新启动目标和 tcpSendReceive 程序即可收集数据点。

    在观看调试培训视频后、您是否能够获得任何异常分析?

    ~Ramsey

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

    Ramsey、很好、你会发现有一些时间尝试提供帮助。

    很遗憾、我不能将所有时间都花在这个有趣的问题上。 但我现在看了培训视频。 调试的绝佳工具。
    但没有堆栈溢出报告的 ROV。 这不是例外的原因。 我已经使用了 ROV hwi 异常选项卡输出并复制了它们。 但是、即使我的 Linux 计算机上的 IPv6系统无法正常工作、RTOS TCPIP 堆栈也不应引发异常。 但可能我错了、这是其他事情。 请提供建议。。

    [
       {
          "模块":"TI.SYSBIOS.family.ARM.m3/Hwi"、
          "查看":"例外"
       }、
       {
          "解码的异常":{
             "已解码":"硬故障:强制:BUSFAULT:IMPRECISERR"
          }、
          "异常上下文":{
             "$addr":"0x2000def8"、
             "$type":"TI.SYSBIOS.family.ARM.m3/Hwi.ExcelText"、
             "threadType":{}、
             "threadHandle":"0x2000f320"、
             "threadStack":"0x2000dc68"、
             "threadStackSize":"1536"、
             "R0":"0x0"、
             "R1":"0x86"、
             "R2":"0x1"、
             "R3":"0x0"、
             "R4":"0x0"、
             "R5":"0x0"、
             "R6":"0x86"、
             "R7":"0x0"、
             "R8":"0x2000Bab6"、
             "R9":"0x2000f158"、
             "R10":"0x2000da74"、
             "R11":"0x0"、
             "R12":"0x0"、
             "SP":"0x2000dfd0"、
             "LR":"0x183f3"、
             "PC":"0x1bf20"、
             "PSR":"0x81000000"、
             "ICSR":"0x803"、
             "MMFSR":"0x0"、
             "BFSR":"0x4"、
             "UFSR":"0x0"、
             "HFSR":"0x40000000"、
             "DFSR":"0xb"、
             "MMAR":"0xe000ed34"、
             "BFAR":"0xe000ed38"、
             "AFSR":"0x0"
          }、
          "异常调用栈":{
             "0   LLI6IsRouterStatMachine at lli6.c:217:":"PC=0x0001BF20"、
             "1   LLI6Update at lli6.c:458:":"PC=0x000183F2"、
             "2   Rt6Update at route6.c:1215:":"PC=0x0001BF9E"、
             "3   ICMPv6RecvRA at ICMPv6_ndis.c:894:":"PC=0x000046E6"、
             "4   icmpv6in.c:585上的 ICMPv6RxPacket:"PC=0x00008C82"、
             "5   IPv6ParseExtnHeaders at IPv6_exthdrs.c:430:":"PC=0x00012206"、
             "6   IPv6RxPacket at ipv6in.c:163:"PC=0x0000FA02"、
             "7   NIMUReceivePacket at NIMu.c:304 :":"PC=0x000108C4"、
             "8   EMACSnow_pkt_service at EMACSnow.c:748:":"PC=0x0001C4B4"、
             "9   NIMUPacketService at Nimu.c:169:":"PC=0x0001C1CA"、
             "10   Net日程 安排器位于 netctrl.c:429:":"PC=0x0000F126"、
             "11   nC_NetStart at netctrl.c:211:":"PC=0x0000A166"、
             "12   ti_ndk_config_Global_stackThread at tcpEchoIPv6_pem4f.c:2595:":"PC=0x0000D8BA"、
             "13   ti_sysbios_KNL_Task_exit___E at Task.c:414:":"PC=0x00012BF0"
          }
       }
    ]

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

    Claus、

    堆栈后跟踪非常有用。 我们正在分析结果。 感谢您花时间发送此邮件。

    你是对的。 即使远程端向我们发送无效数据包、我们的堆栈也不应引发异常。 了解这里发生的情况将会更好。

    根据您的原始描述、我想在大约60秒的连接时间后、远程端会向我们发送一个数据包、这会给我们带来麻烦。 了解我们所连接的机器类型会有所帮助。 是 Linux、Windows 吗? 操作系统的哪个版本?

    谢谢、
    ~Ramsey

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

    您好、Ramsey、

    我正在使用  
    内核      :Linux 3.16.0-5-AMD64 (x86_64)
    已编译   :#1 SMP Debian 3.16.51-3+deb8u1 (2018-01-08)
    发行:LMDE 2 Betsy
    以及用于 DHCP 的 Fritz!Box 路由器。   我已使用 Wireshark 捕获网络上的所有流量。 但未找到如何附加输出文件的方法。 请提供建议。
    以下是最后一个数据包的屏幕副本:

    在第61个数据包中发生异常。  克劳斯

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

    嗯、我已经设法获得了至少 Wireshark 输出的屏幕截图。 我仍然看不到如何附加完整的*。pcapng。 如果有用、请告诉我、发送地址。

    此致 Claus

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

    Claus、

    非常感谢您持续的调试工作。 上面的 Wireshark 屏幕捕获显示了在接收 IPv6路由广播时 NDK 中可能出现的问题。 我们确实有一个可能相关的文件错误。 最好使用捕获文件来确认这一点。

    文件附加到帖子。 请单击 "回复"按钮以开始新帖子。 如果您输入基本文本小工具、请单击"插入代码、附加文件等..." 链接(右下 角)。 这将带您进入高级文本编辑器。 在工具栏上查找回形针。 单击回形针以打开新对话框。 单击浏览按钮以选择要上传的文件。

    此外、您是否会确认运行 NDK 堆栈的 MAC 地址。 它看起来像 TexasIns_03:3D:97

    谢谢、
    ~Ramsey

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

    Ramsey、G'Day、

    我已压缩 Wireshark 文件并将其附加到:e2e.ti.com/.../sceExceptionCapture.pcapng.zip

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

    Claus、

    感谢您附加 Wireshark 数据文件。 这有助于我们确认您看到的问题。 我们已经提交了一份报告、并将其转交给开发团队以供解决。

    ~Ramsey

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

    Claus、

    请查看此帖子、了解您遇到的相同问题的修复方法。 出现该错误的原因是函数 LILI6IsRouterStatMachine()中的指针解除引用为空。 此修复程序是在调用 LILI6Update()之前检查 Rt6Update()中是否有空指针,该指针最终将运行到上述错误中。
       

    可能需要一段时间才能发布此部分的正式版本、因此我建议您自己使用该帖子作为参考来修复它。 我认为这应该可以解决您看到的错误。

    ~Ramsey

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

    谢谢 Ramsey、

    唉,我没有找到那个旧的论坛帖子。 这肯定是同一个问题。 我已相应地更改了文件夹 ti/tirtos_tivac_2_16_00_08/products/NDK_2_25_00_09/packages/ti/NDK/stack/route6/中的文件 route.c。
    但现在我必须重建 NDK。 当查看 ti/tirtos_tivac_2_16_00_08/中的 tirtos.mak 文件时、我必须修改很多环境变量。 恐怕我错过了什么...

    因为我无法编译 NDK:

    Mate@mars ~/ti/tirtos_tivac_2_16_00_08 $ make --file=tirtos.mak NDK
    正在构建 NDK ...
    gmake[1]:输入目录`/home/mate/ti/tirtos_tivac_2_16_00_08/products/ndk_2_25_00_09
    正在构建 NDK 包...
    全部:2018年5月15日星期二13:54:51 CEST……
    =========== 接口[./packages/ti/ndk ===
    正在制作 package.mak (由于 package.bld)...
    JS:"/home/mate/ti/tirtos_tivac_2_16_00_08/products/ndk_2_25_00_09/ndk.bld、第123行:xdc.services.global.XDCException: xdc.package_not _found:can't locate the package 'ti.targets.arm.elf' along the path:'~/ti/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages;/home/mate/ti/xdctools_3_32_00_06_core/packages;../../..'。 确保正确设置了封装路径。
    gmake[1]:`没有规则使目标`package.mak '成为.interfaces'所需的目标。  停下。
    gmake:***[packages/ti/NDK、.interfaces]错误2.
    gmaking[1]:***[全部]错误2.
    gmake[1]:离开目录`/home/mate/ti/tirtos_tivac_2_16_00_08/products/ndk_2_25_00_09
    tirtos.mak:212:目标'NDK'的配方失败
    制造:***[NDK]错误2.

    在 tirtos.mak 文件中、我已更改:

    # SCE:为 Linux 编辑 default_install_DIR;和 ccsv8 (来自 ccsv6) 5/18
    default_install_DIR     ?=~μ C/ti
    CCS_Compilers_DIR       ?=$(default_install_DIR)/ccsv8/tools/compiler

    编号
    #使 TI-RTOS 能够为 CCS 编译。
    #将 CCS_Build 设置为 true 并修改工具链的路径
    # SCE:设置工具链 ti-cgt-arm_18.1.LTS、而不是 ti-cgt-arm_5.2.5
    ccs_build ?= true
    TI_INSTALL_DIR          ?=$(CCS_Compilers_DIR)
    TI.targets.arm.elf-M4F  ?=$(TI_INSTALL_DIR)/ti-cgt-arm_18.1.LTS

    有人能不能给我一个提示、告诉我哪里出了错误?

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

    Claus、

    我不确定、但我认为您需要在 make 变量 default_install_DIR 中展开"~"。 请尝试以下操作:

    编辑 tirtos.mak

    DEFAULT_INSTALL_DIR =/home/mate/ti

    您的其他编辑看起来不错。 此外,如果变量已有值,则条件赋值运算符(?=)将不起作用。 确保尚未定义 DEFAULT_INSTALL_DIR、或者像我在上面所做的那样使用常规赋值运算符(=)。

    如果这仍然不起作用、请将"-n"选项添加到 make 命令中并为我发布结果。

    make -n --file=tirtos.mak NDK

    这将显示本应已执行的命令。

    ~Ramsey

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ramsey、
    在按照您的建议进行操作后、它确实进行了编译、没有任何问题。 嗯、在清理和重建 tcpEchoIPv6示例后、异常消失了。 完美! 非常感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很好。 感谢您的介绍。
    ~Ramsey