搜索
bottom↓
回复: 40

单片机怎么在灯闪烁的同时去做另一件事情呢?

[复制链接]

出0入0汤圆

发表于 2018-11-3 14:54:25 | 显示全部楼层 |阅读模式

程序中定时1s和10s有什么问题没有

BOOL  volatile  led_flag;
BOOL  volatile  flag_1s;
BOOL  volatile  flag_10s;

void Sys_10ms_Interrupt(void) //10ms中断函数
{
        static volatile  u16 led_timer = 0;
        static volatile  u16 count_timer = 0;
        static volatile  u16 count_timer2 = 0;
        count_timer++;
        flag_1s = 0;
        if(count_timer%100 == 0)       
        {       
                flag_1s = 1;          //1s定时
                count_timer2++;
                if(count_timer2 == 10)
                {                  
                        flag_10s = 1;       //10s定时
                        count_timer2 = 0;
                }
        }
        led_timer++;
        if(led_timer>10) //100ms 反转
        {
                led_flag =~led_flag;
                led_timer = 0;
        }
}

出0入0汤圆

发表于 2018-11-3 15:05:11 来自手机 | 显示全部楼层
直接是否等于100不好吗

出0入0汤圆

发表于 2018-11-3 15:06:07 | 显示全部楼层
这是中断函式,在主函式内做你的其他事情(另一件事情...)

出0入0汤圆

发表于 2018-11-3 15:27:59 | 显示全部楼层
本帖最后由 elec2000 于 2018-11-3 15:29 编辑

单片机程序中点灯是次要的,主要的是你其他的重要事情。
定时中断是你在干重要事情时,定时的被打断(10mS)去记录被打断多少次,,如果到了10次,则反转LED的状态;到了100次则确认1S时间到做一个 flag_1s = 1,同时count_timer2+1(一秒加1)。当count_timer2=10时,。。。。
而这个中断时间很短(与10mS比较),所以你有很多时间去干其他的重要事情。

出0入4汤圆

发表于 2018-11-3 17:11:23 | 显示全部楼层
程序结构不对。
中断处理任务也是不太好的,除非任务非常短。

出0入0汤圆

发表于 2018-11-3 17:24:56 | 显示全部楼层
不要浪費主程序只去做等待動作, 需善用中斷, 也不要在中斷裡做太多事情.

出0入0汤圆

发表于 2018-11-3 17:25:00 | 显示全部楼层
论坛上马潮老师的按键程序,了解一下

出0入0汤圆

发表于 2018-11-3 17:28:10 来自手机 | 显示全部楼层
用freertos啊

出0入0汤圆

发表于 2018-11-3 17:33:55 | 显示全部楼层
上RTOS不就可以了吗

出0入0汤圆

 楼主| 发表于 2018-11-3 17:43:33 | 显示全部楼层
laujc 发表于 2018-11-3 17:11
程序结构不对。
中断处理任务也是不太好的,除非任务非常短。

哪里不对呢,可不可以说一下,新手

出0入0汤圆

 楼主| 发表于 2018-11-3 17:45:03 | 显示全部楼层

freetos是啥,原谅我是新手

出0入0汤圆

发表于 2018-11-3 18:46:38 | 显示全部楼层
就目前的情况看,OS还不适合你的阶段,用状态机吧

出0入0汤圆

发表于 2018-11-3 18:52:08 | 显示全部楼层
没有人叫你一直等啊!搞个定时器中断,设一个标志位,时间没到跳过去,时间到了才执行。

出0入0汤圆

发表于 2018-11-3 19:36:13 | 显示全部楼层
早上起来你烧水,你难道站在厨房里一下盯着它吗?

出0入0汤圆

发表于 2018-11-3 20:22:20 | 显示全部楼层
打一枪就转移阵地

出0入0汤圆

发表于 2018-11-3 20:58:09 | 显示全部楼层
新手吗  建议新手不要学电子了,学不完的知识,可以考虑转大数据处理 这些互联网项目。虽然哪都有学不完的知识,但是相对新的东西工资高

出0入0汤圆

发表于 2018-11-3 21:06:00 | 显示全部楼层
这些不是及时处理还是不要放在中断里吧,主函数处理多好

出0入4汤圆

发表于 2018-11-3 21:21:29 | 显示全部楼层
void Sys_10ms_Interrupt(void) //10ms中断函数
{
        static volatile  u16 led_timer = 0;
        static volatile  u16 count_timer = 0;
        static volatile  u16 count_timer2 = 0;
        count_timer++;
        flag_1s = 0;                                     flag_1s这里每10ms就清零不对, 应该放到1秒任务中清零
        if(count_timer%100 == 0)        
        {        
                flag_1s = 1;          //1s定时

出0入4汤圆

发表于 2018-11-3 21:40:51 | 显示全部楼层
资深雨粉 发表于 2018-11-3 17:43
哪里不对呢,可不可以说一下,新手

6L 说得比较正确

出0入58汤圆

发表于 2018-11-5 09:05:24 | 显示全部楼层
状态机适合你。

出0入16汤圆

发表于 2018-11-5 09:39:52 | 显示全部楼层
中断只记录标识累加,然后到一定次数的中断后main那边处理相应的就可以了。
假设1秒一个中断
%3==0 就是3秒处理的事情
%10==0 就是10秒处理的事情了

出0入4汤圆

发表于 2018-11-5 09:57:37 | 显示全部楼层
QPC framework 值得每个单片机工程师拥有。

出0入0汤圆

发表于 2018-11-5 10:36:59 | 显示全部楼层
cnshibo 发表于 2018-11-5 09:57
QPC framework 值得每个单片机工程师拥有。



百度一下,是这个东西么?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入4汤圆

发表于 2018-11-5 15:49:59 | 显示全部楼层
sup888 发表于 2018-11-5 10:36
百度一下,是这个东西么?

是的,就是这个东西。

出0入4汤圆

发表于 2018-11-5 15:52:46 | 显示全部楼层
sup888 发表于 2018-11-5 10:36
百度一下,是这个东西么?

工作中已经用了这个状态机了。这是个好东西,但是书我是看不懂。

出0入0汤圆

发表于 2018-11-5 16:09:26 | 显示全部楼层
yunqing_abc 发表于 2018-11-5 15:52
工作中已经用了这个状态机了。这是个好东西,但是书我是看不懂。

是不是把简单的东西写复杂了 。不太习惯这本书的排版

出0入4汤圆

发表于 2018-11-5 16:17:19 | 显示全部楼层
sup888 发表于 2018-11-5 16:09
是不是把简单的东西写复杂了 。不太习惯这本书的排版

对的,写的太恶心了。本来很简单的东西,搞那么复杂

出0入0汤圆

发表于 2018-11-5 16:39:49 | 显示全部楼层
sup888 发表于 2018-11-5 10:36
百度一下,是这个东西么?

又是一份500+ page的资料
搞嵌入式的真心伤不起

最近稍微有丁点没有那么忙
就打算提高一下自己,比如玩玩RTOS/GUI
猛然发现
貌似想读懂RTOS代码,得熟悉ARM的汇编指令
了解汇编指令就要了解ARM体系
然后又发现C语言有很多用法之前都没用过,甚至没见过..
先放着,跳过去继续学习RTOS吧
又感觉想要用好RTOS必须有良好的编程思路
额,编程思维方面的资料也是有很多的,暂时看不过来
那就先做点啥 现学现用吧..
GUI是什么原理?
文件系统什么回事?
DMA..FMSC..FPU..?

出0入0汤圆

发表于 2018-11-5 17:08:04 | 显示全部楼层
cnshibo 发表于 2018-11-5 09:57
QPC framework 值得每个单片机工程师拥有。

请问 这个QPC框架,你主要是用在哪些类型的项目中啊,我想找几个 简单的例子 实践一下

出0入0汤圆

发表于 2018-11-5 18:09:15 来自手机 | 显示全部楼层
自己类比一下,吃饭的时候怎么同时呼吸

出0入0汤圆

发表于 2018-11-5 18:31:35 | 显示全部楼层
qq335702318 发表于 2018-11-5 16:39
又是一份500+ page的资料
搞嵌入式的真心伤不起

用keil的rtx点个流水灯,还是很简单的事情 。个人觉得一般应用,拿来用就行了,没必要非得读懂每一行代码

出10入12汤圆

发表于 2018-11-5 19:32:42 | 显示全部楼层
这种问题 明显中断处理

出0入4汤圆

发表于 2018-11-6 09:56:29 | 显示全部楼层
maimaige 发表于 2018-11-5 17:08
请问 这个QPC框架,你主要是用在哪些类型的项目中啊,我想找几个 简单的例子 实践一下  ...

一般单片机项目都可以用,stm32f030f4 的资源刚刚够用。stm8s003 ram/rom 少了点。

出0入0汤圆

发表于 2018-11-6 10:01:20 | 显示全部楼层
一个硬件通用定时器+软件定时队列+状态机咯

出0入0汤圆

 楼主| 发表于 2018-11-6 11:10:10 | 显示全部楼层
mikewang011 发表于 2018-11-6 10:01
一个硬件通用定时器+软件定时队列+状态机咯

看不懂你写的这个。软件定时队列怎么弄

出0入0汤圆

发表于 2018-11-6 11:23:58 | 显示全部楼层
没必要用定时器实现,只用定时器做一个时基就行了 比如1ms记个时 变量++ ,主程序写成判断式的非阻塞     一直判断某个状态 多个状态

出0入0汤圆

发表于 2018-11-6 13:51:31 | 显示全部楼层
资深雨粉 发表于 2018-11-6 11:10
看不懂你写的这个。软件定时队列怎么弄

硬件定时间实现 tick-tock, 基于tick-tock来写一个状态机(称为B吧)来管理软定时器队列。比如 tick tock 1ms, 你想要100ms的定时,那就向软件定时器队列注册一个100ms timer,同时绑定好回调函数,当你的状态机B发现队里中100ms的 timer timeout了,调用回调函数。可以参考 rtos的 timer实现。

出0入4汤圆

发表于 2018-11-7 08:46:10 | 显示全部楼层
mikewang011 发表于 2018-11-6 13:51
硬件定时间实现 tick-tock, 基于tick-tock来写一个状态机(称为B吧)来管理软定时器队列。比如 tick toc ...

其实 任何一个 RTOS 或者 Framework 底层实现的原理都差不多,万变不离其宗:
systick 产生时基,timer fifo/queue/list里面存放 用户设置的(alarm)闹钟时间点。systick中断触发的时候去查询timer llist 里面的信息,如果节点已经超时,就触发 alarm。
进程、线程调度 的原理也差不多。剩下的就是处理中断开关(进程/线程互锁)等相关事务。

出0入0汤圆

发表于 2018-11-7 10:12:22 | 显示全部楼层
用中断,或者上操作系统啊

出0入0汤圆

发表于 2018-11-7 16:09:45 | 显示全部楼层
个人认为,这类应用,最好是 ,做个标志位,中断里判断后写标志位。然后主程序来执行具体操作。当然你的任务真的非常需要立即执行,也可以写中断里。但是一般情况下,建议中断里代码越少越好。

出5入8汤圆

发表于 2018-11-19 09:46:26 | 显示全部楼层
资深雨粉 发表于 2018-11-6 11:10
看不懂你写的这个。软件定时队列怎么弄

找下安富莱教程了解一下,他们的历程都是使用软定时器的框架来写的,很好用。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 08:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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