Thanks a lot for your help

Finally this is what I did:

$ objcopy -I ihex -O binary file.hex file.bin
$ dd if=file.bin of=file_full_range.bin count=1 bs=32768     (18f2550 memory size in bytes)
$ objcopy -I binary -O ihex file_full_range.bin file_ready_for_bootloader.hex

Opening the files with a hex editor everything seems to be OK but I haven't tested it yet. If I do, I'll let you know.

Several things:

- I haven't been able to convince objcopy that the output size is 32768 or whatever, and so, not needing to use dd, do you know how to do it?
- Option bs in dd is: "read and write BYTES bytes at a time". So I needed to add count=1 to copy just (count times bs) = 1 x 32768 = 32768 bytes
- Doing that, if original hex is smaller than 32768 dd doesn't fill with zeroes or anything. I needed to include fuses in original file.hex (fuses are on a very high address location) and so, file.bin is something like this:
Program code
Zeroes
Zeroes
Zeroes
Fuses

After dd, file_full_range.bin is:
Program code
Zeroes
Zeroes (ending exactly on address 32768-1=32767 and without fuses as intended)

Thank you very much




On Sat, Jan 28, 2012 at 5:56 PM, Unix Savvy Brian <bwitt@value.net> wrote:
Diego --

Look at 'objcopy', after doing the link.  It can translate formats.
You might be
able to convince it the output size is 4K ( or some other "round number" ) in
order to fill unused memory.  I've used the full-blown GNU version on 32-bit
systems and it is quite flexible.  Output format of binary will strip
COFF headers.


If that doesn't do it and you have UNIX tools, after using 'objcopy'
to strip the
header, try using 'dd' to get to a specific size....
   dd if=myprog.bin of=readyfordownload.bin bs=4096

The 'bs=N' would be the size required by your loader to fill all of
memory.  'dd'
will fill the extra bytes with zeros.


I'm just a lurker.....


HTH,
*brianW





On Sat, Jan 28, 2012 at 4:06 AM, Diego Herranz
<diegoherranz@diegoherranz.com> wrote:
> Hi!
>
> I want to use a bootloader (Scene Double bootloader) for PIC16 and it
> requires to export the full program memory range of your application (even
> unused range), with no eeprom nor fuses.
>
> This is the exact text present in the bootloader manual:
>
>>
>> Exporting a HEX File from MPLAB
>>
>>
>>
>> Once you have written some firmware (using Sample Application as a guide)
>> you will need to provide a hex file to format for
>> use with the Bootloader.
>> DO NOT use the hex file generated directly by MPLAB when you compile the
>> application, as this may not include the full
>> memory range (we need a file of a known size), and also contains
>> configuration bits which we do not want.
>> Instead, compile and the choose File->Export. Set it to only output
>> Program Memory (no EEPROM or configuration bits). The
>> memory range should be the whole range of the device (or, choose the start
>> to be the starting address of your user
>> application space, which is 0x2400 in the Sample Application example, and
>> then end to be the top program memory
>> address in the device).
>
>
> Does anybody know how to do this with SDCC?
> Is it related to linker as gplink is generating the COFF file from which the
> hex file is finally created?
>
> Thanks a lot.
>
> ------------------------------------------------------------------------------
> Try before you buy = See our experts in action!
> The most comprehensive online learning library for Microsoft developers
> is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
> Metro Style Apps, more. Free future releases when you subscribe now!
> http://p.sf.net/sfu/learndevnow-dev2
> _______________________________________________
> Sdcc-user mailing list
> Sdcc-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/sdcc-user
>