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

库函数的分时调度问题

[复制链接]
  • TA的每日心情
    无聊
    昨天 08:14
  • 签到天数: 151 天

    [LV.7]常住居民III

    18

    主题

    534

    回帖

    1298

    积分

    金牌会员

    积分
    1298
    发表于 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
    不停地学习
    回复 送花

    使用道具 举报

  • TA的每日心情
    无聊
    昨天 08:14
  • 签到天数: 151 天

    [LV.7]常住居民III

    18

    主题

    534

    回帖

    1298

    积分

    金牌会员

    积分
    1298
     楼主| 发表于 2023-3-12 11:29:13 | 显示全部楼层
    最后面的一个图片是我自己分析后手画的LED输出波形,应该是一条直线才对。
    不停地学习
  • TA的每日心情
    奋斗
    前天 08:59
  • 签到天数: 143 天

    [LV.7]常住居民III

    27

    主题

    1343

    回帖

    4187

    积分

    论坛元老

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

    该用户从未签到

    0

    主题

    10

    回帖

    108

    积分

    注册会员

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

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

    刚看清你的截图里有这个,两个任务相同的周期,你还是两个任务反转了同一个IO口
  • TA的每日心情
    无聊
    昨天 08:14
  • 签到天数: 151 天

    [LV.7]常住居民III

    18

    主题

    534

    回帖

    1298

    积分

    金牌会员

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

    刚看清你的截图里 ...

    嗯嗯,是啊,我的目的就是要用两个任务来翻转同一个口呀,但是按照分析其输出应该是一条直线才对,可实际上却不是一条直线
    不停地学习
  • TA的每日心情
    无聊
    昨天 08:14
  • 签到天数: 151 天

    [LV.7]常住居民III

    18

    主题

    534

    回帖

    1298

    积分

    金牌会员

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

    哦,不好意思,“pbulic.h”文件里面我没有定义主时钟频率,定时器初始化值是我自己另外定义的Timer.c及.h,但是Timer.c及.h没有放出来,忘记了。
    不停地学习
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    9

    主题

    15

    回帖

    165

    积分

    注册会员

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

    两个任务的时间是一样的,几乎是同时触发,但是哪个在前哪个在后,这个就是非常微妙的了。处理顺序不同,波形就不同的。你画的示意图只是你认为的情况,是非常理想下的情况,实际上是不确定的。
  • TA的每日心情
    无聊
    昨天 08:14
  • 签到天数: 151 天

    [LV.7]常住居民III

    18

    主题

    534

    回帖

    1298

    积分

    金牌会员

    积分
    1298
     楼主| 发表于 2023-3-13 20:32:39 | 显示全部楼层
    现在把Timer.c及.h放出来。 Timer0头文件.png Timer0源文件.png
    不停地学习
  • TA的每日心情
    无聊
    昨天 08:14
  • 签到天数: 151 天

    [LV.7]常住居民III

    18

    主题

    534

    回帖

    1298

    积分

    金牌会员

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

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

    该用户从未签到

    0

    主题

    2

    回帖

    64

    积分

    注册会员

    积分
    64
    发表于 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, 2024-5-19 20:36 , Processed in 0.072083 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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