WHX 发表于 2023-3-12 11:27:14

库函数的分时调度问题

我根据官方的库函数修改的一个实例程序为控制1个LED,按照程序分析LED应该一直为熄灭状态才对,可实际上却不是一直熄灭,而是有时点亮500ms然后又熄灭500ms,如此反复个几次后又一直熄灭个2000ms或1000ms,如示波器设计测得的波形所示。在此也一并把程序截图放出,恳请各位大神们帮忙分析一下,谢谢!

WHX 发表于 2023-3-12 11:29:13

最后面的一个图片是我自己分析后手画的LED输出波形,应该是一条直线才对。

乘风飞扬 发表于 2023-3-13 09:24:34

最好能将完整的程序包发出来,这样才好分析。
像“pbulic.h”文件里面没有定义主时钟频率,那么定时器初始化值是怎么得出来的就没法判断,也不确定其它代码是否会照成影响。
另外,最好在两个进程里分别翻转不同的IO口来判断进程调用频率是否正常,例如lamp1翻转P1.3口,lamp2翻转P1.4口。

chhome 发表于 2023-3-13 16:39:48

本帖最后由 chhome 于 2023-3-13 16:43 编辑

官方的这个综合例程,还要注意有个文件:task.c,这里面定义的是任务及各任务的的时间的

刚看清你的截图里有这个,两个任务相同的周期,你还是两个任务反转了同一个IO口

WHX 发表于 2023-3-13 20:22:57

chhome 发表于 2023-3-13 16:39
官方的这个综合例程,还要注意有个文件:task.c,这里面定义的是任务及各任务的的时间的

刚看清你的截图里 ...

嗯嗯,是啊,我的目的就是要用两个任务来翻转同一个口呀,但是按照分析其输出应该是一条直线才对,可实际上却不是一条直线

WHX 发表于 2023-3-13 20:29:35

乘风飞扬 发表于 2023-3-13 09:24
最好能将完整的程序包发出来,这样才好分析。
像“pbulic.h”文件里面没有定义主时钟频率,那么定时器初始 ...

哦,不好意思,“pbulic.h”文件里面我没有定义主时钟频率,定时器初始化值是我自己另外定义的Timer.c及.h,但是Timer.c及.h没有放出来,忘记了。

templeton 发表于 2023-3-13 20:32:29

文慧萱 发表于 2023-3-13 20:22
嗯嗯,是啊,我的目的就是要用两个任务来翻转同一个口呀,但是按照分析其输出应该是一条直线才对,可实际 ...

两个任务的时间是一样的,几乎是同时触发,但是哪个在前哪个在后,这个就是非常微妙的了。处理顺序不同,波形就不同的。你画的示意图只是你认为的情况,是非常理想下的情况,实际上是不确定的。

WHX 发表于 2023-3-13 20:32:39

现在把Timer.c及.h放出来。

WHX 发表于 2023-3-13 20:34:41

templeton 发表于 2023-3-13 20:32
两个任务的时间是一样的,几乎是同时触发,但是哪个在前哪个在后,这个就是非常微妙的了。处理顺序不同, ...

嗯嗯,有道理,我再分析一下,谢谢指教

NaOHSol 发表于 2023-10-8 01:12:31

本帖最后由 NaOHSol 于 2023-10-8 01:14 编辑

可能在任务处理回调函数中的for循环执行了一遍后进入了定时器中断,又在定时器中断中执行了任务标记回调函数,导致任务处理回调函数中第一遍循环时两个任务的Run都是0,Sample_Lamp1未执行,第二遍循环时Run都为1,Sample_Lamp2执行,P13=1,Sample_Lamp2的Run=0,紧接着又进入任务处理回调函数,此时Sample_Lamp1的Run=1,Sample_Lamp1执行,P13=0
页: [1] 2
查看完整版本: 库函数的分时调度问题