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 CCS Technical Support

PIC18F47J53 CCS C Compiler 5.090 Hex file Format

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Marco27293



Joined: 09 May 2020
Posts: 126

View user's profile Send private message

PIC18F47J53 CCS C Compiler 5.090 Hex file Format
PostPosted: Wed Jul 15, 2020 5:13 am     Reply with quote

Hi,

I'm updating my project in order to pass from PIC18F46J50 (64K Program memory ROM) to PIC18F47J53 (128K Program memory ROM).

I need to know how the different memory size is managed in creating hex file.
I mean hex file for 64K ROM follow this format: https://www.engineersgarage.com/tutorials/hex-file-format/

How is the format for PIC18F47J63 128K ROM case?

Please, explain an instruction structure step by step like in the above link, I need to know this specifics to proceed.

Any help and feedback is appreciated.

Marco
Ttelmah



Joined: 11 Mar 2010
Posts: 19520

View user's profile Send private message

PostPosted: Wed Jul 15, 2020 5:55 am     Reply with quote

Basically exactly the same.
However the key is the extended address.

Look at a page that gives rather more details about the Intel hex format.
For example:

<http://www.keil.com/support/docs/1584/>

Look particularly at extended segment address. This gives the ability
To add an upper 16bit 'offset' to the subsequent records.
Marco27293



Joined: 09 May 2020
Posts: 126

View user's profile Send private message

PostPosted: Wed Jul 15, 2020 7:46 am     Reply with quote

Thank you Ttelmah,
1) What is difference between Extended Linear Address Records and Extended Segment Address Records? Which should I consider?


2)When i try to build my project I get this error:

Code:
C:\Users\marcu\MPLABXProjects\Hive_Tech_V1\Lib\loader_3Bee.c:90:2:  Info#300  More info:   Segment at 00000-00008 (0000 used)
C:\Users\marcu\MPLABXProjects\Hive_Tech_V1\Lib\loader_3Bee.c:90:2:  Info#300  More info:   Segment at 0000A-00016 (0000 used)  Priv
C:\Users\marcu\MPLABXProjects\Hive_Tech_V1\Lib\loader_3Bee.c:90:2:  Info#300  More info:   Segment at 00018-0FFFE (0000 used)
C:\Users\marcu\MPLABXProjects\Hive_Tech_V1\Lib\loader_3Bee.c:90:2:  Info#300  More info:   Segment at 10000-1FFF6 (0000 used)
C:\Users\marcu\MPLABXProjects\Hive_Tech_V1\Lib\loader_3Bee.c:90:2:  Info#300  More info:   Attempted to create: 0001A-1EB7E  for #org
C:\Users\marcu\MPLABXProjects\Hive_Tech_V1\Lib\loader_3Bee.c:90:2:  Error#126  Invalid ORG range



I use following code:

Code:

#include <18F47J53.h>

// Localize loader code
#define RESET_VECTOR            0x0000                                          // Defined by hardware
#define HIGH_INT_VECTOR         0x0008                                          // Defined by hardware
#define NORMAL_INT_VECTOR       0x0018                                          // Defined by hardware
#define INTERRUPT_END           0x001A                                          // End of the interrupt area

#define LOADER_START     0x1EB7F                                                // Loader code start: Developer choice
#define LOADER_END       0x1FF7F                                                // Loader code end  : Developer choice     
#define BUFFER_LEN_LOD 64

#build(reset=0x0000, interrupt=0x0008)
#org HIGH_INT_VECTOR+2, NORMAL_INT_VECTOR-1   {}
#org INTERRUPT_END, LOADER_START-1 {}                                           // APPLICATION AFTER DOWNLOAD 
#org LOADER_END+2, (getenv("program_memory")-1) {}


Before I used this and was working fine:

Code:

#include <18F46J50.h>

// Localize loader code
#define RESET_VECTOR            0x0000                                          // Defined by hardware
#define HIGH_INT_VECTOR         0x0008                                          // Defined by hardware
#define NORMAL_INT_VECTOR       0x0018                                          // Defined by hardware
#define INTERRUPT_END           0x001A                                          // End of the interrupt area

#define LOADER_START     0xEB7F                                                // Loader code start: Developer choice
#define LOADER_END       0xFF7F                                                // Loader code end  : Developer choice   
#define BUFFER_LEN_LOD 64

#build(reset=0x0000, interrupt=0x0008)
#org HIGH_INT_VECTOR+2, NORMAL_INT_VECTOR-1   {}
#org INTERRUPT_END, LOADER_START-1 {}                                           // APPLICATION AFTER DOWNLOAD 
#org LOADER_END+2, (getenv("program_memory")-1) {}


What is the problem ??
Ttelmah



Joined: 11 Mar 2010
Posts: 19520

View user's profile Send private message

PostPosted: Wed Jul 15, 2020 9:43 am     Reply with quote

CCS defaults to using linear addressing, not segment address.
The page I pointed you to, explains the difference.

An example of building with a high memory bootloader beyond
0xFFFF is here:

<http://www.co.optimengineering.com/forum/viewtopic.php?p=215046>
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
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