You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Describe the bug
Existe uma função no EPS chamada avoid_infinit_loops() em que ela é usada para determinar um tempo fixo para ficar dentro de loops, isso para evitar que loops infinitos ocorram caso aconteça algum bug. Está função tem o seguinte comportamento:
onde é usada o TIMER2 como referencia de tempo no modo em que conta continuamente até o valor especificado no registrador "TA2CCR0", quando o contador chegar no valor deste registrador, a contagem volta para zero (continuando a contagem), e é setado a flag CCIFG. A flag é usada para sair do while quando é setada. Resumindo, a função config_avoid_infinit_loops(i) vai antes de cada loop, e configura o tempo que vai ficar dentro do loop. e a função avoid_infinit_loops() vai dentro da condição do while e retorna um estado lógico, para sair do while caso a flag seja setada. um exemplo no programa:
Inicialmente a função avoid_infinit_loops() retorna 0, onde é invertida na condição do while. Quando a flag é setada por chegar no tempo, a função retorna 1, como está invertido, a condição vai ser "falsa" e vai sair do while.
Porém a partir do momento que o TIMERA2 foi configurado, o contador começou a contar, e quando ele chegar na função config_avoid_infinit_loops(time) para determinar quanto tempo ele vai ficar dentro do while, o contador já vai ter contado para um valor arbitrario, e já vai estar com algum valor. Isso quer dizer que a contagem não irá ser de [0,valor] vai ser de [valor_atual_contador, valor], e isso não foi levado em consideração na hora de projetar isso. Foi levado em consideração que antes de chagar no while o valor do contador é 0. Então o tempo estipulado para cada while, n vai estar correto.
Problemas que podem acontecer são os de que por não termos uma referencia de tempo inicial fixa, o tempo que ele fica no while pode não ser o que foi estipulado, e ficar um tempo menor, fazendo com que nem tudo que deveria ser executado no while, seja executado.
Outro problema: O timer é configurado depois de varios outros códigos, por exemplo o clock.c é executado antes que o timer é configurado. E o clock.c usa a função avoid_infinit_loops() pois tem alguns whiles no programa. Isso quer dizer que a função avoid não vai funcionar, pois o não terá o contador.
O avoid não funcionando não é problema critico, pois se a outra condição do while for satisfeita ele ainda vai sair do loop. Como se não existisse a função avoid.
To Reproduce
Steps to reproduce the behavior:
Bote um breakpoint em algum while
Veja o valor atual do registrador referente ao contador (TA2R register)
O valor do contador deve ser zero, antes de entrar no while.
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):
OS: [e.g. iOS]
Browser [e.g. chrome, safari]
Version [e.g. 22]
Smartphone (please complete the following information):
Firmware version:
Code Composer Studio version:
Compiler version:
Additional context
Add any other context about the problem here.
The text was updated successfully, but these errors were encountered:
Describe the bug
Existe uma função no EPS chamada avoid_infinit_loops() em que ela é usada para determinar um tempo fixo para ficar dentro de loops, isso para evitar que loops infinitos ocorram caso aconteça algum bug. Está função tem o seguinte comportamento:
uint8_t avoid_infinit_loops(void)
{
return (TA2CCTL0 & CCIFG);
}
void config_avoid_infinit_loops(uint16_t i)
{
TA2CCR0 = i;
TA2CCTL0 &= ~CCIFG;
}
onde é usada o TIMER2 como referencia de tempo no modo em que conta continuamente até o valor especificado no registrador "TA2CCR0", quando o contador chegar no valor deste registrador, a contagem volta para zero (continuando a contagem), e é setado a flag CCIFG. A flag é usada para sair do while quando é setada. Resumindo, a função config_avoid_infinit_loops(i) vai antes de cada loop, e configura o tempo que vai ficar dentro do loop. e a função avoid_infinit_loops() vai dentro da condição do while e retorna um estado lógico, para sair do while caso a flag seja setada. um exemplo no programa:
config_avoid_infinit_loops(1000);
while((BAKCTL & LOCKBAK) && !avoid_infinit_loops())
BAKCTL &= ~(LOCKBAK);
Inicialmente a função avoid_infinit_loops() retorna 0, onde é invertida na condição do while. Quando a flag é setada por chegar no tempo, a função retorna 1, como está invertido, a condição vai ser "falsa" e vai sair do while.
Porém a partir do momento que o TIMERA2 foi configurado, o contador começou a contar, e quando ele chegar na função config_avoid_infinit_loops(time) para determinar quanto tempo ele vai ficar dentro do while, o contador já vai ter contado para um valor arbitrario, e já vai estar com algum valor. Isso quer dizer que a contagem não irá ser de [0,valor] vai ser de [valor_atual_contador, valor], e isso não foi levado em consideração na hora de projetar isso. Foi levado em consideração que antes de chagar no while o valor do contador é 0. Então o tempo estipulado para cada while, n vai estar correto.
Problemas que podem acontecer são os de que por não termos uma referencia de tempo inicial fixa, o tempo que ele fica no while pode não ser o que foi estipulado, e ficar um tempo menor, fazendo com que nem tudo que deveria ser executado no while, seja executado.
Outro problema: O timer é configurado depois de varios outros códigos, por exemplo o clock.c é executado antes que o timer é configurado. E o clock.c usa a função avoid_infinit_loops() pois tem alguns whiles no programa. Isso quer dizer que a função avoid não vai funcionar, pois o não terá o contador.
O avoid não funcionando não é problema critico, pois se a outra condição do while for satisfeita ele ainda vai sair do loop. Como se não existisse a função avoid.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):
Smartphone (please complete the following information):
Additional context
Add any other context about the problem here.
The text was updated successfully, but these errors were encountered: