精华内容
下载资源
问答
  • AAuto如何设置定时器

    2017-03-19 09:39:00
    在设计视图中(一定要有个Form)点击左下角的功能组件  点击定时器即可切换到代码视图,并添加如下代码。其中我每隔一秒改变一下winform.static2.text的文本值      ...

    在设计视图中(一定要有个Form)点击左下角的功能组件

     

    点击定时器即可切换到代码视图,并添加如下代码。其中我每隔一秒改变一下winform.static2.text的文本值

     

     

     

    展开全文
  • 单片机开发在使用定时器中断的时候, 如果频率过高会使中断响应时间很短,一个中断没完成,另一个中断又要响应,这样中断数量会超过硬件最大中断值,导致堆栈溢出,出现这种情况后中断返回值就会混乱,程序跑飞。 ...

    单片机开发在使用定时器中断的时候,
    如果频率过高会使中断响应时间很短,一个中断没完成,另一个中断又要响应,这样中断数量会超过硬件最大中断值,导致堆栈溢出,出现这种情况后中断返回值就会混乱,程序跑飞。


    以arduino nano板为对象,看看它的芯片特征(atmega328p)
    Advanced RISC Architecture
    – 131 Powerful Instructions – Most Single Clock Cycle Execution
    – 32 x 8 General Purpose Working Registers
    – Fully Static Operation
    – Up to 16 MIPS Throughput at 16 MHz
    – On-chip 2-cycle Multiplier

    高级risc架构

    –131条功能强大的指令–大多数单时钟周期执行
    –32 x 8通用工作寄存器
    –全静态操作
    –16兆赫时高达16 MIPS吞吐量(每秒执行16M个指令)
    –片上2周期乘法器

    重点单周期指令、 16 MIPS 

    关于中断的介绍:
    The interrupt execution response for all the enabled AVR interrupts is four clock cycles minimum. After four clock cycles the program vector address for the actual interrupt handling routine
    is executed. During this four clock cycle period, the Program Counter is pushed onto the Stack.
    The vector is normally a jump to the interrupt routine, and this jump takes three clock cycles. If
    an interrupt occurs during execution of a multi-cycle instruction, this instruction is completed
    before the interrupt is served. If an interrupt occurs when the MCU is in sleep mode, the interrupt
    execution response time is increased by four clock cycles. This increase comes in addition to the
    start-up time from the selected sleep mode.
    A return from an interrupt handling routine takes four clock cycles. During these four clock
    cycles, the Program Counter (two bytes) is popped back from the Stack, the Stack Pointer is
    incremented by two, and the I-bit in SREG is set.


    所有启用的AVR中断的中断执行响应至少为四个时钟周期。四个时钟周期后,实际中断处理程序的程序矢量地址被执行。在这四个时钟周期内,程序计数器被PUSH到堆栈上。

    向量通常是中断程序的跳转,这个跳转需要三个时钟周期。如果在执行多周期指令时发生中断,

    在中断服务之前先完成此指令。如果在MCU处于睡眠模式时发生中断,则中断执行响应时间增加了四个时钟周期。
    除了所选睡眠模式的启动时间。

    从中断处理程序返回需要四个时钟周期。在这四个时钟周期里循环,程序计数器(两个字节)从堆栈中POP出,
    堆栈指针是递增2,SREG中的I位被设置。


    重点:中断保护现场4个周期,跳转需要3个,执行中断程序n个,回到现场4个

     

    分析


    假如中断程序只是一个变量的变化。把程序描述成汇编指令的形式就可以分析消耗的时钟周期了。

    变量+ 常量. 变量+ 变量. 在汇编中并不能直接操作.需要交给寄存器进行中转
     产生代码大致形式如下:

    mov reg,[ebp - ?]
    add reg,[ebp - ?]
    mov [ebp - ?],reg

    至少要你3个时钟周期,所以n>3


    所以理论上从现场到中断触发,跳转,执行中断、再到现场至少是4+3+n+4=11+n总共约14个时钟周期。


    没有深究,也没有精确的计算方法,还是动手实验吧。

     

     

    实测 


    操作一个char 变量需要7个左右的周期(理论推算11+7=18,实际33)
    操作一个int 变量需要16个左右的周期(理论推算11+16=27,实际42)
    操作一个long 变量需要36个左右的周期(理论推算11+36=47,实际62)

    数学能力较差,推算和实际差别较大,还是自己知识水平有限,希望有经验的老师指教!


    底部是测试程序,注释包含了实测的数据,保证中断完全执行,程序也不跑飞。
    检验标准是
    delay(1000)准确
    保证串口输出的millis()正确


    会有临界值,程序不稳定,millis正确,但delay完全不在点上。

    所以结论是,中断中的负荷越小越好,中断频率需要合适实际应用的要求,既要满足精度,又不影响效率。

    char stepN1=0;//33周期
    int stepN2=0;//42周期
    long stepN3=0;//62周期
    
    char stepN11=0;//两个char变量需要 40周期
    
    ISR(TIMER1_COMPA_vect)
    { 
      //stepN3+=1;
      //stepN2+=1;  
      stepN1+=1;
      stepN11+=1;
    }
    
    void setup() {
      Serial.begin(115200);
      //Serial.println("Wait 1 seconds");
      delay(1000);
      TCCR1A = 0;
      TCCR1B = 0;
      OCR1A =40; //79;//xxk=200k         //19;//xxk=800k
      TCCR1B |= (1 << CS10)|(1 << WGM12);//0.0625us | CTC模式
      TIMSK1 |= (1 << OCIE1A);// 允许比较中断
    }
     
    void loop() {
      Serial.println("Wait 1 seconds");
      delay(1000);
      digitalWrite(LEDPIN, !digitalRead(LEDPIN));
      Serial.println(millis());
    }
    
    

     


    http://www.diy-robots.com/?p=852
    Arduino系列教程之 – PWM的秘密(下)


    https://www.codercto.com/a/20649.html
    魔法书4:Arduino UNO 内部定时器之谜


    https://wenku.baidu.com/view/c72a653287c24028915fc3bd.html
    AVR CTC模式实验


    https://www.bbsmax.com/A/gVdnRrXNdW/
    AVR/Arduino定时/计数器、中断入门


    http://news.eeworld.com.cn/mcu/article_2016100930250.html
    ATmega 16单片机的定时器/计数器相关寄存器(二)


    http://www.elecfans.com/emb/danpianji/20171203591881.html
    不知道单片机程序为什么死机跑飞?6个原因告诉你

    展开全文
  • Tout = ((arr+1)*(psc+1))/Tclk Tout为溢出时间 Tclk为系统时钟频率(通常有72MHZ,48HZ,32HZ) TIM_Period = arr为TIMx自动重装载...假设要配置一个定时器中断,每0.5秒中断一次(溢出); >(设系统时钟为72M...

    Tout = ((arr+1)*(psc+1))/Tclk
    Tout为溢出时间
    Tclk为系统时钟频率(通常有72MHZ,48HZ,32HZ)
    TIM_Period = arr为TIMx自动重装载寄存器的值(小于2^16)
    TIM_Prescaler = psc为TIMx时钟预分频值(小于2^16)

    
    **>假设要配置一个定时器中断,每0.5秒中断一次(溢出);
    >(设系统时钟为72MHZ)**
    

    配置如下:
    因为:系统时钟为72MHZ;
    所以可设psc=7199 (便于计算取整,也可取小于2^16的任意值)
    因为所设时间为0.5秒
    所以可设arr=4999
    Tout = ((4999+1)*(7199+1))/72000000=0.5s
    另:(1M=1000000)

    展开全文
  • Lua用的也不是很久,定时器是这么嵌套 1、_DoSecond方法设置1秒后执行,调用定时任务 2、设置1秒后执行_DoSecond方法 3、_DoSecond方法设置1秒后执行,调用定时任务 --验证是否需要刷新function TokenTimeMgr:...

    功能简介

    类似王者荣耀的战令活动。活动管理是后面写的我也就拆分开来说了。这是现在的活动表,以前配置每期的开启到结束时间,不过那样每期的时间都得手动控制,现在是做成自动循环的形式。

    1、数据结构

    需要记录开始时间和结束时间,为了后续方便,我加了战令活动期数,服务器启动初始加载全局配置表的数据

    data = {startTime = startTime,endTime = endTime,season = season}

    --战令活动时间管理local TokenTimeMgr = {} function TokenTimeMgr:Init()--获取库数据local datas = server.settingCenter:GetData(SettingConfig.SettingType.TokenTimeMgr)self.TimeManage = falseif not datas then--初始化时间self:RefreshTime()elseself.data = datas.dataself:RefreshTimeCheck()self.updatetime = datas.updatetimeendend

    全局配置表

    setting = {columns = {{ "dbid","bigint(20)",0,"设置类型id" },{ "data","mediumblob",{},"设置数据" },{ "updatetime" ,"int(11)",0,"更新时间" },},prikey = { "dbid" },comment = "全局设置表",},

    2、活动时间更新

    fa2bbccbd787bc8331d96a91ec5b3ee7.png

    添加描述

    初始读取配置表TokenStartTime即可,结束时间由活动持续时间计算可得,然后保存数据,是不是很简单。

    在此还有一些变种,如果两个活动之间有休息时间,下期开始时间往后延。或者是比较复杂的攻城战,多个阶段的功能,可以加个state记录活动状态等等

    --刷新战令活动时间function TokenTimeMgr:RefreshTime()local startTime = 0local endTime = 0local season = 0local tokencfg = server.configCenter.TokenConfiglocal tokenTime = lua_util.getDateTimeLength(tokencfg[TokenConfig.Key.TokenTime].value,"w") - 1 --持续时间weekif not self.data then--初始读取配置表开始时间startTime = lua_util.getDateTimeStamp(tokencfg[TokenConfig.Key.TokenStartTime].value,",")endTime = startTime + tokenTimeseason = 1else--再次验证是否到期if lua_app.now()  < self.data.endTime thenreturn falseendstartTime = self.data.endTime + 1endTime = startTime + tokenTimeseason = self.data.season + 1endself.data = {startTime = startTime,endTime = endTime,season = season}self.updatetime = lua_app.now()server.settingCenter:SetData(SettingConfig.SettingType.TokenTimeMgr,self.data)self:sendRecordToClient()    return trueend

    3.定时器验证

    没有必要浪费资源,我设置每天验证一次。在最后24小时内才会启动定时器。

    Lua用的也不是很久,定时器是这么嵌套

    1、_DoSecond方法设置1秒后执行,调用定时任务

    2、设置1秒后执行_DoSecond方法

    3、_DoSecond方法设置1秒后执行,调用定时任务

    --验证是否需要刷新function TokenTimeMgr:RefreshTimeCheck()local differTime = self.data.endTime - lua_app.now() --距离活动结束时间local uptime = 24 * 60 * 60if differTime < 0 thenself:RefreshTime()--活动赛季更新,关闭定时器if self.sectimer thenlua_app.del_timer(self.sectimer)self.sectimer = nilendself.TimeManage = falseendif differTime < uptime and not self.TimeManage then--倒计时一天开启定时器self:SecondTimer()self.TimeManage = trueendend function TokenTimeMgr:SecondTimer()if self.sectimer thenlua_app.del_timer(self.sectimer)self.sectimer = nilendlocal function _DoSecond()self.sectimer = lua_app.add_timer(1000, _DoSecond)self:RefreshTimeCheck()endself.sectimer = lua_app.add_timer(1000, _DoSecond)end function TokenTimeMgr:onDayTimer()self:RefreshTimeCheck()end

    4、客户端协议

    这边只需要发送活动开始和结束时间,赛季更新时发送给当前在线玩家

    function TokenTimeMgr:sendRecordToClient()--通知所有在线玩家local players = server.playerCenter:GetOnlinePlayers()for _, player in pairs(players) do        player.tokenPlug:Resert()self:SendMsg(player)endend --发送信息function TokenTimeMgr:SendMsg(player)local tokentimeinfo = {startTime =  self.data.startTime,endTime =  self.data.endTime,    }server.sendReq(player, "sc_token_time_info", tokentimeinfo)end

    功能类中玩家登陆也会发送一次

    -- 发送战令数据function TokenPlug:SendTokenInfo()    local tokeninfo = {tokenreward =  self:GetTokenRewardMsg(),tasklist =  self:GetTokenTaskMsg(),level = self.cache.level,exp   = self.cache.exp,isactive = self.cache.isactive,point = self.point,buyexptimes = self.cache.buyexptimes,    }server.sendReq(self.player, "sc_token_info", tokeninfo)end -- 发送活动时间数据function TokenPlug:SendTokenTimeInfo()server.luckyShop:SendMsg(self.player)end

    活动时间、状态固定的,都可以做成这样自动循环管理。

    展开全文
  • 我们在ARM 芯片上编程,可以开设定时器来满足一些时间性的需要。 编写的PC上运行的程序,现在有一个时间要求: 需要每隔 100ms 进行一次特定的操作。 这个 100 ms要求的精准度比较高,就是说,100ms 不能超过 ...
  • ...Now I want to set the timer for each element in that sequence i.e the elements now generating one at atime and after clicking next button it switches to next element in that sequence but I want to...
  • 设定定时器,启动时第一次时间时间短,等一次运行完了,第二次变得长。即两次定时器的时间不一样。 代码如下: //轮询时间 int interval = 0; /// <...请问第二次时间如何在什么位置写才合理?
  • 相信不少小伙伴的苹果手机都会比较耗电,特别是升级系统后的感觉就很...那么如何进行开启呢?具体操作:打开手机【设置】,在【亮度与显示】即可开启这个功能。2.关闭后台应用刷新每天被各种各样的应用推送消息骚...
  • 在JavaScript中,通过给setTimeout()方法设置需要调用的函数或要执行的代码串参数,和延迟的时间参数;在调用setTimeout()方法就可以设置一个简单的定时器。...下面我们就来看看setTimeout()方法如何设置定时器。se...
  • 设置定时器与清除定时器

    千次阅读 2019-01-18 15:20:24
    下面我们来讲讲如何设置一个定时器,首先你得定义一个空的变量(比如:timer)来接收定时器,相当于把它存放到你定义的这个变量当中;封装一个函数,给它命名为play,然后在play()这个方法体内设置一个你需要的...
  • 设置定时器

    2019-04-28 08:44:53
    那么我们如何利用代码来编写一个定时器呢? 其实很简单,在我们的JavaScript中,window对象方法里面有一个方法就能帮助我们解决定时器这个问题。 setTimeout()方法其实也是可以制作定时器的,不过个人建议使用...
  • 如何在jsp中设置定时器

    千次阅读 2015-01-15 16:53:43
    定时器是我们经常使用到的工具,那么如何在开发网站时使用定时器呢?下面就以jsp为例进行讲解: ...设置定时器的方式有许多种,本例中使用的是javax.servlet.ServletContextListener和java.util.Timer来实现;
  • 所以答案的第一部分是如何做主题要求的事情,因为这是我最初对它的解释,有几个人似乎觉得很有帮助。这个问题后来被澄清了,我已经扩展了答案来解决这个问题。设置计时器首先,您需要创建一个计时器(我使用的是java....
  • 最近看了springboot 定时器的使用,的确非常的简单,看了很多的博客,没有给出如何停止定时器的办法,想了一个暂时解决的办法,伪停止。这里是pom.xml 所需的包org.springframework.bootspring-boot-starterorg....
  • 如何设置活动定时器的时间

    千次阅读 2019-02-14 15:54:38
    定义:活动定时器就是设备处于idle状态下的...00100001 中,001 表示以分钟为单位,整个表示的是设置活动定时器的时间为1分钟; 我们在实际测试的时候,可以打开设备功率模式显示:AT+NPSMR=1 可以看到,当csc...
  • C#:如何在非窗口类中设置定时器

    千次阅读 2018-06-23 09:11:34
    在窗口类中设置定时器是很轻松的事情,只需要拖个插件就好。然而有时候在非窗口类中许需要我们设置定时器,这时候我们应该怎么做? 仙子啊用一个简单例子说明,该程序作用是每隔十秒在控制台中输出“我最帅”。C#为...
  • 本来想采用注解的方式,读配置文件来达到动态设置cron表达式,一直没能成功,改用XML方法配置 1.在spring.xml配置要执行的定时器的类,这里为com.ndasec.web.core.quartz下的MessageTimer <bean id=...
  • 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、...
  • 其实这样的定时器效率是很低的,为什么呢? 往往到达下一个任务之间的间隔是需要很长时间,那么在达到之前所有的检测都是无用的,这是在浪费系统资源 如果任务列表的长度很大,那么每次遍历,都会消耗很多的资源。...
  • ... 在单片机的学习过程中,单片机定时器的合理设置和应用是非常关键的一步,也是刚开始接触单片机知识的新人工程师们比较容易出错误的一个环节之一。在今天的文章中,我们为大家总结了单...
  • spring mvc设置定时器如何每分钟从前台jsp页面抓取数据?从后台抓取,而不是表单提交的。请知道的回答。
  • vue中如何清除定时器

    2019-12-20 16:26:28
    问题描述 在某个vue组件内,每隔一段时间调用一次请求获取... ① 在组件内设置定时器,并存储由 setInterval() 返回的 ID 值 mounted () { // 设置定时器 const testSetinterval = setInterval(() => { ...
  • data中生明定时器 方法里使用和清除定时器
  • 接下去是MyScheduler部分的代码,这是一个定时器,用于设置重复次数和重复间隔,以及对多个定时任务进行分组和命名import java.util.Date;import org.quartz.DateBuilder;import org.quartz.JobBuilder;import org....
  • scheduleRepeating 如: timer.scheduleRepeating( 1000 );其中timer为定时器组件对象
  • Timer: 隔一定时间调用一个函数,如果想实现每隔一段时间就调用一个函数的话,就要在Timer调用的函数中,再次设置Timer。Timer是Thread的一个派生类 python中的线程提供了java线程功能的子集。 #!/usr/bin/env ...
  • 一个系统中存在着大量的调度任务,同时调度任务存在时间的滞后性,而大量的调度任务如果每一个都使用自己的调度器来管理任务的生命周期的话,...Timer:定时器维护一个优先队列,到时间点执行,然后把需要执行的 tas...
  • 头脑风暴是我们在进行会议,项目管理时常用到的XMind工具,但是,不知你有没有注意到其中的定时器设置,虽然小,却是很实用的一个功能。本文就教你怎样使用XMind 6头脑风暴中的定时器。  打开运行XMind 6思维导图...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 649
精华内容 259
关键字:

如何设置定时器