millis() kun je resetten
3 berichten
• Pagina 1 van 1
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
millis() kun je resetten
Getriggered door de vraag over de stack van Koepel, kwam in een memory dump de counter tegen van millis. Dus ff testen of je deze kan resetten. En inderdaad. Zie bijgaande sketch waarbij ik millis gelijk op 20000 zet en laat tellen. Ter lering en vermaak:
cpp code
en de output
cpp code
cpp code
#include "Arduino.h"
extern volatile uint32_t timer0_millis; // zo koppel je aan een systeem variabele
/**
* setup
*/
void setup()
{
Serial.begin(115200);
timer0_millis = 20000UL;
Serial.println(millis());
}
/**
* loop
*/
void loop()
{
//
// print gewoon uit en ff wachten
//
Serial.println(timer0_millis);
delay(250);
//
// bij 30000 resetten we hem weer
//
if (timer0_millis > 30000) {
timer0_millis = 20000;
}
Serial.println(millis());
}
en de output
cpp code
20000
20000
20249
20249
20500
20500
20750
20751
21001
21001
21252
21252
21502
21503
21753
21753
22003
22003
22253
22254
22504
22504
22755
22755
23005
23006
23256
23256
23507
23507
23757
23758
24007
24007
24258
24258
24508
24509
24759
24759
25010
25010
25260
25260
25511
25511
25762
25762
26011
26011
26262
26262
26512
26513
26763
26763
27014
27014
27264
27265
27515
27515
27766
27766
28015
28016
28266
28266
28517
28517
28767
28768
29018
29018
29269
29269
29519
29520
29769
29769
20000
20000
20250
20251
Advertisement
- Gij Kieken
- Berichten: 631
- Geregistreerd: 15 Nov 2015, 11:54
Re: millis() kun je resetten
Is interessant, kan ik misschien in de toekomst nog gebruik van maken.
Re: millis() kun je resetten
Je brengt anderen op verkeerde gedachten en mij trouwens ook
Mag ik dan mijn verkeerde sketch ook laten zien. Ik liep al een tijdje met een "Blink With/Without Delay" in mijn hoofd en het werkt ook nog. Kan ik meteen een ander geintje er in stoppen, om te kijken of globale variabelen met nul geschreven worden bij een soft reset. Dus zo kan ik millis() ook resetten
De loop() heeft een timing met delay. De yield() heeft een soft timer met millis(). Zolang er genoeg delay() is, werken ze onafhankelijk van elkaar.
Mag ik dan mijn verkeerde sketch ook laten zien. Ik liep al een tijdje met een "Blink With/Without Delay" in mijn hoofd en het werkt ook nog. Kan ik meteen een ander geintje er in stoppen, om te kijken of globale variabelen met nul geschreven worden bij een soft reset. Dus zo kan ik millis() ook resetten
De loop() heeft een timing met delay. De yield() heeft een soft timer met millis(). Zolang er genoeg delay() is, werken ze onafhankelijk van elkaar.
- Code: Alles selecteren
// Blink With/Without Delay
// Don't even think about to try this sketch.
// The delay() source code is here:
// https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/cores/arduino/wiring.c
extern volatile uint32_t timer0_millis; // zo koppel je aan een systeem variabele
// In today's 'c' and 'c++' the variables are guaranteed cleared at startup.
int count;
unsigned long previousMillis;
int ledstate = LOW;
void setup()
{
Serial.begin( 9600);
Serial.println(F( "Blink With/Without Delay"));
pinMode( LED_BUILTIN, OUTPUT);
}
void loop()
{
Serial.print( count);
Serial.print(F( ", "));
noInterrupts();
unsigned long milly = timer0_millis;
interrupts();
Serial.println( milly);
count++;
delay( 1000);
if( count >= 20)
{
// That's enough of this, let's do a soft reset.
asm volatile ("jmp 0");
}
}
void yield()
{
// Calling millis() from inside the yield() is valid.
unsigned long currentMillis = millis();
if( currentMillis - previousMillis > 700)
{
previousMillis = currentMillis;
if( ledstate == HIGH)
ledstate = LOW;
else
ledstate = HIGH;
digitalWrite( LED_BUILTIN, ledstate);
}
}
3 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 30 gasten