Creating Intel Hex files from scratch ************************************* Some facilities are provided for synthesizing Intel Hex files from scratch. These can also be used to modify a hex file in place. Just as you can use indexed reads to retrieve data, you can use indexed writes to modify the file, e.g.:: >>> ih[1] = 0x55 # modify data at address 1 A common usage would be to read a hex file with IntelHex, use the above syntax to modify it, and then write out the modified file. The above command can be used on an empty IntelHex object to synthesize a hex file from scratch. Another important feature helps work with C strings via ``putsz``/``getsz``, e.g.:: >>> ih.putsz(0x100,"A string") This places "A string" followed by a terminating NULL character in address 0x100. The ``getsz`` method similarly retrieves a null terminated string from a specified address like so:: >>> ih.getsz(0x100) This should retrieve the "A string" we stored earlier. Additionally, ``puts``/``gets`` can be used to retrieve strings of specific length from the hex file like so:: >>> ih.puts(0x100,"data") >>> ih.gets(0x100,4) The second command should retrieve the characters 'd','a','t','a'. These methods do not use terminating NULLs, so the data need not be interpreted as a string. One usage of these commands comes from the Python ``struct`` module. This module allows the programmer to specify a C struct, and it will allow conversion between the variables and a packed string representation for use with ``puts``/``gets``. For example, suppose we need to deal with a struct containing a char, a short, and a float:: >>> import struct >>> formatstring = 'chf' # see Python docs for full list of valid struct formats >>> ih.puts(0x10, struct.pack(formatstring,'a',24,18.6)) # put data in hex file >>> (mychar,myshort,myfloat) = struct.unpack(formatstring, ih.gets(0x10,7) Now ``mychar``, ``myshort``, and ``myfloat`` should contain the original data (assuming ``sizeof(float) = 4`` on this platform, otherwise the size may be wrong).