Testing teensy 3.2 loop time getting strange result?

Status
Not open for further replies.

Gibbedy

Well-known member
I was trying todo a simple test to investigate something blocking/slowing in a program.

so I do this:
Code:
uint32_t loopCount=0;
uint32_t currentTime=0;

const uint32_t speedCheckInterval=1000;
uint32_t speedCheckTime=speedCheckInterval;

char charBuffer[100] = {0};

void setup() {

}

void loop() {
  loopCount++;
  currentTime=millis();

  if(currentTime>speedCheckTime)
  {
    
    Serial.print("loops/second: ");
    Serial.println(loopCount);
    
    speedCheckTime=currentTime+speedCheckInterval;
    loopCount=0;
    
   // memset(charBuffer, 0, sizeof(charBuffer)); 
  }
}
and get:
Code:
loops/second: 469915
loops/second: 469920
loops/second: 469914
loops/second: 469919
loops/second: 469914
loops/second: 469919
loops/second: 469914
loops/second: 469917
loops/second: 469917
loops/second: 469917
loops/second: 469916

If i un-comment the memset line i get:
Code:
loops/second: 520964
loops/second: 520958
loops/second: 520963
loops/second: 520957
loops/second: 520962
loops/second: 520961
loops/second: 520963
loops/second: 520955

I believe that means my teensy is going faster with the extra line than without.
Can someone explain what I'm seeing.
Thanks.
 
better to use speedCheckTime=millis()+speedCheckInterval;
and move it to after your memset()
 
I changed it to:
Code:
uint32_t loopCount=0;
uint32_t currentTime=0;

const uint32_t speedCheckInterval=1000;
uint32_t speedCheckTime=speedCheckInterval;

char charBuffer[100] = {0};

void setup() {

}

void loop() {
  loopCount++;
  currentTime=millis();

  if(currentTime>speedCheckTime)
  {
    
    Serial.print("loops/second: ");
    Serial.println(loopCount);
    
    
    loopCount=0;
    
    //memset(charBuffer, 0, sizeof(charBuffer)); 
    speedCheckTime=millis()+speedCheckInterval;

  }
}
without memeset:
Code:
loops/second: 509871
loops/second: 509881
loops/second: 509874
loops/second: 509880
loops/second: 509876
loops/second: 509880
loops/second: 509875
loops/second: 509878
loops/second: 509874
loops/second: 509880
loops/second: 509876
with memset:
Code:
loops/second: 520844
loops/second: 520839
loops/second: 520840
loops/second: 520843
loops/second: 520836
loops/second: 520845
loops/second: 520843

I still don't get it?
 
Code:
uint32_t loopCount=0;
uint32_t currentTime=0;

const uint32_t speedCheckInterval=1000;
uint32_t speedCheckTime=speedCheckInterval;

char charBuffer[100] = {0};

void setup() {

}

void loop() {
while(1){
  loopCount++;
  currentTime=millis();

  if(currentTime>speedCheckTime)
  {
    
    Serial.print("loops/second: ");
    Serial.println(loopCount);
    
    
    loopCount=0;
    
    //memset(charBuffer, 0, sizeof(charBuffer)); 
    speedCheckTime=millis()+speedCheckInterval;

  }
}
}

you could try this
 
That's not the whole ruth. The new Teensyduino versions also add some stuff to the systick (called with 1000Hz)
 
after tontons change,
without memset line:
Code:
loops/second: 8718969
loops/second: 8719028
loops/second: 8718956
loops/second: 8719037
loops/second: 8718983
loops/second: 8719047
loops/second: 8719007
loops/second: 8719041
loops/second: 8718983

with memset:
Code:
loops/second: 8719221
loops/second: 8719259
loops/second: 8719237
loops/second: 8719252
loops/second: 8719212
loops/second: 8719273
loops/second: 8719211
loops/second: 8719265
loops/second: 8719210
loops/second: 8719256
loops/second: 8719202
loops/second: 8719248
loops/second: 8719225

So I still go slightly faster with memset line than without it.
I don't understand it, but if others do I'll accept it.

thanks.
 
Status
Not open for further replies.
Back
Top