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/TM4C1294NCPDT:运行时问题中的网络 IP 地址更新

Guru**** 2445440 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/627296/rtos-tm4c1294ncpdt-network-ip-address-update-in-run-time-issue

器件型号:TM4C1294NCPDT

工具/软件:TI-RTOS

您好!

我想通过用户应用程序动态分配网络 IP 地址。 对于这些地址、我创建了以下用于更新 IP 地址的代码。 当可以在网络挂钩函数中执行此操作时、这种方法效果良好。 但当我们在执行过程中从用户应用程序更新时、它不起作用。

我正在使用以下工具版本。

tirtos_tivac_2_16_01_14

NDK_2_25_00_09

BIOS_6_45_02_31

以下是用于更新 IP 地址的代码:

空 IP_Address_Update (IPLOCAL * stIpLocalAddr)

CI_IPNet NA;
CI_route RT;

句柄 hCfgIpAddr;

/*设置手册 IP 地址*/

bzero (不适用、sizeof (不适用));
na.ipaddr = inet_addr (stIpLocalAddr->ipaddr);
na.ipMask = inet_addr (stIpLocalAddr->IPMask);
strcpy (na.Domain、stIpLocalAddr-> Domain);
NA.NetType = 0;

/*获取当前静态 IP 条目*/
CfgGetEntry (0、CFGTAG _IPNet、1、1、&hCfgIpAddr);

/*删除当前静态 IP 条目*/
CfgRemoveEntry (0、hCfgIpAddr);

/*添加新的静态 IP 条目*/
CfgAddEntry (0、CFGTAG _IPNet、1、0、sizeof (CI_IPNet)、(UINT8 *)不适用、 0);

/*
*添加默认网关。 因为它是默认值、所以
*目标地址和掩码都为零(我们继续操作
*和为清晰起见显示了分配)。
*
bzero (&RT、sizeof (RT));
rt.IPDestAddr = 0;
rt.IPDestMask = 0;
rt.IPGateAddr = inet_addr (stLocalIpAddr->IPGateAddr);

CfgAddEntry (hCfgIpAddr、CFGTAG _route、0、0、sizeof (CI_route)、 (uint8 *)&RT、0);

当我在 Hook 函数中添加它时、它运行得非常好。 请参阅下面的快照。

当我从用户应用程序进行更新并且任务由于堆栈溢出而终止时、请参阅以下错误。

在这里、我使用 GPIO 中断来更新 IP 地址。 当 GPIO 设置为高电平时、将调用中断处理程序并发布挂起任务的事件以执行 IP 地址更新。

您能帮我解决这个问题吗?

此致

巴拉

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

    您能否在 ROV->Tasks->Detailed 中查看哪个堆栈溢出? 您可以增大它并重试吗? 在我们继续之前、我想先排除这一部分。

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

    您好 Todd、

    将堆栈大小从默认大小512字节增加到1025KB 后、Network_IP_Update 任务不会溢出、但在更新 IP 地址时看到相同的错误。 请在增加堆栈大小后找到以下快照。

    IP 地址在添加后立即被删除。  执行此操作后、我无法 ping 通连接。

    此外 、还请澄清为什么我会收到"非法优先呼叫"之类的警告?

    此致

    巴拉

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

    您的任务的优先级是什么(尤其是调用 IP_Address_Update 的任务)。 最简单的查看方法是打开 CCS->ROV->Tasks->Detailed。 此外,您能否显示 ROV->Tasks->Module。 我想看看最大任务优先级是如何的。

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

    您好 Todd、

    我在这里附加了详细任务视图的快照,我正在尝试从红色标记的任务更新 IP 地址。

    此致

    巴拉

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

    digitialInputProcessing 的优先级太高。 查看此主题 :e2e.ti.com/.../2038811
    它有一些指向何处获取更多信息的指针。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Todd、
    感谢您、我需要一些时间来测试它、方法是更改更新 IP 地址的任务的优先级并向您分享反馈。

    此致
    巴拉