Página 1 de 1
Debug IAR - tempo de instrução

Enviado:
29 Mai 2008 17:51
por kunde
Olá pessoal.
Estou fuçando no IAR mas não consegui encontrar uma forma de debugar quanto tempo um bloco de instruções esta demorando para executar.
Alguém poderia dar uma dica? Quero debugar utilizando o IAR em modo FET com o gravador JTAG, não no modo simulação.
Obrigado.
Cláudio

Enviado:
29 Mai 2008 19:48
por Fábio Pereira
Neste caso, uma forma é utilizar um timer: você zera a contagem do timer no início da função e pára o mesmo ao término da função. Como o clock do timer é conhecido, o total de contagens do mesmo multiplicado pelo período do clock do timer vai resultar no tempo de execução da função (cuidado apenas com o estouro da contagem do timer).
Outra forma consiste em utilizar um pino de I/O e um osciloscópio ...
T+

Enviado:
29 Mai 2008 20:10
por kunde
São boas opções Fábio, porém meu problema é exatamente com os timers A e B do MSP430F149.
Estou usando o Timer A e B e estou percebendo que quando uma das interrupções de timer é atendida, ocorre uma distorção na outra.
Isso independe da quantidade de código que tenho na interrupção do timer.
Por exemplo: Um teste básico que fiz foi configurar os timers A e B (com tempos diferentes) e escopar o estouro de tempo de cada um. Percebi que quando um dos timers é atendido, ele afeta o tempo do outro e como estou trabalhando com tempos na ordem de 1 microsegundo isto esta fazendo a diferença.
Mesmo assim vou aproveitar e fazer outra pergunta. Meus registradores TAR e TBR são afetados pelo atendimento de alguma interrupção (port, serial outro timer), ou eu tenho a garantia de que eles sempres estarão sendo incrementados a cada 125 ns para um clock de 8Mhz?
Obrigado.
Cláudio

Enviado:
30 Mai 2008 08:32
por Fábio Pereira
Não, a contagem dos timers e os eventos relacionados a eles não são afetados por outras interrupções.
Porém, é importante saber que há uma latência entre o periférico gerar o pedido de interrupção e a CPU efetivamente executar o código da ISR.
Esta latência mínima é especificada pelo fabricante (no caso dos MSP430 a latência mínima é 6 ciclos de clock), mas a latência máxima depende totalmente de como você desenhou a sua aplicação.
ISRs muito longas acabam aumentando substancialmente a latência das outras interrupções. Isto é agravado ainda mais quando se utiliza interrupções com freqüência muito alta (como no seu caso).
T+