> code is inside segment 0, how do I make sure its inside segment 0?  Is it
> refering to memory addresses?  (like code at addresses of below 64K or

If you are using CodeWarrior, switch to "segments" tab and you
will see what is in "segment 1" and what is not. If you were
using GCC, you wouldn't have asked this question :-)

Global variables:- Normally A5 register will point to your globals
(This is done by some startup code that will allocate, load & initialize
a memory chuck and make A5 point to it). This "startup" is skipped
for efficiency reasons whenever your program is sub-launched.
For example, if all applications were properly initialized during a
"Find" search, the Find process would become very slow.

Consider the following code:-
int x; DWord PilotMain(...) { x = 0; }

The compiler will generate code that translates to something like
"access word at offset 'x' from the value of A5 register and set it to
zero".
assuming A5 is point to the start of globals. If this code were to be
executed
when A5 doesn't point to "your" globals, you will be accessing some random
area in memory. (Though not completely random, it is definitely not what
you want)

Unfortunately, compiler cannot make this decision for you since this is
known
only at run time. So if you program is called by codes other than normal
launch
code, you should make sure your code doesn't refer to global variables.

Trace the call sequence from PilotMain all the way through your program.
None of your functions should refer to anything other than local variables
or values passed to them as parameters. NOTE: A *static* local variable is
also considered "global", since it means the same to the compiler.

"Chris Percival" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
>
> This is taken from the Palm Knowledge base
> (http://oasis.palm.com/dev/kb/manuals/1780.cfm):
>
> You do not have access to global variables or code outside segment 0 (in a
> multi-segment application) when you respond to the launch codes
> (sysAppLaunchCmdAlarmTriggered and sysAppLaunchCmdDisplayAlarm).
>
> What does the 'code outside segment 0 (in a multi-segment application)'
bit
> mean?  In my code (where it handles ysAppLaunchCmdAlarmTriggered) I call a
> couple of functions in a library file that is linked with my project,
would
> this be outside segment 0?  (It doesn't seem to like it anyhow) . Also
these
> functions probobly use variables global to the library (which probobly
> violates 'You do not have access to global variables' anyway ;o).  So what
> code is inside segment 0, how do I make sure its inside segment 0?  Is it
> refering to memory addresses?  (like code at addresses of below 64K or
> somthing?).
>
> Also what happens to code/memory when my program ends, does the code
remain
> in memory, is the code (things on the stack?) always loaded?
>
> So many questions!  Thanks for anything in advance...
>
> Chris
>
>
>
>





-- 
For information on using the ACCESS Developer Forums, or to unsubscribe, please 
see http://www.access-company.com/developers/forums/

Reply via email to