| David Prentice 06/16/09 15:20 Read: 248 times Wormshill England |
#166157 - I think you should read Murray's comments Responding to: Andy Neil's previous message |
Ok. I have just looked at Murray's code.
1. He has already stated that you need to calibrate the function. 2. Yes. It would need re-calibration for a change of memory model 3. Yes. It may need re-calibration for a change of compiler version. It may need re-calibration for a change in optimisation setting. You can solve the memory model by specifying the data type of the local variable. Then the basic loop will remain the same. The preamble will obviously have a different but insignificant execution time. e.g:
void delay_ms(volatile unsigned int xcount)
{
data volatile unsigned int count = xcount;
for(count *= DELAY_MULTPLR; count > 0; count--) continue;
return;
}
As I said in an earlier post, other compilers and cpus permit inline assembly. So you can use a macro that will produce the exact number of machine cycles. Personally I would seek a delay_us(us) macro and a delay_ms(int ms) function. And this is exactly what you do with sdcc. But given the limitations of Keil, you could write a single delay.asm with conditional assembly for each memory model. But for the average Joe, he can just check the given calibration constant and go. As an exercise for Mr Neil and Mr Malund, I would be interested in a compiler version or setting that creates a different timing loop: ?C0001: SETB C MOV A,count?041+01H SUBB A,#00H MOV A,count?041 SUBB A,#00H JC ?C0004 ?C0003: MOV A,count?041+01H DEC count?041+01H JNZ ?C0001 DEC count?041 ?C0005: SJMP ?C0001 Yes. I am well aware that the compiler is quite free to create different code. I doubt that it will alter the generation unless there is a version change. In which case the user would re-calibrate. David. |
| Topic | Author | Date |
| s/w delay function | Sandeep Gupta | 06/02/09 00:50 |
| Software loops can be optimized away | Per Westermark | 06/02/09 01:07 |
| lacks side-effects | Neil Kurzman | 06/02/09 01:07 |
| First time with LINT? | Andy Neil | 06/02/09 01:19 |
| lacks side-effects | Andy Neil | 06/02/09 01:07 |
| That does not mean it is an error. | Neil Kurzman | 06/02/09 01:12 |
| It also blocks | Jez Smith | 06/02/09 01:49 |
| How to post legible source code | Andy Neil | 06/02/09 01:13 |
| DELAY_0.1.ZIP Useful? | Murray R. Van Luyn | 06/14/09 22:11 |
| That doesn't help, and it won't work anyhow! | Andy Neil | 06/15/09 01:54 |
| I stand by it. | Murray R. Van Luyn | 06/15/09 19:21 |
| Yes a delay function is useful | David Prentice | 06/16/09 02:39 |
| wrong !!!! | Erik Malund | 06/16/09 08:46 |
| No, that's precisely where you're wrong | Andy Neil | 06/16/09 12:35 |
| How can you say that? | Andy Neil | 06/16/09 12:43 |
| I think you should read Murray's comments | David Prentice | 06/16/09 15:20 |
| I have seen ... | Erik Malund | 06/16/09 15:45 |
| Timers usable without start/stop too | Per Westermark | 06/16/09 16:30 |
| free-running counter/timer | Andy Peters | 06/18/09 17:30 |
| Unsigned integers | Per Westermark | 06/18/09 17:39 |
| re: unsigned | Andy Peters | 06/19/09 12:16 |
| Try unsigned subtraction with borrow | Per Westermark | 06/19/09 13:05 |
bug in second (improved!?) code block | Andy Peters | 06/19/09 16:38 |
| Delay Loops in 'C'..!!! NO | Mahesh Joshi | 06/16/09 05:44 |
| Go on. Suggest a SIMPLE alternative | David Prentice | 06/16/09 06:20 |
| My Methods | Mahesh Joshi | 06/16/09 07:21 |
| So he has a long list of constraints | David Prentice | 06/16/09 07:46 |
| oh boy what a load who wil have 10 minutes for this | Erik Malund | 06/16/09 08:55 |
| Ok. I was being naughty. | David Prentice | 06/16/09 10:28 |
| you forget the obvious ... | Erik Malund | 06/16/09 10:49 |



