最近在学习arduino 想请教前辈一个问题 millis()开机时间如何清零,有没有对应的.
millis()该怎么清零有没有什么函数可以清掉的?如果可以的话我们开发一些东西就很好进行任务调度了另外系统运行起来后如何软复位?
谢谢各位前辈了 millis()实际读取的是一个名为 timer0_overflow_count 的系统变量,用这两行可以清零:
extern volatile unsigned long timer0_overflow_count;
timer0_overflow_count = 0;
但是你这样做会破坏掉使用millis的arduino内部函数和库的运行,所以不建议这样做。
我估计你担心millis在49天后会溢出,其实可以使用一个记住时间差值的变量就可以了,你可以随便清零。
简单的软件复位方法是把reset引脚连到一个数字引脚,然后输出低电位就可以复位了。 嗯,这样也行,听君一席话豁然开朗,谢谢 春泥蛋炒饭 发表于 2014-4-15 03:24
millis()实际读取的是一个名为 timer0_overflow_count 的系统变量,用这两行可以清零:
extern volatile ...
对了,有木有,指令让CPU软复位的指令,有的话就不用外接了,毕竟接io口去复位脚,总觉得有点不安全 春泥蛋炒饭 发表于 2014-4-15 03:24 static/image/common/back.gif
millis()实际读取的是一个名为 timer0_overflow_count 的系统变量,用这两行可以清零:
extern volatile ...
这也算是一种方法 pliangpalm 发表于 2014-4-15 12:35 static/image/common/back.gif
对了,有木有,指令让CPU软复位的指令,有的话就不用外接了,毕竟接io口去复位脚,总觉得有点不安全
如果你不喜欢接线,纯软件方法也有,不容易懂而已。
定义一个reset函数:
void(* resetFunc) (void) = 0;
需要复位时这样调用:
resetFunc(); 春泥蛋炒饭 发表于 2014-4-15 13:21 static/image/common/back.gif
如果你不喜欢接线,纯软件方法也有,不容易懂而已。
定义一个reset函数:
我试试哈!谢谢您:handshake 刚才试验了一下
extern volatile unsigned long timer0_overflow_count;
void (*zero)(void)=0;
void setup()
{
Serial.begin(9600);
delay(5000);
Serial.print(millis());
}
void loop()
{
delay(15000);
Serial.print(millis());
delay(10);
zero();
// pinMode(5,OUTPUT);
//timer0_overflow_count = 0;
}
春泥蛋炒饭提到的IO口重启和程序指针归零都可以用,
extern volatile unsigned long timer0_overflow_count;
timer0_overflow_count = 0;这种方法不可用
我用的是1.0.5
谢谢春泥蛋炒饭
接上面
IO口复位会执行bootloader程序
而PC值归零不会执行bootloader 直接从零地址开始干活了 mark 一个,谢谢
页:
[1]