Hi, I'm just curios on how this work. Is this a general C/C++ process or C51?
In main.h, I have a:
#define MAX_TIME_OUT 3000 //This is beyond U8
In Worker.c, I have Timer 2 ISR:
#include "main.h" U8 _temp_cntr; //unsigned char and not initialized //T2 init here void T2_ISR() interrupt using 0 { //some flag being set here _temp_cntr++; //Should this be back to 0 when reach 255? if(_temp_cntr == MAX_TIME_OUT) //What will happen here? { _temp_cntr = 0; } }
Hope somebody can enlighten me on this. My UART1 on F387 mcu won't able to run when Timer 2 ISR is enabled because of the specific condition under the ISR.
thanks gp
No, #define doesn't have any data type.
It isn't really part of the C language, even if it is part of the C language standard. There are almost no rules about what you can write after the symbol name (you have a few operators like # and ##, and it knows that when removing comments it has to insert some whitespace instead of the comment).
#defines are just an advanced search/replace functionality in the language.
So when the compiler is ready to generate code, it does not process
if (var == def) ...
but instead
if (var == expansion) ...
Your code is then:
if (_temp_cntr == 3000) ...
If _tmp_cntr can never store a value larger than 255 without rolling back to the value zero, you can continue to increment, and increment and increment until you get a power failure. The if statement will still never be true. Some compilers will - if full warnings are enabled - add an explicit warning about impossible numeric-range comparisons.
Thank you guys for the help, your time and for the well explained explanation.