• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

freeRTOS中的多任务中可以执行多次吗

Argent 2019-04-02 浏览量:1540
在基于STM32F2RGT6的开发板上,运行freeRTOS时触发了一次中断后可以反复执行任务中的函数吗?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:7
  • FreeRTOS 多任务调度支持 时间片段,抢占式  和 和做式

    任务侁先级可以在调度器启动后调用 vTaskPrioritySet() API 函数进行修改

    任意数量的任务可以共享同一个优先级——以保证最大设计弹性。当然,如果需要的话,你也可以为每个任务指定唯一的优先级(就如同某些调度算法的要求一样),但这不是强制要求的。低优先级号表示任务的优先级低,优先级号 0 表示最低优先级。有效的优先级号范围从 0 到(configMAX_PRIORITES – 1)。

  • 正常情况下,中断的操作流程是:

    中断触发,清除中断标志,执行中断函数,退出中断函数,等待下次中断触发;

    你可以改成:

    中断触发,执行中断函数,退出中断函数,再次执行中断函数,退出中断函数....直到清除中断标志才停止进入中断。

    不过我个人更倾向于:

    中断触发,清除中断标志,开启任务A,退出中断函数,等待下次中断触发;

    任务A:主要任务就是,开启任务B(),延时,开启任务B(),延时,任务挂起;

    任务B:就是你中断需要完成的任务,执行完成之后,任务挂起。

    注意:任务A\B的优先级一定要设为最高。

  • 调度器保证总是在所有可运行的任务中选择具有最高优先级的任务,并使其进入运行态。如果被选中的优先级上具有不止一个任务,调度器会让这些任务轮流执行。这种行为方式在之前的例子中可以明显看出来。两个测试任务被创建在同一个优先级上,并且一直是可运行的。所以每个任务都执行一个”时间片”,任务在时间片起始时刻进入运行态,在时间片结束时刻又退出运行态

  • 运行freeRTOS时触发了一次中断后可以反复执行任务中的函数?

    你的反复执行是指什么?

    反复执行的函数需要有退出循环(反复就是一种循环吧)机制吗?

    任务是可分片的吗?

    这些影响具体任务实现和执行效果。

  • freertos里面的任务都是多次执行的,由系统分配,每个任务都能得到一段使用CPU的时间,除非系统异常,有高优先级的任务一直阻塞,低优先级的任务就无法运行。

    freertos的中断处理跟裸机的是一样的,在进入中断之后,系统会停止调度,等退出中断之后再继续执行调度

  • 实时操作系统里多任务一般在不停止那个任务时,都会多次执行,由系统进行调度。


  • 可以在中断中循环多次执行一个任务,但是时间不要太长,不然会影响实时性

    可以在中断中切换任务退出中断再执行,可提高实时性

相关问题

问题达人换一批

freeRTOS中的多任务中可以执行多次吗