打印
[程序源码]

真正的单片机程序框架------->小巧的软件定时器....O(∩_∩)O

[复制链接]
楼主: misra
手机看帖
扫描二维码
随时随地手机跟帖
41
有点意思

使用特权

评论回复
评论
misra 2021-3-11 20:53 回复TA
哈哈 
42
ayb_ice| | 2021-3-8 08:32 | 只看该作者
星星ARM 发表于 2021-3-5 23:52
在晚上看到你的这段代码很好,能不能添加注释,我那特别喜欢这段代码,也谢谢辛苦的付出 ...

代码其实很简单,核心就是时基概念,就是取差值,当前滴答与某个基准滴答相减,看间隔时间是否超过预定值,超过即超时,然后更新时基(当前的滴答作为新的时基),配合状态机就搞定了,每个任务有自己的时基,

使用特权

评论回复
评论
ayb_ice 2021-3-12 09:03 回复TA
@misra :非常正确,这是基本思想 
misra 2021-3-11 20:55 回复TA
是的 本质就是 if (当前时间 - lasttime) > 1000) { lasttime = 当前时间; //DO something! } 
43
datouyuan| | 2021-3-8 11:18 | 只看该作者
misra 发表于 2021-2-25 09:41
1楼占个位
源码链接(21IC这个超链接似乎不好用,大家费点事,复制粘贴吧):
https://github.co ...

今天不能进入github,能否把代码放到gitee?

使用特权

评论回复
44
ayb_ice| | 2021-3-9 10:15 | 只看该作者
早20L了,源码应该上了吧

使用特权

评论回复
45
cdpzq| | 2021-3-10 13:59 | 只看该作者
不错!

使用特权

评论回复
46
CM-803| | 2021-3-11 20:11 | 只看该作者
本帖最后由 CM-803 于 2021-3-11 20:13 编辑

请教一下:
主程序有定时器设置和启动了,为什么还要勾选debug的:“Limit speed to real-time”
勾选的定时器在哪里体现到,能把完整的这个小工程放出来下载,试试体验一下

使用特权

评论回复
评论
misra 2021-3-11 20:41 回复TA
第50楼有链接 bsp文件夹下 有keil 和gcc 
misra 2021-3-11 20:16 回复TA
小工程 写完就删了好像! 你要觉得这个对你很重要,你可以自己弄个工程。 
47
misra|  楼主 | 2021-3-11 20:15 | 只看该作者
CM-803 发表于 2021-3-11 20:11
请教一下:
主程序有定时器设置和启动了,为什么还要勾选debug的:“Limit speed to real-time”
勾选的定 ...

选不选无所谓 只是为了显示效果。

使用特权

评论回复
48
misra|  楼主 | 2021-3-11 20:21 | 只看该作者
CM-803 发表于 2021-3-11 20:11
请教一下:
主程序有定时器设置和启动了,为什么还要勾选debug的:“Limit speed to real-time”
勾选的定 ...

这个是软仿真。就是不用硬件。

不设置realtime 那么电脑上显示的就会和1ms有较大的误差。

当然如果程序下载到单片机仍然会是准确的1MS。

使用特权

评论回复
49
misra|  楼主 | 2021-3-11 20:23 | 只看该作者
ayb_ice 发表于 2021-3-9 10:15
早20L了,源码应该上了吧

源码在二楼  

代码还实现了了类似 PLC的定时器功能。

使用特权

评论回复
50
misra|  楼主 | 2021-3-11 20:36 | 只看该作者
本帖最后由 misra 于 2021-3-11 21:03 编辑
CM-803 发表于 2021-3-11 20:11
请教一下:
主程序有定时器设置和启动了,为什么还要勾选debug的:“Limit speed to real-time”
勾选的定 ...

我知道你的意思了。


链接 https://github.com/steven-lyan/microLite_timer/archive/main.zip
在bsp文件夹下有keil。效果执行如下(下图点击可放大):



另外doc下还有如图:





使用特权

评论回复
51
CM-803| | 2021-3-11 20:53 | 只看该作者
misra 发表于 2021-3-11 20:36
我知道你的意思了。

初学者,前后台编程方法,刚开始看这方面的知识,楼主很棒

使用特权

评论回复
52
misra|  楼主 | 2021-3-11 20:59 | 只看该作者
CM-803 发表于 2021-3-11 20:53
初学者,前后台编程方法,刚开始看这方面的知识,楼主很棒

不过也有人提出说的代码的命名方式不是太好。
总体看,这个代码质量还是相当高的。值得好好研究。

加油 尽快过度到RTOS

使用特权

评论回复
53
ayb_ice| | 2021-3-12 10:32 | 只看该作者
misra 发表于 2021-3-11 20:23
源码在二楼  

代码还实现了了类似 PLC的定时器功能。

这只是示意代码
关键的代码都没有
MLPeriod.init();
MLPeriod.check();

使用特权

评论回复
54
misra|  楼主 | 2021-3-12 16:58 | 只看该作者
ayb_ice 发表于 2021-3-12 10:32
这只是示意代码
关键的代码都没有
MLPeriod.init();

有啊 都有啊  50楼 也有啊  都给了

使用特权

评论回复
55
misra|  楼主 | 2021-3-18 19:17 | 只看该作者
加班中...

使用特权

评论回复
56
CM-803| | 2021-3-20 12:38 | 只看该作者
看了好一阵子,补补不会的知识点,底子有点差,想问问楼主一个问题,
microLite_timer.h



使用特权

评论回复
评论
CM-803 2021-3-20 12:48 回复TA
为什么带括号? 
57
Prry| | 2021-3-20 14:44 | 只看该作者
CM-803 发表于 2021-3-20 12:38
看了好一阵子,补补不会的知识点,底子有点差,想问问楼主一个问题,
microLite_timer.h

很明显是函数

使用特权

评论回复
58
Prry| | 2021-3-20 15:08 | 只看该作者
这个是C基本编程思维了。通过函数指针方式,将公共部分抽象出来,需经常变动的地方由用户使用时实例化,实现“多态”。优秀的代码参考,多看Linux程序框架

使用特权

评论回复
59
misra|  楼主 | 2021-3-22 19:36 | 只看该作者
CM-803 发表于 2021-3-20 12:38
看了好一阵子,补补不会的知识点,底子有点差,想问问楼主一个问题,
microLite_timer.h

这个是个函数原型

函数在microLite_timer.cl里面。
ml_shotTimer_Object_Struct是本质上是个结构体数据类型。常见的数据类型有int  ,char , unsigned char 之类的。

但是这些数据类型表达的东西太少了 所以C语言发明者  造出了结构体这种数据类型。

结构体里面有成员,我定义的这个结构体成员都是函数指针。

底子薄不要紧。我这个写的还可以。值得一看。

另外楼上那位说得
非常对,就是要看linux。


使用特权

评论回复
60
CM-803| | 2021-3-22 22:21 | 只看该作者
misra 发表于 2021-3-22 19:36
这个是个函数原型

函数在microLite_timer.cl里面。

多问一下楼主,
1、自定义的数据结构还能声明函数,这个我在C语言里没见过,见过的都是单独的变量声明;
2、另外是在window平台里编译的,和Linux有关吗?跟这个有关的看哪些书,方便的话推荐一两本;
我现在很少用指针,自定义的数据结构基本上没用过。
真的很喜欢你的作品,非常值得学习,也借这次学习的机会多提高提高。
谢谢!

使用特权

评论回复
评论
misra 2021-3-23 20:10 回复TA
兄弟 不用指针也没什么坏处。可能还是好事。不过可以不用,但必须要会。随便找本C语言书 把指针那章多看几遍就行。比如20遍。看一维指针就行。 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则