View previous topic :: View next topic |
Author |
Message |
Trampas
Joined: 04 Sep 2004 Posts: 89 Location: NC
|
#org |
Posted: Sun Sep 26, 2004 5:59 pm |
|
|
OK, I read the f*!$ manual and I still can not get the #org to work
First off the manual does not state very well how the #org works. For example I have several functions I want to put in a specific address range. Do I have to calculate the function sizes for each? For example
Code: | #org 0xF000, 0xFFFF
void foo()
{
}
#org default
void main()
{
}
#org 0xF000
void foo2()
{
} |
I tried the above and get all kinds of funny errors. I am not sure how the org is suppose to work, does anyone have a clue? Also what the heck is the auto=0 suppose to do all the manual I have says is "Add a AUTO=0 at the end of the #ORG line."
Trampas |
|
|
Trampas
Joined: 04 Sep 2004 Posts: 89 Location: NC
|
|
Posted: Sun Sep 26, 2004 6:34 pm |
|
|
Man the documentation sucks!!!
It appears that the compiler is about as stupid as the documenation...
The #org statement appears to require the function prototype to be declared as #separate. It also appears that the order which you place functions in the code makes a big difference with the #org. That is it appears the compiler is a stupid one pass compiler and linker. That is the compiler parses the #org in order of the ONE file. For example if you have multiple C files like I do then you have to put the #include the other source files into the ONE main file. Well be sure you place the #org in the correct order. Now a real compiler would compile the code to virutal memory locations then apply the #org statements in the final link, but not the CCS compiler. Also a real compiler would complie an execution graph in one pass to determine which functions to inline based on the function size, number of calls, and available ROM, but again it appears that the CCS compiler does not do any of these things.
I guess I should spend more time porting code to real compiler than reporting problems with the CCS compiler.
Trampas |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Sun Sep 26, 2004 6:41 pm |
|
|
auto=0 gives this behavior
The RAM for a ORG'ed function may be reset to low memory so the local variables and scratch variables are placed in low memory. This should only be used if the ORG'ed function will not return to the caller. The RAM used will overlap the RAM of the main program. |
|
|
Trampas
Joined: 04 Sep 2004 Posts: 89 Location: NC
|
|
Posted: Sun Sep 26, 2004 6:56 pm |
|
|
Mark,
Thanks again...
I guess auto=0 is just in case you are low on RAM?
I have ported my next project from CCS to the C18. However I still have one project which has been done with CCS (95% ROM usage, over 10k lines of code). I guess I will start next week porting this one to the C18.
Mark, tell me if you are using the C18 for your project why do you still visit this forum?
Trampas |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Sun Sep 26, 2004 8:27 pm |
|
|
I actually stopped for a while. But I like to help people so that is the main reason. I also like solving problems. Kind of hones my skills as well. So that's the reason. Take the pointer to functions problem that you had. I just loved the challenge of making it work. So that is the reason that I did it. |
|
|
|