FreeRTOS 多任务调度支持 时间片段,抢占式 和 和做式
任务侁先级可以在调度器启动后调用 vTaskPrioritySet() API 函数进行修改
任意数量的任务可以共享同一个优先级——以保证最大设计弹性。当然,如果需要的话,你也可以为每个任务指定唯一的优先级(就如同某些调度算法的要求一样),但这不是强制要求的。低优先级号表示任务的优先级低,优先级号 0 表示最低优先级。有效的优先级号范围从 0 到(configMAX_PRIORITES – 1)。
正常情况下,中断的操作流程是:
中断触发,清除中断标志,执行中断函数,退出中断函数,等待下次中断触发;
你可以改成:
中断触发,执行中断函数,退出中断函数,再次执行中断函数,退出中断函数....直到清除中断标志才停止进入中断。
不过我个人更倾向于:
中断触发,清除中断标志,开启任务A,退出中断函数,等待下次中断触发;
任务A:主要任务就是,开启任务B(),延时,开启任务B(),延时,任务挂起;
任务B:就是你中断需要完成的任务,执行完成之后,任务挂起。
注意:任务A\B的优先级一定要设为最高。
运行freeRTOS时触发了一次中断后可以反复执行任务中的函数?
你的反复执行是指什么?
反复执行的函数需要有退出循环(反复就是一种循环吧)机制吗?
任务是可分片的吗?
这些影响具体任务实现和执行效果。
freertos里面的任务都是多次执行的,由系统分配,每个任务都能得到一段使用CPU的时间,除非系统异常,有高优先级的任务一直阻塞,低优先级的任务就无法运行。
freertos的中断处理跟裸机的是一样的,在进入中断之后,系统会停止调度,等退出中断之后再继续执行调度
实时操作系统里多任务一般在不停止那个任务时,都会多次执行,由系统进行调度。
可以在中断中循环多次执行一个任务,但是时间不要太长,不然会影响实时性
可以在中断中切换任务退出中断再执行,可提高实时性