This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

how do I implement an overplapped execution area?

Hi, I have an application with von neumann memory. I have hardware support to load this memory from a serial flash. I would like to be able to load function sets to a specific location in this memory and run them. To that end I have downloaded the C51: IN-SYSTEM FLASH PROGRAMMING (PART 2) example and it runs OK. I then modified this by adding another function set identical to the first pflash one. How do I get the tools to overlap the execution area for the two sets?

These are the LX51 locate user class settings:
This does not work and I would like it to:
SROM ( C:0x1000-C:0x1FFF),
CODE_FLASHMEM(C:0x2000-C:0x2020) [ ],
CODE_FLASHMEM1(C:0x2000-C:0x2020) [ ],

This does work:
SROM ( C:0x1000-C:0x1FFF),
CODE_FLASHMEM(C:0x2000-C:0x2020) [ ],
CODE_FLASHMEM1(C:0x2000-C:0x2040) [ ],

I attach the files I modified from the example.
This is the srom.c file

#include <string.h>
#include <intrins.h>
#include  "srom.h"               // SROM Handling definitions
extern void flash ( void );     // first function to be executed in RAM.
extern void flash1 ( void );     // first function to be executed in RAM.

SROM_MC (CODE_FLASHMEM)         // define SROM program segment
SROM_MC (CODE_FLASHMEM1)         // define SROM program segment
/*------------------------------------------------
The main C function.
------------------------------------------------*/
void main (void)  {
memcpy (SROM_MC_TRG(CODE_FLASHMEM),     // copy flash function from ROM to RAM
         SROM_MC_SRC(CODE_FLASHMEM),
          SROM_MC_LEN(CODE_FLASHMEM));
flash();                               // calls flash function in RAM
memcpy (SROM_MC_TRG(CODE_FLASHMEM1),     // copy flash function from ROM to RAM
         SROM_MC_SRC(CODE_FLASHMEM1),
          SROM_MC_LEN(CODE_FLASHMEM1));
flash1();                               // calls flash function in RAM
while (1);
}

This is the srom.c file


#include <string.h>
#include <intrins.h>
#include "srom.h" // SROM Handling definitions
extern void flash ( void ); // first function to be executed in RAM.
extern void flash1 ( void ); // first function to be executed in RAM. SROM_MC (CODE_FLASHMEM) // define SROM program segment
SROM_MC (CODE_FLASHMEM1) // define SROM program segment
/*------------------------------------------------
The main C function.
------------------------------------------------*/
void main (void) {
memcpy (SROM_MC_TRG(CODE_FLASHMEM), // copy flash function from ROM to RAM SROM_MC_SRC(CODE_FLASHMEM), SROM_MC_LEN(CODE_FLASHMEM));
flash(); // calls flash function in RAM
memcpy (SROM_MC_TRG(CODE_FLASHMEM1), // copy flash function from ROM to RAM SROM_MC_SRC(CODE_FLASHMEM1), SROM_MC_LEN(CODE_FLASHMEM1));
flash1(); // calls flash function in RAM
while (1);
}


This is the pflash1.c file which needs to be added to the example project.

#include <intrins.h>
#pragma USERCLASS(CODE = FLASHMEM1)      // user class CODE_FLASHMEM
/*------------------------------------------------
Module stored in ROM and will be executed in RAM.
----------------------------------------------*/
/*------------------------------------------------
Delay function FUN
------------------------------------------------*/
void delay1 ( unsigned int i )
{
while (i--);
}
/*------------------------------------------------
This function should handle your Flash Memory FUN
------------------------------------------------*/
void flash1 ( void )
{
unsigned int i= 0x0FFF;
  delay1(i);
  _nop_();
}


This is the other file in the project. Pflash.c which is unmodified from the example.

/*------------------------------------------------------------------------------
PFLASH.C
Copyright 1995-2002 Keil Software, Inc.
------------------------------------------------------------------------------*/
#include <intrins.h>
#pragma USERCLASS(CODE = FLASHMEM)      // user class CODE_FLASHMEM
/*------------------------------------------------
Module stored in ROM and will be executed in RAM.
------------------------------------------------*/
/*------------------------------------------------
Delay function
------------------------------------------------*/
void delay ( unsigned int i )
{
while (i--);
}
/*------------------------------------------------
This function should handle your Flash Memory
------------------------------------------------*/
void flash ( void )
{
unsigned int i= 0xFFFF;
  delay(i);
  _nop_();
}

Thanks for any help!

0