周期任务框架在裸机、RTOS上的实现_单片机周期任务(1),Golang学习路线

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注go)
img

正文

若f(x)为周期函数,则把使得f(x+l)=f(x)对定义域中的任何x都成立的最小正数l,称为f(x)的(基本)周期。

在计算机中,完成一个循环所需要的时间;或访问一次存储器所需要的时间,亦称为周期 [4] 。周期函数的实质:两个自变量值整体的差等于周期的倍数时,两个自变量值整体的函数值相等。如:f(x+6) =f(x-2)则函数周期为T=8。

按照我们一般的理解,周期任务是指每个任务的开始执行时刻(或完成该任务的时刻)都相隔一个固定的时间,还是指在一段时间内,该任务必须执行一次。

周期任务的第一种表述更接近数学上的精确描述。

周期任务的第二种表述则更加贴合实际。

在业界,周期任务的表述为:

周期任务是指计算机系统按一定周期到达并请求运行,每次请求称为任务的一个任务实例,任务实例所属任务的起始时刻称为该任务实例的到达时刻,任务实例被置为就绪态的时刻称为该任务实例的释放时刻。

可以看出,这个周期任务的描述更加准确,且考虑到了操作系统对任务的调度。在有操作系统时,任务是不能直接由创建到执行态的,任务是否执行是由操作系统来决定的。我们能控制的,是把该任务置位就绪态,等待操作系统分配CPU资源。

因此,我的周期任务的第二种描述应该是业界周期任务表述的白话版。

实际的周期任务只要能满足在每一段时间内都执行一次就算满足了其周期性。


讲到周期,就必须讲时间,时刻,而这些都需要时间基准和时间度量。

因此我们需要对时钟有一定的了解,可以参考这篇文章:对单片机中时钟的理解


下面我以VxWorks5.5和RTT为例来说明一下定时器。

VxWorks

vxworks中的定时方法:VxWorks几种常用的延时方法

image-20220301222742523

image-20220301222920849

image-20220301222958562

image-20220301223155223

image-20220301223234755

image-20220301223438311

RTT

可以参考官方文档:时钟管理

三、周期任务框架

对以上背景知识了解之后,我们可以构建出怎样的周期任务框架呢?

在裸机上和在RTOS操作系统上有什么不同。

单片机裸机周期任务框架

分享一篇非常非常好的文章,来自无际大佬,单片机怎么做定时器矩阵,彻底解决各种定时问题?

看完这篇文章,我们就对单片机裸机编程中的周期任务框架了然于心了。

RTOS周期任务框架

一般的RTOS都会提供创建任务的接口,但是不一定会提供创建周期任务的接口,因此一般如果要想在RTOS上使用创建周期任务的接口,需要我们使用定时器和创建任务的接口一起来生成一个创建周期任务的接口。当然有的RTOS是提供了创建周期任务的接口,比如接下来我们要介绍的国产开源RTOS——RT-Thread 。

在RT-Thread 官方文档提供的示例代码中:

#include <rtthread.h>

/* 定时器的控制块 */
static struct rt_timer timer1;
static struct rt_timer timer2;
static int cnt = 0;

/* 定时器 1 超时函数 */
static void timeout1(void* parameter)
{
rt_kprintf(“periodic timer is timeout\n”);
/* 运行 10 次 */
if (cnt++>= 9)
{
rt_timer_stop(&timer1);
}
}

/* 定时器 2 超时函数 */
static void timeout2(void* parameter)
{

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
取:vip1024b (备注Go)**
[外链图片转存中…(img-4fWQgCJ1-1713203214437)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值