这个任务定义为 任务1: 0 500 500 lamp1 任务1: 0 500 500lamp2
定时器中断后会对第2个数500进行减1计算 注意是2个任务同时减 当第2数个500减到0时就会在任务的第1个数的0置成1 代表任务就绪可以执行了 同时将第3个数500传递给第2个数 代表下一个任务是500周期
这时候就有个问题了 你2个任务同时都会减到0代表你2个任务都就绪了 运行第一个任务对IO置0就1个时钟的时间都不到1us 就运行第二个任务了把你这个置0的IO又给置1了 中间就隔了个任务切换时间大概2us
所以你根本很难看到他已经切换了 然后输出就根据任务及中断的延迟而是乱的
解决方案1:不要2个任务控制同一个IO 例如: lamp1 P12=~P12 lamp2 P13=~P13 再观察一目了然
解决方案2:加延时阻塞函数 例如: lamp1 P12=0delay_ms(500) P12=1delay_ms(500)
这个时间片轮询程序的缺点:任务内延时都是阻塞,无消息传递,任务优先级---众生平等,任务时效----看其他任务是不是能按时间完成,任务无法插队,BUG直接卡住....................
但同时优点也非常明显:非常简单,非常可靠,满足大多数场合需求, lzzasd 发表于 2023-12-9 22:25
你对这个时间片轮询程序理解有错 这个程序我都用了很长时间了 程序简单逻辑没有问题
这个任务定义为...
嗯嗯,谢谢{:smile:}{:4_250:}
页:
1
[2]