View previous topic :: View next topic |
Author |
Message |
kuriken
Joined: 21 Oct 2006 Posts: 19
|
Creating a combined HEX file |
Posted: Tue Jan 23, 2007 3:57 pm |
|
|
Hello,
I have a bootloader and an application hex file that works. Currently the only way to load the application hex file onto the PIC is through a USB cable after the bootloader is running on the PIC.
I would like to combine the bootloader and application code into one hex file for production reasons. I wanted to know if anybody had experience with this.
Is this possible without combining the codes in C? I was hoping there was an easy way to edit the hex files to accomplish this.
Thanks |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
|
davekelly
Joined: 04 Oct 2006 Posts: 53 Location: Berkshire, England
|
|
Posted: Wed Jan 24, 2007 1:55 am |
|
|
Another way is using MPLAB.
Select Configure, Settings, Program Loading.
Uncheck 'Clear Program memory upon loading'
Import one hex file, then import the other.
Then export to the combined one. |
|
|
kuriken
Joined: 21 Oct 2006 Posts: 19
|
MPLAB |
Posted: Wed Jan 24, 2007 3:29 pm |
|
|
Dave Kelly,
Thanks for replying. I followed your directions as best as I could. Below is what I did but does not work for me:
Installed Evaluation Copy of MPLAB
Created a temp project with PIC18F4620
Unchecked 'Clear Program Memory Upon Loading'
File,Import bootloader.hex
File,Import application.hex
File,Export combined.hex
I get a combined.hex file larger than application.hex. The first time it runs it runs fine. Once I turn the switch off and then on, it does not run properly.
Am I missing a crucial step some where? Is there a procedure to combine the hex files once both are loaded? Also is there a type of bootloader that I have to use for combining the code to work?
I noticed that if I import application.hex first, then bootloader.hex the combined.hex does nothing. |
|
|
davekelly
Joined: 04 Oct 2006 Posts: 53 Location: Berkshire, England
|
|
Posted: Thu Jan 25, 2007 1:53 am |
|
|
Sorry, assumed you were familiar with MPLAB.
Set the correct processor first, under Configure, Select Device.
To ensure memory is completely cleared initially, select Debugger, Clear Memory, Program Memory.
Import the application code first.
Import the bootloader code.
Ensure all of the configuration bits are correct from Configure, Configuration bits (in case the bootloader and application had different settings)
Export the combined code. Disable the EEPROM export if there is no data for the EEPROM stored in the file - this may be why yours increased size.
The only caveat for the bootloader, is make sure all unused memory is cleared. When the second file is imported, any location which contains the blank code (eg 0x3FFF) gets skipped, any other value overwrites the original ocde. This of course may cause an error if there is a genuine 0x3FFF code in the bootloader! |
|
|
kuriken
Joined: 21 Oct 2006 Posts: 19
|
Boot loader location |
Posted: Wed Jan 31, 2007 9:13 pm |
|
|
Dave Kelly,
I've followed all of your instructions carefully. The combined code works the first time its run, but not after a hardware reset.
The only thing that I deverged from your instructions was that I loaded bootloader.hex first then the application.hex. My bootloader lives in lower memory.
Could it be that because my bootloader is in lower memory that the code does not work after a hardware reset? Is there anyway I can get my bootloader in lower memory to work with MPLAB to create a combined hex file?
Thanks |
|
|
kuriken
Joined: 21 Oct 2006 Posts: 19
|
Got It Working! |
Posted: Wed Jan 31, 2007 9:54 pm |
|
|
Dave Kelly,
Thank you for the support. I got it working! Eariler it wasn't working because I was power cycling the unit too fast and I had set the NO_BROWNOUT fuse. The hardware was never reset.
I now set the BROWNOUT fuse and everything works. |
|
|
mattam.ramesh
Joined: 30 Jun 2010 Posts: 3
|
Include Hex file in MPLAB |
Posted: Wed Jun 30, 2010 3:12 am |
|
|
Hi kuriken and Dave Kelly,
I understand from your discussion on how to combine to Hex files which are of different memory locations. I may need your help on how to Include Hex file(Project_A Hex) into another Project(Project_B) and use the functions of Project A Hex file in Project_B and generate a Single Hex file from Project_B?
Your Help is greatly appreciated.
Regards,
Ramesh |
|
|
Rohit de Sa
Joined: 09 Nov 2007 Posts: 282 Location: India
|
|
Posted: Wed Jun 30, 2010 11:04 pm |
|
|
I've read elsewhere on the forum on ways to use the '#import' directive.
http://www.ccsinfo.com/forum/viewtopic.php?t=38730
But I do it the simple and no-brain way :-P
-Burn the bootloader hex onto my chip
-Use the bootloader to burn my application hex
-Use a PICKit2 to read the chip
-Save the hex as "combined.hex"
-Use this hex to program other chips
This allows me to ensure that the bootloader+application works on a microcontroller before I mass burn it.
Rohit |
|
|
mattam.ramesh
Joined: 30 Jun 2010 Posts: 3
|
Two application Hex in one Hex file |
Posted: Wed Jun 30, 2010 11:29 pm |
|
|
Hi Rohit,
Thank you for the quick reply.
My requirement is different. My supplier gives me an application Hex file to upload in my chip. Our company will give set of .c & .h files(our own logic) to that supplier to include(integrate) in his project file and generate application Hex file.
We have decided not to share our code/logic to the supplier, instead give a Hex file or Library file.I have done creating Library file, but the disadvantage is, I also need to give .h files along with the .lib file to my supplier. So, my plan is just to give the Hex file and the function names to call in his project (application Hex file).
Hope I have explained better :-)
Is this a meaningfull idea? I am pretty new to firmware coding.
Regards,
Ramesh |
|
|
Rohit de Sa
Joined: 09 Nov 2007 Posts: 282 Location: India
|
|
Posted: Wed Jun 30, 2010 11:39 pm |
|
|
Hi Mattam:
From what I understand, you (and your supplier) don't want to share source code. I suppose this is to protect your IP. Do bear in mind though, that giving him your hex doesn't really 'protect' you intellectual property. It may make it harder for him to get to your code, since he'll have to disassemble it and go through it line by line. But with time and effort it is entirely possible that he gets a hold of your logic.
That aside, if IP protection is not of importance, I would recommend you use the "#import" directive. Look at the CCS help for more info. The directive allows you to directly import a hex (the complete hex or just certain location ranges) into your code. If your supplier also uses CCS, then he can use this method to incorporate the hex that you provide into his compiled code.
Rohit |
|
|
mattam.ramesh
Joined: 30 Jun 2010 Posts: 3
|
Two application Hex in one Hex file |
Posted: Thu Jul 01, 2010 12:01 am |
|
|
Hi Rohit,
Thank you for valid information, I think I will have to work as you suggest.
Regards,
Ramesh |
|
|
|