Can I load two different hex files on same microcontroller so that whenever it boots up, It should ask me the option to select. This is samly analogous to booting up my PC with two different operating systems. I want to write new bootloader for it.
Can I load two different hex files on same microcontroller so that whenever it boots up, It should ask me the option to select. This is samly analogous to booting up my PC with two different operating systems. I want to write new bootloader for it.
Actually this can be done and is used on various embedded boards. Look at the FRDM-K64F, when you plug a micro cable into board, holding the reset button for 30 seconds tells the bootloader to enter different code and act differently. Alas, there is no interface to talk to for the bootloader like a PC has..
Hi Clem,
Thanks for the reply , indeed happy to learn that this concept is possible in microcontrollers. Now my next task is that modification of lower end microcontroller bootloader in order to work the same way. Is there any possible solution or indirect way to do that. Is there any difference between binary file and the image file which can be burn on the microcontroller. Do chinese mp5 players uses any kind of operating system on which multiple applications are running such as audio,video,record,ebook etc. Kindly provide as much as details you can.
Hi Akshay,
I think you're suggesting to have two or more programs stored in flash and a program to select which one you want. It is partially microprocessor/microcontroller-specific. What you're suggesting is no different than what an OS offers. There are plenty of books that explain this, executable file formats, etc. Look for documentation on (say) CP/M and you'll get a good idea how it could work on limited resource devices like microcontrollers. Expect to do some of it in assembly.
I don't have any more detail - ordinarily one would use an OS if one wanted to do this, such as Linux. I''m not sure deciphering mp3 players is possible,
at least not unless you have detailed knowledge working for the manufacturer of them.
Realizing space is limited in MCU bootloader because you need to leave as much as possible for application use, I would use a simple switch to test code path and proceed down new path only if depressed. default action, would be the normal bootloader, But instead of this, consider using application code instead since it would be easier to replace if something goes wrong. I would not want to brick MCU because the bootloader can't be changed! Let me know if this answers that question. I know nothing about Chinese MP player
Clem
Hi Clem,
I do agree with you but still lots of confusion persists in my mind that how I will be able to burn two different hex application files in the same Flash area of the microcontoller Eg.Atmega 16. 16KB total is available out of that 1KB BLS section(Boot loader section) and 15KB is application section. I may modify the bootloader code so that it can ask me for the application choice if it detects two hex files but how two different hex files will reside in same application section, don't you think when programmed through burner it will overwrite the previous one. Will bootloader be able to adapt two different hex files in same application area and provide the choice for me after pressing a simple switch which seems to be feasible.
Please refer to this video, I just want two applications within same application area no external eeprom (Atmega 16 bootloader video)
http://www.youtube.com/watch?v=j1wmHfd_m04
Secondly Clem kindly tell me any compiler which can directly output .bin file instead of .hex file for burning the MCU. for ARM 32 bit controller if possible
Akshay,
I cannot tell you what actually happens, but in most cases when the IDE compiles (translate human source to binary code) and links (resolve pointers to already written library binary code), a load point/entry point must be determined. That entry point is fixed at a location that comes soon after the end of the bootloader in 99% of the cases. I have done software for 30 years on many platforms and see little else!
So here is the dilemma: How can you load two applications at the same time and know where each is loaded and what entry point to use? A very sticky problem unless you can modify the bootloader and know how much space is used by first application versus the second. But you can use an RTOS that will help you have pieces of code running concurrently with some kind of scheduler (code to allow many tasks or pieces of application code run). Would that help you get your code in?
Clem
P.S.
I will research the .bin vs .hex types and let you know...
Thanks clem, Your answer seems to be pretty satisfactory but still even my research is going on too with the same thing. Do update me with any other solution in future.
Bye.
After scouring my mind/net I understand why the Hex vs bin, See Hex definition from Keil:
The Intel HEX file is an ASCII text file with lines of text that follow the Intel HEX file format. Each line in an Intel HEX file contains one HEX record. These records are made up of hexadecimal numbers that represent machine language code and/or constant data. Intel HEX files are often used to transfer the program and data that would be stored in a ROM or EPROM. Most EPROM programmers or emulators can use Intel HEX files.
This means if you load a EPROM or ROM, use .HEX, otherwise only use the .BIN for applications into SRAM.
Clem
PS.
Please mark this question as appropriate as to answered or helpful and start a new one for any other questions. This helps others that may have searched for the same question. Thank you.