This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

segger embedded studio with gcc volatile problem

Hi,

I use SES import my keil project, and my keel project work well. With SES, i meed a problem, that is , i have a global variable like this:

uint32_t               g_ulMainLoopCounter = 0;

and i decrease it in timmer isr:

if  (g_ulMainLoopCounter > 0)
{
    g_ulMainLoopCounter--;
}

in my main function, i wait until 'g_ulMainLoopCounter' decrease to 0:

int main(void)
{   
    system_init();                                      //init timer etc...
   
    g_ulMainLoopCounter = 500;
    while (g_ulMainLoopCounter)
    {
    }

   ....
}

now the problem is , my code after 'while' will never be executioned, even 'g_ulMainLoopCounter' decrease to 0. This work well in keil.

Then, if i use 'volatile' qualifier for 'g_ulMainLoopCounter', it works, the code then like this:

volatile uint32_t g_ulMainLoopCounter = 0;

My optimization level set to none, means do not optimize my code.

I know use 'volatile' qualifier is a better way, but 'g_ulMainLoopCounter' is just only a example, there are lots of variables which used like "g_ulMainLoopCounter" (means multi-access variable, change the value in a function or isr and comparison in other function)in my program, must i check every variable in my program and determine if the variable is needed use 'volatile' qualifier? If so, i think that's too difficult.Is there any easy solutions?