找回密码
 立即注册
楼主: tzz***

全网悬赏500元感谢费找BUG! uC/OS-II@STC32G_No_PendSv新移植版

[复制链接]
  • TA的每日心情
    开心
    14 小时前
  • 签到天数: 136 天

    [LV.7]常住居民III

    37

    主题

    870

    回帖

    3960

    积分

    荣誉版主

    积分
    3960
    发表于 2024-4-5 18:03:36 | 显示全部楼层
    经测试, 没问题,

    谢谢 楼上 几位帮我纠正记忆错误.

    点评

    , 你都好几次提过这个问题了, 差点倒逼老姚把定时器改成CCP/PCA模块了, 这下总算弄明白了  详情 回复 发表于 2024-4-5 18:28
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    19

    主题

    519

    回帖

    1646

    积分

    荣誉版主

    积分
    1646
     楼主| 发表于 2024-4-5 18:28:04 | 显示全部楼层
    LAOXU 发表于 2024-4-5 18:03
    经测试, 没问题,

    谢谢 楼上 几位帮我纠正记忆错误.

    , 你都好几次提过这个问题了, 差点倒逼老姚把定时器改成CCP/PCA模块了, 这下总算弄明白了

    点评

    没人回答帮忙纠错  详情 回复 发表于 2024-4-5 23:43
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9291

    回帖

    1万

    积分

    管理员

    积分
    14057
    发表于 2024-4-5 19:13:10 | 显示全部楼层
    STC15/STC8/STC32的 【定时器n】 的模式0,
    都是支持16位硬件自动重装载,这样无误差,
    都可以工作在最低优先级

    STC15/STC8/STC32的定时器0的模式0,
    支持16位硬件自动重装载,这样无误差,
    可以工作在最低优先级

    STC15/STC8/STC32的定时器0的模式3,
    支持16位硬件自动重装载,这样无误差,
    定时器0的模式3,打开并允许工作后,
    不可屏蔽,就是最高优先级 !
    还不可关闭,但你 TR0 = 0, 他也没辙/没时钟

    部分还有 8位预分频,那就是24位的定时器,
    其中16位重装载

    点评

    STC15/STC8/STC32的 【定时器n】 的模式0, 都是支持16位硬件自动重装载,这样无误差, 都可以工作在最低优先级 是不是可以这样理解:假设时钟主频是24MHz,定时器n中断设置在低优先级,每毫秒产生1次中断 (1)  详情 回复 发表于 2024-4-5 20:02
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9291

    回帖

    1万

    积分

    管理员

    积分
    14057
    发表于 2024-4-5 19:17:09 | 显示全部楼层
    CosyOS 发表于 2024-4-5 16:04
    这个世界上,凡事都是辩证的,没有什么是绝对的真理,每一项技术在发挥它优势的同时也必然存在着劣势。
    正 ...

    中断会被挂起等待响应,但同一个中断,第一次产生,还没去响应,又第二次来了,肯定就会丢1次中断

    点评

    是的,中断丢失响应指的就是这种情况  发表于 2024-4-5 19:40
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    7 小时前
  • 签到天数: 158 天

    [LV.7]常住居民III

    5

    主题

    487

    回帖

    2110

    积分

    荣誉版主

    积分
    2110
    发表于 2024-4-5 19:38:11 | 显示全部楼层
    CosyOS-II 专业版测试程序 在 STC32G 上的测试结论

    TASK_0 每秒钟 printf 输出一次任务计数,用的是软件定时器,uDelay_s(1);
    误差通常在1ms左右波动(1ms为一个滴答周期),而且是在多个高优先级中断频繁打断的情况下,
    尤其是任务管理器专用的串口中断,115200bps,每86多us打断一次,每包发出460个bytes。
    {5F42F67A-9263-415f-B1A0-3B4A10D77AD3}.png

    {4AFE86F3-3A80-4c78-8AC0-7B5C37DBBE00}.png



    可见,即使系统滴答中断为最低优先级,只要处理得当,软件定时器仍可满足一般的精度要求。

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    61

    主题

    626

    回帖

    1万

    积分

    荣誉版主

    积分
    10830
    发表于 2024-4-5 20:02:23 | 显示全部楼层
    神农鼎 发表于 2024-4-5 19:13
    STC15/STC8/STC32的 【定时器n】 的模式0,
    都是支持16位硬件自动重装载,这样无误差,
    都可以工作在最低优 ...

    STC15/STC8/STC32的 【定时器n】 的模式0,
    都是支持16位硬件自动重装载,这样无误差,
    都可以工作在最低优先级


    是不是可以这样理解:
    假设时钟主频是24MHz,定时器n中断设置在低优先级,每毫秒产生1次中断
    (1)假如定时器n计数器溢出到0,产生了中断请求,
            然后不管中断请求是否得到响应,不管是否进入到中断服务程序
            因为优先级低,被高优先级的中断阻塞了),
            这时在主频1个时钟周期内,定时器n计数器就被硬件立即自动重装到初始值,
            并且在下个主频时钟周期开始时,就继续重新计数了
            如果这样,自然就在主频时钟周期的量级上没有误差了
    (2)如果是这样,只要定时器n中断被阻塞的时间小于1毫秒,就不会丢节拍了。
            比如这个周期被阻塞了0.5毫秒才执行ISR
            但是下次只再需0.5毫秒定时器n计数器就会溢出到0,产生中断请求
           这样1毫秒的节拍误差不会累计下去。

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9291

    回帖

    1万

    积分

    管理员

    积分
    14057
    发表于 2024-4-5 20:06:50 | 显示全部楼层
    是,16位硬件自动重装,无误差
    截图202404052006418843.jpg
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    61

    主题

    626

    回帖

    1万

    积分

    荣誉版主

    积分
    10830
    发表于 2024-4-5 20:16:20 | 显示全部楼层
    看来焦虑症不分“产前”和“产后”,弄得大家都跟着焦虑了
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    14 小时前
  • 签到天数: 136 天

    [LV.7]常住居民III

    37

    主题

    870

    回帖

    3960

    积分

    荣誉版主

    积分
    3960
    发表于 2024-4-5 23:43:08 | 显示全部楼层
    tzz1983 发表于 2024-4-5 18:28
    , 你都好几次提过这个问题了, 差点倒逼老姚把定时器改成CCP/PCA模块了, 这下总算弄明白了 ...

    没人回答帮忙纠错

    点评

    因为大家被你带领去和风车打架了呀!回想整个过程: (1)指风车为魔鬼:目前 滴答时钟 不准的原因:STC51 只有进入中断后, 才自动重装 定时器, 处于最低中断优先级 的 滴答时钟,被更高的优先级阻障并延迟触发中断很  详情 回复 发表于 2024-4-6 13:50
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    61

    主题

    626

    回帖

    1万

    积分

    荣誉版主

    积分
    10830
    发表于 2024-4-6 13:50:28 | 显示全部楼层
    本帖最后由 杨为民 于 2024-4-12 07:35 编辑
    LAOXU 发表于 2024-4-5 23:43
    没人回答帮忙纠错

    因为大家被你带领去和风车打架了呀!回想整个过程:

    (1)指风车为魔鬼:目前 滴答时钟 不准的原因:STC51 只有进入中断后, 才自动重装 定时器, 处于最低中断优先级 的 滴答时钟,被更高的优先级阻障并延迟触发中断很正常, 这是 目前 造成 滴答时钟 不准的根本原因.
    (2)魔鬼好可怕:当系统 中断凭繁时 ,  滴答时钟 拖长现像非常明显
    (3)照着魔鬼就是一刀:这一点 STC51 和 标准 51 不兼容, 只有 自动重装 改成这样,  装入常数 + 定时器当前值 ---->定时器,自动修正装载时的延时误差,  那么一切问题都不存在了.
    (4)结果有点尴尬,根本就是个正常的风车:


    STC15/STC8/STC32的 【定时器n】 的模式0,
    都是支持16位硬件自动重装载,这样无误差,
    都可以工作在最低优先级


    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-2 17:42 , Processed in 0.069714 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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