How to burn a large volume of bytes (>40k) into the eprom? I read the previous discussion on creating data-only hex file, http://www.keil.com/support/docs/2070.htm. The problem is that I cannot hard-code the bytes in an array, like,
const code my_bytes[] = { _byte1, _byte2, _byte3 };
Just convert the bytes directly to Intel Hex format? There are plenty of tools around for dealing with Intel Hex - use your favourite internet search engine. Or write your own - the Hex format spec is in the downloads area. Or write yourself a little utility to create the 'C' array for your data...
There are a number of hex editors available that could accommodate your needs. I recently had occasion to research the currently available editors, since the one I had been using lacked some of the more advanced that I now require. The result of this research for a product that best suited my requirements was 010 Editor available here: http://www.sweetscape.com/010editor/ To test how it might handle your requirements, I loaded an arbitrary binary file and then exported it to an Intel HEX file and was able to specify the start address. Well that task itself is probably easily performed by a number of hex editors, but where 010 Editor may shine, is its ability to automate tasks using C language scripts. For example, if you wanted to load your program's HEX file, then "merge/append a binary file at a specific address, then save the new larger program-with-bytecodes image to HEX file, you could automate all of this using a script.
Thanks a lot Andy and Dan. I will try the 010 Editor, and let you know the result later on. many thanks again. Kan
Hi, there, I tried Keil's BINARY to Intel HEX Converter Utility, it gave me following error.
$ bin2hex act.class BIN2HEX Version 1.06 Copyright (c) 1993-1995 BITWARE. All rights reserved. ERROR: Could not open BIN file act.class. Status: BIN to HEX conversion was not successful.
$ bin2hex /O0000 foot.jpg BIN2HEX Version 1.06 Copyright (c) 1993-1995 BITWARE. All rights reserved. Status: Creating Intel HEX file. Status: Address 0x00000000 exceeds 64K. Status: Writing 15 bytes at address 0x00003E80. Status: Writing EOF record. Status: BIN to HEX conversion was successful.
>Why does a jpg file work, while a Java bytecode doesn't? This is only a guess, but have a look when that utility was written! It probably does not know how to handle long filenames, and anything with ".class" as the file extension is definitely a long filename! Try renaming "act.class" to "act.bin", and try again using this filename.
Very good guess! After I changed .class to .bin, it works. Another question, how to specify the output file type to be "Intel 8-Bit Hex Code" instead of "16-bit", if using bin2hex ? 010 Hex Editor allows us to specify these different output file types. thanks, Kan
One more question. For the starting address, can someone clarify the the /O starting offset, and the address field of the first record of the output?
$ bin2hex /O0010 Act.bin Action.hex Action.hex start with :20000800 $ bin2hex /O0030 Act.bin Action.hex Action.hex start with :20001800 $ bin2hex /O0050 Act.bin Action.hex Action.hex start with :20002800 $ bin2hex /O0009 Act.bin Action.hex Action.hex start with :20000000
At at guess, risky because I haven't bothered to check the manual: I'd say the /O option accepts C-format integers, in which case a leading 0 indicates octal format. The number in the .HEX file is in, well, hex. 0010 == 0x0008 (one eight equals eight ones) 0030 == 0x0018 (three eights equals one sixteen and eight ones) 0050 == 0x0028 (five eights equals two sixteens and eight ones) 0009 == 0x0000 (the digit '9' does not exist in base eight)
Yes, /O leads an octal address, not hex, not decimal. Only one problem remained,
"Notice that Status: Address 0x00000000 exceeds 64K.. What does this mean?" What size is the JPEG file?
It always happens. Even for a Java class generated on this code, it still gives this warning.
class Act { public static void doMathForever() { int i = 0; while (true) { i += 1; i *= 2; } } }
I think it may work out better if you take up the hints provided and avoid writing your number in octal format. Did you try writing /O0 or /O0x00 instead of /O0000?
It always gives this warning, no matter what address is assigned to /0. Following is an example. Many thanks anyway. Kan
$ bin2hex /O0x00 Act.bin Act_3.hex BIN2HEX Version 1.06 Copyright (c) 1993-1995 BITWARE. All rights reserved. Status: Creating Intel HEX file. Status: Address 0x00000000 exceeds 64K. Status: Writing 9 bytes at address 0x00000100. Status: Writing EOF record. Status: BIN to HEX conversion was successful.
For what it's worth, here's a link to a program that can handle a wide variety of record formats for memory image files, as well as manipulate the files. http://srecord.sourceforge.net/srecord.html
Thanks for the information. cheers, Kan