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.

[参考译文] am243x 计时器中断优先级

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1314404/am243x-timer-interrupt-priority

您好!

我将 am243x-evm 用于 TCP 服务器示例。

我设置了一个计时器、以便为信标提供自由唤醒的 RTOS 任务。

我在 FreeRTOSConfig.h 中具有以下行 #define configMAX_SYSCALL_INTERRUPT_priority  (0xE0U)

在(syscfg)中、计时器中断优先级应该是多少、这样它将低于 FREE RTOS -使任务能够唤醒?  (允许的范围为0-15)

谢谢。

Eli

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

    尊敬的 Eli:

    由于 FreeRTOS 的系统节拍使用 TIMER8并且中断优先级设置为15 (最低)、所以我推荐15作为您的自定义定时器中断优先级。

    此致、

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

    尊敬的 Ming:

    我将计时器中断 设置为15 、但任务仍在~ 20usec 而非~2usec 的条件下唤醒

    我已经使用 FreeRTOS 任务和计时器中断回调测试了一个简单的程序。

    SemaphoreHandle_t sem=NULL;

    sem = xSemaphoreCreateBinary();

    //----------------------------------------------------------------------------------------------------------

    空任务(空)
    {
      while (1)
       {
       if (xSemaphoreTake (SEM、0xFFFFFFFF));
        {

        do_somethes();   //<-------- POINT B

        }

      }//永远
    }//任务
    //----------------------------------------------------------------------------------------------------------------------------------------------------------

    空 TimerTick (空)
    {
    basetype_t xHigherPriorityTaskWoken = pdFALSE;
    xSemaphoreGiveFromISR (SEM、&xHigherPriorityTaskWoken);
    portYIELD_FROM_ISR (xHigherPriorityTaskWoken);//请求上下文切换   //<<---------------- POINT A

    }//TimerTick

    //------------------

    TimerTick()按预期每31.24usec 运行一次!  (用示波器测量)  

    I 测量 从 A 点到 B 点, 时间=~ 20us。

    我应该配置什么来获得最大2usec 延迟?

    谢谢。

    此致、

    Eli

     

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

    尊敬的 Eli:

    我唯一能想到的是你的 Task ()的优先级,其中  xSemaphoreTake ()正在等待。 通常、任务调度每1000uS 发生一次、或者发生一个中断。 任务调度程序将执行最高的任务。 如果有一个任务的优先级高于 Task (),那么 xSemaphoreTake ()的执行将被延迟。 请检查示例中所有任务的优先级、包括空闲任务。 确保 Task ()处于最高优先级。

    此致、

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

    尊敬的 Ming:

    我检查了任务()的优先级是其他 FreeRTOS 任务中最高的- 30/32。

    计时器中断优先级为0、5、15。

    在 FreeRTOS Config.h 中  、中断优先级为0xE0 -先原始、后32、后20。

    在所有情况下,我都有一个抖动任务工作从3usec 到40usec。

    我已经按照 TimerTick ()中断的反汇编进行了操作,它似乎很长-是否有办法缩短它-以更快的中断?

    谢谢。

    此致、

    Eli

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

    尊敬的 Eli:

    TimerTick()函数在 DPL 的 FreeRTOS 端口中实现。 没有一个简单的方法来缩短它的长度。 您可以尝试使用 NORTOS 进行相同的实验。 如果时间较短、则说明这是由 FreeRTOS 移植引起的。 如果是这种情况、我们可以根据 MCU+ SDK 生成 JIRA 票证。

    此致、

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

    尊敬的 Ming:

    我将计时器中断优先级设为15、

    configMAX_SYSCALL_INTERRUPT_Priority (10)  
    CONFIGKERNEL_INTERRUPT_PRIORY (0)
    CONFIGMAX_API_CALL_INTERRUPT_PRIORY (0)  

    FreeRTOS 任务是330/32 -最高

    从中断到任务唤醒、我得到2-25us。 我的实时限制是~3usec!

    请提供建议。

    谢谢。

    此致、

    Eli

     

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

    尊敬的 Eli:

    我认为我们在以下主题中提供的解决方案已回答您的问题:

    (+) LP-AM243:[Servotronix\Mideo]-基于 Arm 的微控制器-内部论坛-基于 Arm 的微控制器-内部- TI E2E 支持论坛

    即使在最坏的情况下、我的数字也小于2us、除非您有更多中断来处理您的应用。

    中断的优先级与任务优先级无关、这是因为中断处理总是高于任务执行。

    此致、

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

    尊敬的 Ming:

    我无法访问此页面,请给我再发送一个链接。

    当我测量一次,我也得到2usec,但当我测量100次, 30-40%的时间,我得到25usecs.

    我还注意到、如果在 FreeRTOS 任务中、我放置了禁用中断-无效。

    我怀疑中断控制器未正确初始化(这是 TCP 服务器示例)

    谢谢。

    此致、

    Eli

      

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

    尊敬的 Eli:

    抱歉,上一个链接在内部论坛由  Eyal  Cohen . 我想他可能已经把它转发给你了。

    我认为差异是由我们使用的应用造成的。 我在使用 TCP 服务器示例时使用的是 Hello World 应用程序。 我将对 TCP 服务器示例进行相同的测试、下周早些时候会与您联系。

    此致、

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

    尊敬的 Ming:

    是的、请做。

    谢谢。

    此致、

    Eli

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

    尊敬的 Eli:

    当然可以!

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

    尊敬的 Eli:

    下面是我从 TCP 服务器示例中得到的信息:

    最大延迟为1.8us、超过187次。 它仍然不到2us、但我也可以看到问题可能在哪里。 在本例中、TCP 服务器正在等待网络正常运行。 (连续打印"Waiting for network up..")。 我想、一旦网络建立、就会有更多的中断提供服务、并且运行更多的优先级任务。 所有这些都会以两种不同的方式影响延迟(最大延迟和平均延迟):

    1.为与互联网相关的中断执行 ISR

    2.优先级较高的任务(具有比运行"xSemaphoreTake (gSem、portMAX_DELAY)"的任务更高的优先级。

    总之、延迟实际上取决于应用程序环境。 网络流量越高、延迟越高;运行"xSemaphoreTake (gSem、portMAX_DELAY)"的任务优先级越低、延迟越高。

    实际上、您不能太多地减少项目1引入的延迟。 但是、您可以提高运行"xSemaphoreTake (gSem、portMAX_DELAY)"的任务的优先级以减少延迟。

    还有一点、如果您尚未完成此操作、请使用 Release 配置文件构建您的 CCS 项目。

    此致、

    明   

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

    尊敬的 Ming:

    我将在 EVM 上重复相同的测试、并尝试改善延迟。

    谢谢。

    此致、

    Eli