stm32 To update the program , The general practice is to use j-link Or serial port download . Is it possible to realize unlimited communication , How about online update ?

In order to realize this function of online update , I wrote a simple analogy BootLoader Procedures for . The idea is to add a piece of code before the application executes , You can choose a communication method to receive the new application and compile the generated bin file , Then solidify to flash in , And jump to the application to execute the corresponding code . An interface is given in the application code , When executing the application, you can also jump to the beginning of the program and then perform the update operation . So you can update online .

First one STM32Flash Address bus diagram of

You can see , from 0x8000000 reach 0x807FFFF All of them flash Storage range of . And we put online updates on the flash start , So that it can be called when it is powered on .

therefore , This update we're going to write , Only one way of communication is needed , Receive new applications , Then cure it to flash Another section of the . So this program often takes up a small amount of memory space .

ad locum , We assigned it a certain size flash and RAM:

flash and RAM It can be selected according to the size and resources of your actual update program .

In the update program , You've chosen a way of communication , Received application's .bin file (.bin Files can be created by MDK Generated when the application is compiled , How to do it is not necessary to elaborate ). Then call flash Write operation , Cache received in RAM Inside .bin file copy To your flash in . It's very simple , Just call the library function .

The next step is to call your application . Application's main Function address ( That is, the reset operation corresponding to the interrupt vector table ) It's stored in MDK Generated .bin The fourth to eighth byte in the file ( Because the address is 32bit Of ) in ( The first four bytes hold the top pointer of the stack ). So we define a function pointer , Then assign a value to the pointer , You can call . Look at the code :

typedef void (*myFunction)(void);

The one defined here myFunction Function pointer with no parameter and no return type . This statement may be written as typedef myFunction void (*)(void);
Will be better understood , But we still have to comply C The grammar of language .

Then we define a function pointer variable :

myFunction junpMyAPP;

When we write our applications , We can also MDK Of the program RAM and flash Starting address and space used for , Just don't conflict with our previous updates . Let's assume that the starting address we selected for the application is myAPP_ADDR, At this point, the function pointer can be assigned :
junpMyAPP=(myFunction)*(volatile unsigned int*)(myAPP_ADDR+4);

Let's analyze this code . I've already mentioned that , Application's main The function address is stored in the .bin In the fourth to eighth byte of the file . therefore (myAPP_ADDR+4) It's pointing main Pointer to the address of the function , So we use it (volatile
unsigned int*) Indicates that it is a 32bit Pointer to , At the same time volatile Guaranteed not to be optimized by compiler .(volatile unsigned
int*) Former * Represents the value of this address , that is main The value of the pointer to the function , Last but not least (myFunction) hold main The value of the function pointer is cast to the previously defined function pointer type , It's done. Right junpMyAPP Assignment operation of function pointer .

next , Just call :junpMyAPP(); You can successfully jump to our application . In the app , You can also use this method to jump to our update program at an appropriate time , Realize online update .

Because this paper only describes the principle of simple online update , So a lot of details are ignored , In addition, my level is limited , deficiencies , Please correct it , thank you .

Technology
©2019-2020 Toolsou All rights reserved,
Java Swing JList: List box components Accurate mobile phone number capture , Big data of operators The difference between memory overflow and memory leak , Causes and Solutions Website mobile phone number capture method stay Vue Use in Web Worker3 species Python data structure ,13 Creation methods , This is the conclusion , Great ! What's the difference in server prices ? Basic definition and use of function ‘ To be continued SQL Server Database Glossary Chrome OS, For programmers and Windows What does it mean ? Internet Marketing