details make a difference

Publisher:三青Latest update time:2016-12-31 Source: eefocus Reading articles on mobile phones Scan QR code
Read articles on your mobile phone anytime, anywhere

Use flags with caution (I am a novice in microcontrollers, experts please help me, welcome to give me advice!~)
What I am talking about here is to use flags reasonably and carefully, otherwise it is easy to make mistakes and difficult to debug.
When I was working today, I modified the timer timing function and gained experience. What I said here has nothing to do with the specific microcontroller, it is a general idea.
Take what I modified today as an example:
The two I/O pins of the PIC microcontroller control the on and off of two LED lights (blue and red lights, respectively, LEDs are used here to avoid involving company content).
The requirements are that
the blue light turns on once every 5s, for about 100ms;
the red light turns on once every 10s, for 100ms each time;
the red and blue lights are staggered as much as possible.
My idea is
to define a 10s time axis and use a timer to implement it, turning on the blue light at 2.5 seconds and 7.5 seconds, and turning on the red light at 10s.
There is a global variable cnt.

Define a global variable times = 0.


[cpp]  view plain  copy  print ?

  1. 0 2.5s 5s 7.5s 10s  

  2. |-------------|===|-------------|-------------|=== |-------------|+++|  

  3.                blue blue red  

  4. |----times=0------|----------times=1----------|----times=0---- -------|  





I took it for granted that this would work, but I didn’t
know there was a
bug here, because this condition is also met between 7.5 and 10 s . . . The system that comes out like this is not what we want above. We should change it to if((cnt > 250)&&(times == 0)&&(cnt < 750)) so that it will work. . .



















Reference address:details make a difference

Previous article:Serial communication uses parity check to send data
Next article:PWM speed regulation principle

Latest Microcontroller Articles
  • Download from the Internet--ARM Getting Started Notes
    A brief introduction: From today on, the ARM notebook of the rookie is open, and it can be regarded as a place to store these notes. Why publish it? Maybe you are interested in it. In fact, the reason for these notes is ...
  • Learn ARM development(22)
    Turning off and on interrupts Interrupts are an efficient dialogue mechanism, but sometimes you don't want to interrupt the program while it is running. For example, when you are printing something, the program suddenly interrupts and another ...
  • Learn ARM development(21)
    First, declare the task pointer, because it will be used later. Task pointer volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • Learn ARM development(20)
    With the previous Tick interrupt, the basic task switching conditions are ready. However, this "easterly" is also difficult to understand. Only through continuous practice can we understand it. ...
  • Learn ARM development(19)
    After many days of hard work, I finally got the interrupt working. But in order to allow RTOS to use timer interrupts, what kind of interrupts can be implemented in S3C44B0? There are two methods in S3C44B0. ...
  • Learn ARM development(14)
  • Learn ARM development(15)
  • Learn ARM development(16)
  • Learn ARM development(17)
Change More Related Popular Components

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号