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 to burn a large volume of bytes (>40k) into the eprom?

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 };

The reason is that the number of byte is too big (>40k), thus I have to read them from a file.

As matter of fact, this set of bytes is a Java bytecode. First, I load a set of C codes which runs as the Java VM. Second, The VM reads the Java bytecode from a fixed address. In other words, my question is how to load the Java bytecode to a specified location.

Many thanks beforehand,
Kan

Parents Reply Children
  • 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.
    

    However, I tried a jpg file, it worked.
    $ 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.
    

    - Notice that Status: Address 0x00000000 exceeds 64K.. What does this mean?

    - Why does a jpg file work, while a Java bytecode doesn't?

    Also, I tried 010 Hex Editor, it worked for both files.

    many thanks again,
    Kan

  • >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,

    $ 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.
    


    Notice that Status: Address 0x00000000 exceeds 64K.. What does this mean?

    cheers,
    Kan

  • "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;
            }
        }
    }
    

    But it seems to me this warning doesn't hurt any thing, hence can be safely ignored.

    thanks,
    Kan

  • 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