找回密码
 立即注册
查看: 70|回复: 1

官方的定时器周期性调度任务&协程方式(非阻塞延迟)被我组成合体,这是我想要的

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-06-16 07:49:57
已绑定手机

2

主题

43

回帖

62

积分

注册会员

积分
62
发表于 2025-6-4 17:19:54 | 显示全部楼层 |阅读模式
我把STC官方的两个进程调度程序加到一起来了,只留了关键代码,排除掉一些软代码。
方便移植成自己想要的模板。



之前,我觉得51芯片,大多数工作场合用定时器周期性调度就可以了,只是不能非阻塞延时,不入人意。
但有了王工的协程方式就促成了我需要的理想模式。

分享给大家,请求指导一下。

定时器周期性调度任务add协程式非阻塞延迟demo1.2.zip

160.62 KB, 下载次数: 5

回复

使用道具 举报 送花

3

主题

726

回帖

163

积分

等待验证会员

积分
163
发表于 2025-6-4 17:23:00 | 显示全部楼层
移植STC到协程方式:让定时器调度更灵活

在51芯片的调用链中,定时器的周期性调度一直是传统调用链的重点之一。然而,随着协程方式的普及,定时器的调度方式也面临着重新设计的机遇。本文将探讨如何将STC6600的定时器调度过程从周期性调度模式,移植为基于协程的方式,以实现更灵活、更高效的调用链。

一、STC6600定时器调度的局限性

STC6600的定时器调度器采用周期性调度机制,其调用链形如下:
  1. STC6600定时器 -> STC6622定时器 -> SCL -> PC
复制代码

其中,STC6600定时器负责处理定时器的周期调用,而STC6622定时器负责处理主频调用。SCL(定时器控制线)负责将定时器的周期调用或主频调用转换为非阻塞延迟控制信号,而PC(程序控制线)负责将非阻塞延迟控制信号转换为定时器的周期调用或主频调用。

STC6600的调用链形虽然在传统调用链中占据重要地位,但在某些场景下,如要求高响应速度的系统,周期性调度可能会带来一定的延迟,尤其是在需要频繁切换定时器的情况下。

二、协程方式的调用链设计

协程方式将定时器调度过程设计为非阻塞调用,可以在调用链中无缝插入,同时能够灵活地处理非阻塞延迟控制信号。协程的调用链形如下:
  1. STC6600定时器 -> STC6622定时器 -> SCL -> Covlink -> PC
复制代码

其中,Covlink(协程控制线)是协程调用链中的关键点。在协程调用链中,Covlink负责将非阻塞延迟控制信号转换为定时器的周期调用或主频调用。

三、STC6600到协程的调用链转换

将STC6600的调用链形转换为协程调用链形,需要将STC6600的定时器调用模块转换为协程调用模块。具体步骤如下:

1. STC6600定时器的调用模块:
定时器在完成周期调用后,会调用STC6622定时器发送主频调用。
STC6622定时器会发送SCL信号,用于控制主频调用。
SCL信号会被Covlink模块处理,将其转换为非阻塞延迟控制信号。

2. STC6622定时器的调用模块:
STC6622定时器在完成主频调用后,会发送SCL信号。
SCL信号会被Covlink模块处理,将其转换为定时器的周期调用或主频调用。

3. Covlink模块的调用模块:
Covlink模块负责将SCL信号转换为定时器的调用信号。
在协程调用链中,Covlink模块负责将非阻塞延迟控制信号转换为定时器的周期调用或主频调用。

四、STC到协程的调试步骤

1. 开发STC6600的调用链:
在STC6600的调用链中,设计一个周期性调用模块,用于完成定时器的周期调用。
在此模块中,设计一个主频调用模块,用于完成定时器的主频调用。
在主频调用模块中,设计一个SCL信号的发送模块,用于发送SCL信号到Covlink模块。

2. 将STC6600的调用链转换为协程调用链:
将STC6600的定时器调用模块转换为协程调用模块。
将STC6622定时器的主频调用模块转换为协程调用模块。
将Covlink模块保持不变,因为它负责将SCL信号转换为定时器的调用信号。

3. 调试STC到协程的调用链:
在协程调用链中,运行STC6600的定时器调用模块,确保调用链形正确。
在主频调用模块中,测试SCL信号的发送功能。
在Covlink模块中,测试SCL信号的转换功能。

五、协程方式的优势

1. 更灵活的调用链:
协程方式将定时器的调用链设计为非阻塞调用,能够在调用链中插入定时器的调用,从而实现更灵活的调用链。

2. 更低的延迟:
协程方式通过将非阻塞延迟控制信号转换为定时器的调用信号,降低了定时器的延迟,从而提高了系统的整体响应速度。

3. 更高的灵活性:
协程方式将定时器的调度过程设计为非阻塞调用,能够在调用链中灵活插入定时器的调用,从而实现更复杂的调用场景。

六、总结

将STC6600的定时器调度过程从周期性调度模式移植为协程方式,可以显著提高系统调用的响应速度和灵活性。通过将STC6600的定时器调用模块转换为协程调用模块,可以设计更灵活的调用链,从而实现更高的调用效率。

在移植过程中,需要注意以下几点:

1. 调用链形的设计:
协程调用链形的设计需要与STC6600的调用链形保持一致,以确保调用链的正确性。

2. 非阻塞延迟控制信号的处理:
协程调用链中需要确保非阻塞延迟控制信号能够正确地转换为定时器的调用信号,从而实现非阻塞调用。

3. 调用模块的设计:
在调用模块中,需要设计相应的定时器调用模块,确保定时器的周期调用和主频调用都能正确地完成调用任务。

通过以上步骤,可以将STC6600的定时器调度过程从周期性调度模式移植为协程方式,从而实现更灵活、更高效的调用链。这不仅能够满足传统调用链的使用需求,还能在某些场景下提供更高的调用效率。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-16 11:16 , Processed in 0.148335 second(s), 54 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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