collapse

* Posts Recentes

Como ver se uma tomada tem a terra ligada? por Alfredo Garcia
[17 de Fevereiro de 2018, 20:13]


Via Verde - Identificador por TigPT
[17 de Fevereiro de 2018, 09:56]


Estação de soldadura da Banggood, será boa compra ? por vasco
[16 de Fevereiro de 2018, 17:47]


Desenho PCBs 80's por senso
[16 de Fevereiro de 2018, 14:35]


Como guardar componentes SMD ? por vasco
[16 de Fevereiro de 2018, 14:34]


e-bike converter piscas para 12v por vasco
[15 de Fevereiro de 2018, 23:51]


Ebay - fornecedor em Espanha por SerraCabo
[15 de Fevereiro de 2018, 01:11]


BostonDynamics - Vai uma mãozinha? por TigPT
[14 de Fevereiro de 2018, 15:58]


Primeiro campeonato mundial de Ski robótico por TigPT
[14 de Fevereiro de 2018, 15:15]


Ajuda com 5A por almamater
[13 de Fevereiro de 2018, 19:38]

Autor Tópico: millis() - Onde está?  (Lida 1159 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
millis() - Onde está?
« em: 19 de Setembro de 2011, 12:13 »
Alguem me sabe dizer em que bilbioteca (.h/.cpp) está definida a função millis() usada pelo Arduino?

Obrg.

Offline HIT_Braga

  • Mini Robot
  • *
  • Mensagens: 47
  • Sou o que sou, não o que acham...
Re: millis() - Onde está?
« Responder #1 em: 19 de Setembro de 2011, 19:38 »
Boas.

Acho que a millis está defenida na libraria genéria, ou seja, não precisas de fazer include da mesma.
Podes experimentar nos exemplos, tem lá uma brincadeira para piscar um led usando o millis.
Sds,
HIT

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.458
  • Helpdesk do sitio
Re: millis() - Onde está?
« Responder #2 em: 19 de Setembro de 2011, 19:48 »
A função millis em si só lê copia o valor que é na verdade calculado/actualizado na ISR do timer 0, mas se queres ver o código das duas, está aqui:
Código: [Seleccione]
SIGNAL(TIMER0_OVF_vect)
{
// copy these to local variables so they can be stored in registers
// (volatile variables must be read from memory on every access)
unsigned long m = timer0_millis;
unsigned char f = timer0_fract;

m += MILLIS_INC;
f += FRACT_INC;
if (f >= FRACT_MAX) {
f -= FRACT_MAX;
m += 1;
}

timer0_fract = f;
timer0_millis = m;
timer0_overflow_count++;
}

unsigned long millis()
{
unsigned long m;
uint8_t oldSREG = SREG;

// disable interrupts while we read timer0_millis or we might get an
// inconsistent value (e.g. in the middle of a write to timer0_millis)
cli();
m = timer0_millis;
SREG = oldSREG;

return m;
}

A localização é este para o IDE0022:
arduino-22/hardware/arduino/cores/arduino, ficheiro wiring.c e .h.

Se queres um milis assim mais bare metal e simples tens aqui uma implementação mais simples e que te mostra os calculos e explica os registos:
http://hekilledmywire.wordpress.com/2011/05/28/introduction-to-timers-tutorial-part-6/
Avr fanboy

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Re: millis() - Onde está?
« Responder #3 em: 19 de Setembro de 2011, 19:54 »
Era isso mesmo que eu queria senso. Tks!