1. 简单的顺序执行程序
2.前后台执行程序:在顺序执行的情况上增添中断前台处理机制,配置顺序执行的后台大循环程序,组合成可以实时响应的程序。
后台还是我们平时写的mian里 while里的函数
前台类似我们最开始写的中断函数 而区别在于这个中断(有优先级之分)里边我们加入了执行任务的函数 以便提高时间利用率。
(1)若中断函数里的内容(即需要执行任务的)和其他函数一起放在大循环里(没有前台),且执行其他函数时间损耗大 则无法及时执行原本中断函数里的内容(可能会造成数据丢失等)
(2)若中断函数里的内容(即需要执行任务的)单独放在大循环里 而我们理想是每次执行一次这个任务时都有缓冲的时间间隔 放在大循环里后则会一直不断执行此函数
Eg:(可参考下图)
3. 时间片轮循法:在前后台的执行架构上,通过计数器进一步规划程序,定时执行特定的片段。
Eg:
- 大循环里的函数所要执行每个步骤我们都给他规定一个固定的时间
- 假如现在50ms的时候,会执行2ms,10ms, 50ms的程序,但假如这三个任务的时间累和比较长的话,一起执行会造成卡顿
- 若这三个任务执行时间大于2ms,则下一个2ms不能及时的执行;若此2ms任务是个紧急任务的话 实时性就差了
PS:(DWT)
写在前面:
STM32 DWT时间戳功能实现
1.ARM 的cortex m3 m4 m7可用。
2.精度:1/内核频率(s)。
3.实现流程:
(a)先使能DWT外设,由内核调试寄存器DEM_CR的位24控制,写1使能。
(b)使能CYCCNT寄存器之前,先清0。
(c)使能CYCCNT寄存器,由DWT_CTRL的位0控制,写1使能
A.任务调度基准表(时间)
注意这里 vTask_xms可以换成其他·某个具体函数but必须是void类型
CUZ: 因为这个表格里写的是函数指针, 任务调度是用函数指针进入函数的
而此任务调度只能够支持这个类型的函数
( PS: void和指针指向哪里没有关系 void是函数的返回值为空, 函数本身是有地址的,
利用函数指针 结构体里就可以用函数指针来调用函数了;
就可以写出 aaa.bbb(cc,d); 这种 or a->b(c,d); 这样
B.开(关)时间测量开关
C.最后 运行放在主函数while里就OK了
Dwt主要优点 就是不占用中断, 没有压栈出栈的过程 精度高
4. 实时操作系统:实时操作系统又叫RTOS,实时性,RTOS的内核负责管理所有的任务,内核决定了运行哪个任务,何时停止当前任务切换到其 他任务,这个是内核的多任务管理能力。多任务 管理给人的感觉就好像芯片有多个CPU,多任务管理实现了CPU资源的最大化利用,多任务管理有助于实现程序的模块化开发,能够实现复杂的实时应用。
除了实时性,还有可剥夺内核,顾名思义就是可以剥夺其他任务的CPU使用权,它总是运行就绪任务中的优先级最高的那个任务。