CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

instruction delay

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
aarkey



Joined: 12 Mar 2010
Posts: 3

View user's profile Send private message

instruction delay
PostPosted: Sat Apr 17, 2010 4:25 am     Reply with quote

hi
can anybody tell me ..... what is the delay of various instruction of CCS C??
if u have idea then please share with me......
thank you
jbmiller



Joined: 07 Oct 2006
Posts: 73
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Sat Apr 17, 2010 5:09 am     Reply with quote

Short answer is it depends on instruction and processor clocks speed.
Best way is to create a small,working program( blinking LED or 'hello world'). Printout the listing (.LST file). Now consult the Microchip databook for the PIC you've chosen,lookup the instruction, and read the cycles. Put that number on the end of the line in a column. The time it takes is dependent on the xtal you use for the PIC. the classic benchmark is that a 4MHZ xtal will give you 1 us / cycle.
This should be a good start for you.
The more you read, the better you'll understand the power of the PIC.
Cheers
aarkey



Joined: 12 Mar 2010
Posts: 3

View user's profile Send private message

PostPosted: Sat Apr 17, 2010 5:30 am     Reply with quote

thanks for ur reply

i know about pic controllers as u said........
but i want the time which require by the built i function of CCS C
and this timings are in us or ms....
so cant get exact time with help of leds....
so please help me....
SherpaDoug



Joined: 07 Sep 2003
Posts: 1640
Location: Cape Cod Mass USA

View user's profile Send private message

PostPosted: Sat Apr 17, 2010 6:41 am     Reply with quote

I set a pin before entering the function, and clear the pin when I leave. Then I measure the time with a scope or logic analyzer.

The other way is to look at the asm code and add up the instructions. Maybe you could do it with a simulator, but I don't use them.
_________________
The search for better is endless. Instead simply find very good and get the job done.
Ttelmah



Joined: 11 Mar 2010
Posts: 19552

View user's profile Send private message

PostPosted: Sat Apr 17, 2010 10:01 am     Reply with quote

You need to start by understanding the difference between assembler, and a compiler. In general, an assembler has a near 1:1 relationship between an instruction, and a processor instruction. A compiler conversely, is quite 'smart', and does a lot of work for you. So a single CCS instruction, like '*', is converted into a large sequence of code to perform a multiplication. Worse though, the change is not simple, with a constant '*=XuSec', but depends on the numbers being used. There are actually seven different '*' subroutines, (signed, and unsigned, for three different integer types, plus a float version), then the time will also depend on numeric conversions that may be performed on numbers before performing these operations (so if you multiply an int8, by a float, the int8, will be converted to a float, before performing a float multiplication), and also on how the values are stored (accessing an indexed array entry, will also take a lot more time, than accessing a simple variable). So the single '*' instruction, could probably have something over a hundred different timings associated with it. Repeat for all the possible instructions, and you have something probably in the order of tens of thousands of different timings. It then gets even worse, since the optimiser in the compiler will at times realise that things can be done differently, and save time. Things like using a shift to divide by two, handling temporary values differently to reduce times, etc. etc..
Times involved in single instructions, will vary also, with your own settings.
So, the instruction 'output_high(PIN)', translates to just a single machine instruction, if you have selected 'FAST_IO' mode, but typically to three instructions in 'STANDARD_IO' mode. Things like serial I/O, will depend on whether you are using a hardware UART, or a software UART, etc. etc..
Times involved can vary for a tiny fraction of a uSec (48MHz PIC, output_high, in FAST_IO mode = 0.083uSec), to many mSec (something like a sin, on numbers stored in an array, with the value stored back into an array, can easily reach over 600uSec), while a simple 'putc' with the serial set to 2400bps, using a software UART, or the hardware UART, when the buffer is full, will reach over 4mSec...

The only practical ways to actually predict the time involved in code, are to:
1) Run it through a simulator.
2) Instruction count in the assembler.
3) Run it for real, and toggle a pin or some similar signal, that can be measured.

Best Wishes
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sat Apr 17, 2010 12:05 pm     Reply with quote

This thread has instructions on how to use the MPLAB Simulator's
Stopwatch feature to measure the time required to run a section of code:
http://www.ccsinfo.com/forum/viewtopic.php?t=38351
aarkey



Joined: 12 Mar 2010
Posts: 3

View user's profile Send private message

PostPosted: Mon Apr 19, 2010 10:59 am     Reply with quote

thank you.........all
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group