The processing necessary to start up the master is the same as that for a usual program that does not use the PIC/PID function except for the two processes described below. Add these two processes to the startup processing created according to section 7.3, Startup Program Creation.
(1) | Initiation of and Return from Application |
Set up the PID register in the main function and branch to the PIC entry address to initiate the application. In addition, a means for returning from the application to the master should be provided.
(2) | Reference to Shared Library Functions to be Used |
The shared libraries to be used by the application should be referred to also by the master in advance.
The following shows an example for calling a PIC/PID application from the main function.
This example assumes the following conditions:
- | After application execution, control can be returned to the master through the RTS instruction. |
- | The application does not pass a return value. |
- | The PID initiation address (PIC_entry) and PID start address (PID_address) for the application are known and fixed when the master is built. |
- | R13 is used as the PID register. |
- | Initialization of the section areas on the application side is not done on the master side. |
- | The application uses only the printf function as the shared library. |
Example:
/* Master-Side Program */
/* Initiates the PIC/PID application. */
/* (For the system that the application does not pass */
/* a return value and execution returns through RTS) */
#include <stdio.h>
#pragma inline_asm Launch_PICPID_Application
void Launch_PICPID_Application(void *pic_entry, void *pid_address)
{
MOV.L R2,__PID_R13
JSR R1
}
int main()
{
void *PIC_entry = (void*)0x500000; /* PIC initiation address */
void *PID_address = (void*)0x120000; /* PID start address */
/* (1) Initiation of and Return from Application */
Launch_PICPID_Application(PIC_entry, PID_address);
return 0;
}
/* (2) Reference to Shared Library Functions to be Used */
void *_dummy_ptr = (void*)printf; /* printf function */
|