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/DK-TM4C129X:Task_getHookContext ()返回0

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

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/588659/rtos-dk-tm4c129x-task_gethookcontext-returns-0

器件型号:DK-TM4C129X

工具/软件:TI-RTOS

尝试开始使用 NDK 进行 Telnet 项目。   我从 console.c 示例中抽取了一些代码、但无法运行该函数。  fdOpenSession( TaskSele());返回0。

我已经配置了内存、可以成功执行 alloc 和 free。

当我尝试使用 telnet 连接时,代码会被调用,但不会转到任何地方...

稍后-

David

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

    David、

    您使用的是 TI-RTOS 的哪个版本? 是否在.cfg 文件中设置了 Global.autoOpenCloseFD? 如果为 true、则不必在使用 NDK 的每个任务中调用 fdOpenSession。 它会自动为您完成。 如果未显式设置、则默认为 false。

    为什么将线程标记为"Task_getHookContext 返回0"?

    您是否曾尝试过 TI-RTOS 中附带的 TCP 回显示例? 适合您吗?

    Todd

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用的是 TIRTOS 版本2_16_01_14。 我没有任何名为 Global.autoOpenCloseFD 的东西、也没有任何与之接近的东西。

    当我跟踪代码时,这是 fdOpenSession()在返回0返回代码之前调用的最后一个函数。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您正在 main()中调用 fdOpenSession,您是否? 这只能是要使用 NDK 的任务中的调用。

    如果您在任务中调用 fdOpenSession、您能否清理、删除 src 和调试目录、然后发布导出的工程? 我将在这里看一下。

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

    我采用了 Console.c 程序,并从该程序中敲出了 telnet 接口代码(command())。  我删除了除 shell 之外的所有内容、并输入一条样板文件消息、直到该部分开始运行。  该代码从2367行开始(编程错误、无法将所有内容放入一个文件中、但我正在处理一个时间线、这些延迟没有帮助。  我会在它工作时将其全部正确分解)。

    代码只需调用 fdOpenSession、然后将字符串写入输出、并在完成后关闭。  我还有很多需要添加的内容、但至少这是一个开始。

    David

    e2e.ti.com/.../2474.CCSUpload.zip

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

    您无需在 telnetServer 函数中调用 fdOpenSession。 这已经为您完成、因为它是通过 DemonNew 函数(在封面下)创建的。 我在 fdOpenSession 处放置一个断点来确认这一点

    Todd

    P.S. 很抱歉耽误你的回答。 我们周五休息了。

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

    出现2个问题、然后:

    1.如果我再次调用 fdOpenSession (正如我正在做的那样)、这将导致它失败?

    2.如果在 DemonNew 中调用 fdOpenSession (从 TelnetOpen 调用),是否  可以推断出当任务退出时将调用 fdClose?

    稍后-

    David

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

    [引用用户="David Dudley">1. 如果我再次调用 fdOpenSession (正如我正在做的那样)、这将导致它失败?

    是的。 它设置一些内部状态。 第二次调用失败、因为状态已设置。  

    [引用用户="David Dudley">2. 如果在 DemonNew (从 TelnetOpen 调用)中调用 fdOpenSession、  是否可以推断在任务退出时将调用 fdClose?

    我假设您的意思是 fdCloseSesssion...it 是作为任务退出的一部分被调用。

    Todd

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在查看 console.c 模块(我猜这是错误的)、它在出口处调用 fdClose。

    现在、出于关注:
    据我所知(至少在我的案例中)、从未调用 TelnetOpen (至少我不会在那里陷阱)。 DemonNew 也是如此。 也许我的配置有问题、或者我必须在我的过程中调用它们?

    再说一次、我将直接从 console.c 中执行、它不执行任何这些操作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的配置必须有问题,因为当我使用 telnet 连接到 DK 时,telnet 任务会立即启动,堆栈上的唯一内容是:

    Stellaris 内电路调试接口/ Cortex_M4_0 (挂起-硬件断点)
    myTelnetServer (void *、struct sockaddr *)() at 7-Channel_EV_Controller.c:2、376 0x0000FC82
    telnetClientProcess (void *、unknown***(*)())(位于 telnetd.c:166 0x000140EE
    dchild (结构 *、struct _child *)() at daemon .c:509 0x000150B0
    TI_SYSBIOS_KNL_Task_EXIT___E ()位于 Task.c:414 0x0000E054 (下一个帧与现有帧相同)

    我看不到您提供的任何堆栈、也看不到 fdOpenSession、DemonNew 或 TelnetOpen 或其他任何内容。

    不确定我有什么螺丝,但有些东西…

    David
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您在哪里设置了断点? 我在 fdOpenSession 中确认它被调用。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看到的一个问题是您的断点位于第88行、但我的 fdOpenSession 从第87行开始。 也许我需要从存档中重新安装 tirtos。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    只需在 CCS 中打开反汇编窗口并将 fdOpenSession 添加到其中。 然后在第一条或第二条指令处设置断点。

    更重要的问题是应用程序现在是否正常工作?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    否、应用程序不起作用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的 telnet 函数是否被调用?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    每次我尝试连接时都会调用我的 telnet 函数。

    当我将 fdOpenSession 作为第一个调用时、它返回一个错误代码。

    在注释掉这些内容后、每次我尝试发送内容时、我返回-1、但不会传输任何内容。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如上所述设置断点后、会调用 fdOpenSession、堆栈看起来类似于您展示的内容。

    但是、该应用程序仍然不起作用、当我跟踪 fdOpenSession 时、它会将 TaskGetEnv 调用为第一个项目之一、该项目一直到 Task_getHookContext、后者返回0。

    这会导致 fdOpenSession 例程出现零故障、而不执行任何操作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我更仔细地查看了 telnet 代码。 您应该创建一个任务,就像控制台应用程序那样(在控制台打开中)。 这里不需要 fdOpenSession。 如果您尝试在回调中执行所有处理,则会阻止 telnet 服务器。

    创建的任务(例如 console())确实需要执行 fdOpenSession(),前提是您没有在.cfg 文件中设置 Global.autoOpenCloseFD = true。 如果已设置、则不能在创建的任务中调用 fdOpenSession、也不能调用它并忽略返回代码。

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

    好的,我编写了一对类似于 ConsoleOpen 和 ConsoleClose 的函数,并将它们添加到 Telnet 服务器部分。

    Telnet 功能现在按预期工作、并响应我希望它执行的操作。

    如果文档中有一个教程或更多信息描述所有这些内容的工作方式、那会更好。

    猜一下、最好的学习方法是做错、必须弄清楚为什么它不起作用、但只是在手册中添加一些描述性段落似乎是一项简单的任务、可以节省很多麻烦和沮丧。

    执行这项简单的 Telnet 任务需要我一个多星期的时间,在这里只需要半个小时左右的时间。

    更新了