This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

problem with loop counter

I have just switched to KEIL from SDCC (it just wouldn't do what I needed!). I have a startup loop that allows some sleep time while some outboard sensors warm up. While they are doing this, I'm in a loop, printing "."'s to the uart:

Byte i = 0; //loop counter
	printf("Calibrating Sensors");
	for (i=0; i<10; i++){
		toggle_led(1,250); // delay and flash LED
		printf(".");
	}
	printf("Loop Complete \r\n");
	calibrate_sensors();
	delay(3000);
...
The problem is that i is being incremented while the toggle_led() delay routine is running. toggle_led calls delay(ms), which is based is based on a 1ms timer, using timer0's interrupt. Any reason why i is 231 (vs. 2) when delay() returns the first time through the loop?

I'm using 4.51a of cx51.

Parents
  • "No, no routines had using in the declaration, but I assumed that because of that, they all automatically used bank 0."

    Yes, they do, but an ISR that uses bank zero by default will restore the content of any registers it trashes. I'm trying to understand why specifying 'using 2' has fixed your problem, or rather, I'm trying to understand why you had the problem in the first place.

    The 'using' directive tells a function not only to use a specific register bank but also that it doesn't need to preserve the contents of the registers in that bank.

Reply
  • "No, no routines had using in the declaration, but I assumed that because of that, they all automatically used bank 0."

    Yes, they do, but an ISR that uses bank zero by default will restore the content of any registers it trashes. I'm trying to understand why specifying 'using 2' has fixed your problem, or rather, I'm trying to understand why you had the problem in the first place.

    The 'using' directive tells a function not only to use a specific register bank but also that it doesn't need to preserve the contents of the registers in that bank.

Children