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 support@ccsinfo.com

Finding Declaration of a Function
Goto page 1, 2  Next
 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
ads



Joined: 09 May 2020
Posts: 11

View user's profile Send private message

Finding Declaration of a Function
PostPosted: Sun May 17, 2020 2:20 pm     Reply with quote

Hi I want to find declaration for a function
When I right click and select find declaration it doesn't open it in a new page.

I want to see the
Code:
#use pwm
function. Is there a way to see this. (Because there is a problem with this code I want to rewrite it in my main library to try something but I need to learn how it works.) Thank you for reading. Have a nice day.
temtronic



Joined: 01 Jul 2010
Posts: 9081
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Sun May 17, 2020 2:47 pm     Reply with quote

I'd dump the listing... it'll be there.
Obviously cut a SMALL program......

Jay
ads



Joined: 09 May 2020
Posts: 11

View user's profile Send private message

PostPosted: Sun May 17, 2020 2:55 pm     Reply with quote

I didn't understand what you mean by "I'd dump the listing... it'll be there."
My question is how to find a declaration do you know sir ?
newguy



Joined: 24 Jun 2004
Posts: 1899

View user's profile Send private message

PostPosted: Sun May 17, 2020 2:59 pm     Reply with quote

I'm not sure you'll be able to see it all. To us, the users, #use (whatever) is short and easy. To support this simplicity will require quite a bit of "behind the scenes" support/code.

Anyway, if you "open all files", near the top of the processor .h file you'll see a #nolist line. Comment that out, then recompile. Open the c/assembly list file and any previously hidden code will now be there, in its entirety.

Good luck. Question: do you suspect that the compiler is generating code that has a mistake/bug?
ads



Joined: 09 May 2020
Posts: 11

View user's profile Send private message

PostPosted: Sun May 17, 2020 3:43 pm     Reply with quote

Okey sorry for not being clear let me explain myself again. For example;
Lets assume I am trying to learn how this code works:
Code:
#use rs232(baud=2400, xmit=0, stop=1, parity=n)


Normally in another compiler like KEIL or another I would right click on it and it sends me to its declaration. But in CCS C I couldn't find any. I only found that
header file of 12F1822.h there is no .c file. I didn't state my whole problem because I know the problem is because of my compiler version.
jeremiah



Joined: 20 Jul 2010
Posts: 1314

View user's profile Send private message

PostPosted: Sun May 17, 2020 4:52 pm     Reply with quote

ads wrote:
Okey sorry for not being clear let me explain myself again. For example;
Lets assume I am trying to learn how this code works:
Code:
#use rs232(baud=2400, xmit=0, stop=1, parity=n)


Normally in another compiler like KEIL or another I would right click on it and it sends me to its declaration. But in CCS C I couldn't find any. I only found that
header file of 12F1822.h there is no .c file. I didn't state my whole problem because I know the problem is because of my compiler version.


I think you are misunderstanding what #use is. In C this is referred to as a preprocessor directive. It isn't a function, so there isn't going to be a declaration. It's a command to the compiler. In this case, it tells the compiler to setup the proper registers to use the PWM for you.

Anytime you see a statement starting with a '#', it is for the preprocessor.
temtronic



Joined: 01 Jul 2010
Posts: 9081
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Sun May 17, 2020 5:05 pm     Reply with quote

re: 'dump the listing'....
After you comple your program, look in the folder and file the 'project.lst' file. That is the listing, the program ,listed ,line by line in machine code,with whatever comments, etc. Just look for the #use.....and there will be the code.
ads



Joined: 09 May 2020
Posts: 11

View user's profile Send private message

PostPosted: Sun May 17, 2020 6:14 pm     Reply with quote

Thanks a lot for your answers. What I just want to see definitions of functions

Quote:
I think you are misunderstanding what #use is. In C this is referred to as a preprocessor directive.


Sorry you are right I am not so familiar with programming. But I can't find this function either which is ;
"setup_timer_1(T1_DISABLED);"


Quote:
After you comple your program, look in the folder and file the 'project.lst' file. That is the listing, the program ,listed ,line by line in machine code,with whatever comments, etc. Just look for the #use.....and there will be the code.


Okey I understand thank you. I saw these in assembly language. I don't know asm :(.

Actually what I want is to write codes in an another compiler. To do this, I need to understand functions and how it works. Thank you all for reading. And sorry for dwelling on this subject.
jeremiah



Joined: 20 Jul 2010
Posts: 1314

View user's profile Send private message

PostPosted: Sun May 17, 2020 8:16 pm     Reply with quote

ads wrote:
Thanks a lot for your answers. What I just want to see definitions of functions

Quote:
I think you are misunderstanding what #use is. In C this is referred to as a preprocessor directive.


Sorry you are right I am not so familiar with programming. But I can't find this function either which is ;
"setup_timer_1(T1_DISABLED);"

Ok. So it sounds like you are actually looking for the function definition, not the declaration. The declaration is just a prototype for the function call while the definition is the actual code that implements it. This link explains the difference probably better than me: https://www.geeksforgeeks.org/difference-between-definition-and-declaration/

The trouble here is CCS creates the function definitions on the fly based on various parameters (the chip you selected, the #use directives, #device directives, etc.). They are referred to as "built in" functions because they don't have a general C definition. The comments others have given you about "dumping the listing" are as close as you can get to this. Doing as they suggest will show you the underlying assembly code that the compiler generates. There is no current way to see the C code used for these functions, only the assembly (as others have mentioned to you).
Ttelmah



Joined: 11 Mar 2010
Posts: 19195

View user's profile Send private message

PostPosted: Mon May 18, 2020 12:39 am     Reply with quote

Make a single line change to the processor include file.
The second 'code' line in the file, immediately after the actual chip
declaration, is:

#nolist

Just remark this line out:

//#nolist

Save the file back with your code.

Change the include used to load the processor file to use "" instead
of <>. This makes the compiler look in the local directory 'first' so
it will find this modified file.

Then recompile.

The assembler for all the 'system' functions will now be visible in the .lst
file. So (for example), the timer setup etc..

Now understand this will only be 'assembler'. There is no 'C source' for
these core functions. Many are actually written in assembler by CCS.

For the #use rs232, the assembler will be in the lst file immediately
after the #use line. Similarly the code used for delays, will be just
after the clock definition etc..

Understand also that the declarations will 'interact', so the code
generated for the #use RS232, and the 'use PWM, will both change
if the #use DELAY changes etc...
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Mon May 18, 2020 1:00 am     Reply with quote

Make a test program:
Code:

#include <12F1822.h>
#use delay(internal=4M)

//=======================
void main()
{
setup_timer_1(T1_DISABLED);

while(TRUE);
}

Look at .LST file to see ASM code:
Code:

.................... void main()
0003:  MOVLW  6A
0004:  MOVLB  01
0005:  MOVWF  OSCCON
0006:  MOVLB  03
0007:  CLRF   ANSELA
0008:  MOVLB  02
0009:  CLRF   CM1CON1
000A:  CLRF   CM1CON0
.................... {
.................... setup_timer_1(T1_DISABLED);
000B:  BCF    APFCON.T1GSEL
000C:  MOVLB  00
000D:  CLRF   T1CON
000E:  CLRF   T1GCON
....................
.................... while(TRUE);
000F:  GOTO   00F
.................... }
....................
0010:  SLEEP
Ttelmah



Joined: 11 Mar 2010
Posts: 19195

View user's profile Send private message

PostPosted: Mon May 18, 2020 3:30 am     Reply with quote

and (of course), PCM here has the compiler set to generate 'SFR names'
to help make the result more readable. Very Happy
ads



Joined: 09 May 2020
Posts: 11

View user's profile Send private message

PostPosted: Mon May 18, 2020 5:22 am     Reply with quote

Okey thanks a lot everyone. Then it sounds like I need to learn asm language. Smile
temtronic



Joined: 01 Jul 2010
Posts: 9081
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Mon May 18, 2020 6:38 am     Reply with quote

Actually PIC ASM is easy to learn as there's only 35+- instructions. Most newer PICS have MORE 'fuses' !!
A basic understanding of ASM allows you to 'see' how code executes and possible improvements either in speed(faster) or codespace(smaller).
gaugeguy



Joined: 05 Apr 2011
Posts: 286

View user's profile Send private message

PostPosted: Mon May 18, 2020 7:12 am     Reply with quote

Quote:
Actually what I want is to write codes in an another compiler. To do this, I need to understand functions and how it works. Thank you all for reading. And sorry for dwelling on this subject.


Are you trying to use the CCS built in functions for a different compiler?
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Goto page 1, 2  Next
Page 1 of 2

 
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