社区导航

 

搜索
查看: 6602|回复: 56

[原创] 小论定时器玩法(时间轮询法)

  [复制链接]

1022

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-8-11 22:09 | 显示全部楼层 |阅读模式
本帖最后由 RCSN 于 2018-8-11 22:09 编辑

     经常来说,对于一些不复杂的单片机应用,而且对于内存和存储要求比较严格,又需要多分时去处理一些指定的任务,在无法使用RTOS的情况下,使用一个硬件定时器,来建立各种任务时间标志位,是比较通用的做法,但是随着时间标志位变量的增加,代码的维护以及简洁度却越来越艰难;因此,楼主使用了一种类似线程管理的时间轮询方式(可能用词不当),来进行一个硬件定时器模拟多个软件定时器(以下就说明为线程吧),支持线程注册、注销、挂起、唤醒、处理等接口。在使用上,只需要引用两个接口,即可开始工作。     先说明下此接口文件的头文件的一些变量,THREAD_NUM_MAX是指能支持最大的线程数目,理论上可以达到四个字节长度数目。使用时候先初始化线程Thread_Init,然后把Thread_RunCheck放在硬件定时器上1ms查询一次当作时钟基准,然后Thread_Process放于while里面轮询查找线程标志。需要定时运行某个任务时候(函数),在进入while里面之前使用注册函数Thread_Login即可。主要退出这个函数使用Thread_Logout即可。下面会举个example来说明这些接口的使用。
TIM截图20180811220114.png

此内容由EEWORLD论坛网友RCSN原创,如需转载或用于商业用途需征得作者同意并注明出处



此帖出自stm32/stm8论坛

回复

使用道具 举报

1022

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-8-11 22:36 | 显示全部楼层
接下来简单介绍下一些接口的实现。源码会放于附件,具体的可以自行分析理解。
首先来说明下两个结构体定义。首先第一个结构体是对线程状态封装,包括线程运行标识flag,当定时轮询到这个线程此标志位会置位,运行条件con包括单次执行运行条件,也就是说此线程只执行一次,还有多次执行条件,永久执行条件。此些条件在头文件的枚举定义。运行次数表示执行的次数,但为永久执行条件,此cnt赋值为0即可。frep为运行周期,即是多少毫秒运行一次,fun是线程函数的指针。thread_manage结构体是线程管理结构体,里面包含当前线程运行数和挂起数。在这里我们申请下一个静态线程管理实例变量。static struct thread_manage thread;所有的线程状态变量都在这里。
2.png
      大概说明下线程是如何一个一个轮询执行的。主要在Thread_Process接口里面。
3.png


回复

使用道具 举报

531

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2018-8-11 22:39 | 显示全部楼层
期待下文,两个typedef有什么作用?

点评

一个用来线程的运行条件,是单次还是多次,还是永久。一个是用来线程管理,线程是否在线程表,运行还是挂起  详情 回复 发表于 2018-8-11 23:05
刻苦学习,共同进步

回复

使用道具 举报

1022

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-8-11 23:02 | 显示全部楼层
   同样再来分析下线程注册接口,这是在初始化的时候需要用到。 4.png
     线程运行条件核对,放在于1ms的硬件定时器中断或者回调中,以此轮询查找线程运行周期状态是否满足。
5.png

回复

使用道具 举报

1022

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-8-11 23:05 | 显示全部楼层
迈尔风随 发表于 2018-8-11 22:39
期待下文,两个typedef有什么作用?

一个用来线程的运行条件,是单次还是多次,还是永久。一个是用来线程管理,线程是否在线程表,运行还是挂起

点评

我是想问typedef void (*fun1)(void); typedef u8 (*fun2)(void)  详情 回复 发表于 2018-8-11 23:09

回复

使用道具 举报

531

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2018-8-11 23:09 | 显示全部楼层
RCSN 发表于 2018-8-11 15:05
一个用来线程的运行条件,是单次还是多次,还是永久。一个是用来线程管理,线程是否在线程表,运行还是挂 ...

我是想问typedef void (*fun1)(void);   typedef u8  (*fun2)(void),经常看到类型这样的复杂的定义,看不太懂

点评

一个定义一个指向函数的指针,没有带参也没有返回值,另外一个typedef有返回一个char型。本例子中使用的是不带参也没有返回值的线程函数接口  详情 回复 发表于 2018-8-11 23:14
刻苦学习,共同进步

回复

使用道具 举报

1022

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-8-11 23:14 | 显示全部楼层
迈尔风随 发表于 2018-8-11 23:09
我是想问typedef void (*fun1)(void);   typedef u8  (*fun2)(void),经常看到类型这样的复杂的定义,看 ...

一个定义一个指向函数的指针,没有带参也没有返回值,另外一个typedef有返回一个char型。本例子中使用的是不带参也没有返回值的线程函数接口

回复

使用道具 举报

1022

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-8-12 01:55 | 显示全部楼层
在这里使用的是nucle-L011板子,利用cube生成代码工程。使用两个外设,GPIO(LED)和usart,在这里我们新建两个线程,一个500ms点灯,一个1s串口发送数据。 5.png

  生成的cube代码在tim.c文件上,开启定时器中断,并且写上自己的回调函数。

6.png
  写好自己的线程函数
7.png
初始化以及注册线程。
8.png



回复

使用道具 举报

1022

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-8-12 02:05 | 显示全部楼层
本帖最后由 RCSN 于 2018-8-19 20:01 编辑

网速太慢了,因为之前重装了系统,也没啥空开电脑。cube,MDK都重新下载安装,搞到现在。终于交了个版主水贴作业。以下是效果图以及demo代码。
9.gif

Thread.7z

266.63 KB, 阅读权限: 20, 下载次数: 60

demo


回复

使用道具 举报

1449

TA的帖子

1

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2018-8-12 07:48 来自手机 | 显示全部楼层
这个用起来很方便,版主好厉害。。

回复

使用道具 举报

272

TA的帖子

2

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-8-12 08:32 | 显示全部楼层
很不错,收藏了,希望版主能整理成文档分享哈

回复

使用道具 举报

1117

TA的帖子

1

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-8-12 10:24 | 显示全部楼层
大佬威武,带带我

回复

使用道具 举报

16

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-8-14 08:47 | 显示全部楼层
本帖最后由 xujr_king 于 2018-8-14 09:05 编辑

版主威武,权限不够下载不了源码,很难过

点评

使劲发帖回帖,等级就上去了哈哈哈  详情 回复 发表于 2018-8-14 09:31

回复

使用道具 举报

268

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-8-14 09:24 | 显示全部楼层
不错不错,对于裸奔来说很适用。

回复

使用道具 举报

1022

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-8-14 09:31 | 显示全部楼层
xujr_king 发表于 2018-8-14 08:47
版主威武,权限不够下载不了源码,很难过

使劲发帖回帖,等级就上去了哈哈哈

回复

使用道具 举报

35

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-8-14 10:10 | 显示全部楼层
感谢楼主的分享,下载学习。

回复

使用道具 举报

998

TA的帖子

1

TA的资源

禁止发言

发表于 2018-8-15 09:49 | 显示全部楼层
厉害厉害,学习一下,
存储芯片/MCU/SRAM/PSRAM/DDR/FLASH/MRAM。web.www.sramsun.com  QQ3161422826 TEL:13751192923

回复

使用道具 举报

4

TA的帖子

0

TA的资源

宇宙尘埃

发表于 2018-8-15 22:07 | 显示全部楼层
版主,能否私聊...没权限下载

点评

源码一直就在那,多发帖共享,多回帖解答问题,权限就高了。加油  详情 回复 发表于 2018-8-15 22:40

回复

使用道具 举报

1022

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-8-15 22:40 | 显示全部楼层
林8033 发表于 2018-8-15 22:07
版主,能否私聊...没权限下载

源码一直就在那,多发帖共享,多回帖解答问题,权限就高了。加油

回复

使用道具 举报

6938

TA的帖子

17

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-8-16 20:32 | 显示全部楼层
好厉害,好牛逼
training

回复

使用道具 举报

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

关闭

站长推荐上一条 1/6 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-6-1 10:07 , Processed in 0.597305 second(s), 40 queries , Gzip On, MemCache On.

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