找回密码
 立即注册
查看: 2148|回复: 11

库函数的分时调度问题

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:484
  • 最近打卡:2025-05-01 08:52:01
已绑定手机

23

主题

589

回帖

2813

积分

金牌会员

积分
2813
发表于 2023-3-12 11:27:14 | 显示全部楼层 |阅读模式
我根据官方的库函数修改的一个实例程序为控制1个LED,按照程序分析LED应该一直为熄灭状态才对,可实际上却不是一直熄灭,而是有时点亮500ms然后又熄灭500ms,如此反复个几次后又一直熄灭个2000ms或1000ms,如示波器设计测得的波形所示。在此也一并把程序截图放出,恳请各位大神们帮忙分析一下,谢谢!
LED用户程序头文件.png
LED用户程序文件.png
main头文件.png
main文件.png
public文件.png
Task头文件.png
Task文件.png
9f61859685533b8cbd7baedac8d9f7a.jpg
788d98d89f0e5eb42e243a74c5c6541.jpg
85532526e5e0cb072b4efe39b375270.jpg
a4d5bde89daa566688070e21d740786.jpg
a41cd656a90dee6c40164b1d253e022.jpg
f58d5b1ec25aa606f427c6f5ec475ea.png
波形.jpg
不停地学习
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:484
  • 最近打卡:2025-05-01 08:52:01
已绑定手机

23

主题

589

回帖

2813

积分

金牌会员

积分
2813
发表于 2023-3-12 11:29:13 | 显示全部楼层
最后面的一个图片是我自己分析后手画的LED输出波形,应该是一条直线才对。
不停地学习
  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2023-3-13 09:24:34 | 显示全部楼层
最好能将完整的程序包发出来,这样才好分析。
像“pbulic.h”文件里面没有定义主时钟频率,那么定时器初始化值是怎么得出来的就没法判断,也不确定其它代码是否会照成影响。
另外,最好在两个进程里分别翻转不同的IO口来判断进程调用频率是否正常,例如lamp1翻转P1.3口,lamp2翻转P1.4口。
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-03-26 10:27:44

0

主题

14

回帖

140

积分

注册会员

积分
140
发表于 2023-3-13 16:39:48 | 显示全部楼层
本帖最后由 chhome 于 2023-3-13 16:43 编辑

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

刚看清你的截图里有这个,两个任务相同的周期,你还是两个任务反转了同一个IO口
  • 打卡等级:以坛为家II
  • 打卡总天数:484
  • 最近打卡:2025-05-01 08:52:01
已绑定手机

23

主题

589

回帖

2813

积分

金牌会员

积分
2813
发表于 2023-3-13 20:22:57 | 显示全部楼层
chh*** 发表于 2023-3-13 16:39
官方的这个综合例程,还要注意有个文件:task.c,这里面定义的是任务及各任务的的时间的

刚看清你的截图里 ...

嗯嗯,是啊,我的目的就是要用两个任务来翻转同一个口呀,但是按照分析其输出应该是一条直线才对,可实际上却不是一条直线
不停地学习
  • 打卡等级:以坛为家II
  • 打卡总天数:484
  • 最近打卡:2025-05-01 08:52:01
已绑定手机

23

主题

589

回帖

2813

积分

金牌会员

积分
2813
发表于 2023-3-13 20:29:35 | 显示全部楼层
乘风*** 发表于 2023-3-13 09:24
最好能将完整的程序包发出来,这样才好分析。
像“pbulic.h”文件里面没有定义主时钟频率,那么定时器初始 ...

哦,不好意思,“pbulic.h”文件里面我没有定义主时钟频率,定时器初始化值是我自己另外定义的Timer.c及.h,但是Timer.c及.h没有放出来,忘记了。
不停地学习
  • 打卡等级:偶尔看看III
  • 打卡总天数:33
  • 最近打卡:2025-04-10 08:59:03

15

主题

30

回帖

433

积分

中级会员

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

两个任务的时间是一样的,几乎是同时触发,但是哪个在前哪个在后,这个就是非常微妙的了。处理顺序不同,波形就不同的。你画的示意图只是你认为的情况,是非常理想下的情况,实际上是不确定的。
  • 打卡等级:以坛为家II
  • 打卡总天数:484
  • 最近打卡:2025-05-01 08:52:01
已绑定手机

23

主题

589

回帖

2813

积分

金牌会员

积分
2813
发表于 2023-3-13 20:32:39 | 显示全部楼层
现在把Timer.c及.h放出来。 Timer0头文件.png Timer0源文件.png
不停地学习
  • 打卡等级:以坛为家II
  • 打卡总天数:484
  • 最近打卡:2025-05-01 08:52:01
已绑定手机

23

主题

589

回帖

2813

积分

金牌会员

积分
2813
发表于 2023-3-13 20:34:41 | 显示全部楼层
templ*** 发表于 2023-3-13 20:32
两个任务的时间是一样的,几乎是同时触发,但是哪个在前哪个在后,这个就是非常微妙的了。处理顺序不同, ...

嗯嗯,有道理,我再分析一下,谢谢指教
不停地学习

0

主题

2

回帖

84

积分

注册会员

积分
84
发表于 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
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 01:54 , Processed in 0.182085 second(s), 118 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表