The sample at the thread start is correct. just try it and you should see.
I have free 5min and just tried your sample:
INT32 firenumber = 0;
function inc_firenumber()
{
++firenumber;
DBG_INFO1("firenumber:%d.", firenumber)
}
function clear_firenumber()
{
firenumber = 0;
DBG_INFO1("firenumber:%d.", firenumber)
}
void main()
{
on_i = inc_firenumber;
on_c = clear_firenumber;
while(firenumber<5)
{
DBG_INFO1("inside loop - firenumber:%d.", firenumber)
wait(-1);
}
DBG_INFO1("EXIT firenumber:%d.", firenumber)
}
this is the console output (I pressed the 'I' key periodically):
[INF|temp_test.c|main] inside loop - firenumber:0.
[INF|temp_test.c|inc_firenumber] firenumber:1.
[INF|temp_test.c|main] inside loop - firenumber:1.
[INF|temp_test.c|main] inside loop - firenumber:1.
[INF|temp_test.c|inc_firenumber] firenumber:2.
[INF|temp_test.c|main] inside loop - firenumber:2.
[INF|temp_test.c|main] inside loop - firenumber:2.
[INF|temp_test.c|main] inside loop - firenumber:2.
[INF|temp_test.c|inc_firenumber] firenumber:3.
[INF|temp_test.c|main] inside loop - firenumber:3.
[INF|temp_test.c|inc_firenumber] firenumber:4.
[INF|temp_test.c|main] inside loop - firenumber:4.
[INF|temp_test.c|main] inside loop - firenumber:4.
[INF|temp_test.c|inc_firenumber] firenumber:5.
[INF|temp_test.c|main] EXIT firenumber:5.
there are few reason to get failed with your loop:- a global variable modified suddenly (somewhere in your code); for example, inside an action of many concurrent entities;
- global variable has wrong type (comparing with 'while' statement); for example using signed or high precision var to test smth like: "x == .5"
- wrong 'while' statement;
suggestions:- at first, search over your files for the 'firenumber' to see, where you try to modify it.
- at second, add more debug printouts to see the execution flow.
- try to debug.