hello everyone , I am boundless .

Once when I was broadcasting live to internal students , Some friends asked me , Why enter the critical stage , What's the use of criticality ?

I didn't think of a good explanation for a moment and a half , Let me give you a few examples today .

If a big man thinks I'm wrong, please talk privately and I'll correct it , Don't secretly spray me in the comment area , Can't I change it .

Entry and exit criticality , My first contact was in ucos system , At that time, I also felt that this professional term was awesome and complicated .

When I finish talking , You'll find it's actually pretty good low.

Entering the threshold is to turn off the total interrupt of MCU , Exit critical is to restore MCU interrupt , Remember, it's best to recover , Not open , Because before entering the critical point, the total interruption of MCU may not be on .

Then why enter the critical point ? What does it do ?

Let's assume a scenario :

Let's look at such a piece of code .

Suppose we run the program to the third 12 that 's ok , that is a = 0 Location of ,*p The value of must be equal to 2 Right ?

Suddenly a timer interrupt came , Then in the timer interrupt processing function , We did p++.

After execution, return to the main program to continue execution , That is, it will be executed 13 Line code , At this time *p Guess what the value is ?

you 're right , Definitely not 2, But 3.

Clearly conditional judgment is 2, Finally, the value becomes 3, such bug I guess I can make you cry .

At this time, when we enter the critical point, we are very stable , Can be changed to the following code .

STM32 Not like 51 Single chip microcomputer is so direct EA=0 You can turn off the total interrupt , But through __get_PRIMASK and __set_PRIMASK To do , Of course, it can also be used __disable_irq and __enable_irq.

Specific information can be searched in the project , Look at the notes .

Every single chip microcomputer turns off the total interrupt in a different way , Therefore, there are also differences between entry critical and exit critical codes .

You just need to remember that the essence is to shut down the total interruption , After executing the procedure , Just restore the total interruption .

Don't worry too much about how to switch when the single chip microcomputer is always interrupted , You can find it on the Internet .

Then continue to talk about the program above , Many people may say , I avoid this problem when I write programs , Not in the timer, right p Just operate on the pointer ?

If you are doing some big projects , Almost impossible to avoid , For example, our queue algorithm .

We will receive the data in the serial port interrupt , Throw data into the queue , Then it is analyzed in the main function .

After using the queue , The stability of data transmission can be greatly improved , Even if the data transmission is fast , There is a large amount of data and there will be no packet loss .

Let's take a look at the listing function of the queue algorithm .

such , If you don't use a pointer , Almost impossible , Even the flexibility and portability are not high .

Imagine , If this happens, the pointer will be operated frequently in the main function and interrupt , Without criticality, the program is easy to crash due to pointer pointing exception or program logic problems caused by data disorder .

of course , Enter critical in addition to protecting global variables , array , Structure and other data , It can also be hardware data , such as IO,SCI,SPI,flash.

of course ,RTOS It may be more complicated , I won't explain them one by one here , Just understand the essence .