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/TM4C129ENCPDT:非任务函数中的 I2C_transfer

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/580180/rtos-tm4c129encpdt-i2c_transfer-in-non-task-function

器件型号:TM4C129ENCPDT

工具/软件:TI-RTOS

大家好、

我在用户指南中看到、在非任务上下文中无法调用 i2c_transfer。 当我查找原因时、它似乎在内部使用 Semaphore_pend 函数。 因此、只应在任务上下文中调用它。 我需要知道是否有机会在非任务上下文中调用 i2c_transfer。 例如阻止所有任务函数和所有任务。 如果可能的话、有人可以为此发布伪代码。 我们的客户要求他在非任务环境中需要他们。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我知道如果超时为0、可以从 swi 调用 Semaphore_pend 函数。 那么、使用它可以从非任务线程调用 i2c_transfer 吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我在 i2c_Tiva.c 中将 Semaphore_pend 超时值更改为0、i2c 是否会从非任务线程运行。?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    最后、客户确信应该使用该任务。 那么、我要结束这个问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很高兴看到这个问题得到解决。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我为 i2c_transfer 使用了具有零超时的 Semaphore_pend 函数、它会传输整个数据吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Syed、

    我不建议使用这些驱动程序。 这会消除它们的目的。

    通过以下几个方面:

    如果要在使用 I2C 传输数据时阻止任务、可以使用 Task_disable。 这将阻止任务调度程序切换任务。

    信标用于同步(在阻塞或回调模式下)、因此将其删除会阻止您了解传输是否完成以及传输是否成功。 只要不发生错误、您可能就能够发送消息。 如果发生任何错误、您将无法再次启动。

    简单来说、I2C 传输可能会完成、但不建议进行您建议的修改。

    此致、

    米歇尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢。 目前、我们的客户很高兴使用 i2c 传感器的任务。 但不确定他是否会坚持这一做法。 这就是我问的原因。 任何方法都将尝试使用 task_disable()。