Jump to content

    

IAR 6.4 Optimization Bug

Еще один возможно прикол версии 6.4

static class UART_CL{
....
              uint8_t start_enable;
              uint8_t ask_enable;
....
void start_ask(){
          ....
ask_enable = 1;
                  while(start_enable);
...          }    
....
void send_codram(){
....
if(ask_enable)
        start_enable = 0;   
....}
..... 
}UART1;

долго бился с багом в этом коде и под отладкой заметил следующие...

переменные ask_enable, start_enable в методах send_codram() и start_ask() находятся там под разными адресами!!!!!

т.е. в методе send_codram() переменная start_enable находится по адресу 0х2000058С, а в start_ask() под адрессом 0х2000051С !!!

подобное поведение встречается и в других статических классах.

решается статическими переменными, но все равно такие фичи разочаровывают =(

Share this post


Link to post
Share on other sites
подобное поведение встречается и в других статических классах.
Что такое "статический класс"?

Намекаю дальше: в этих функциях адреса разные при вызове одной функции из одного файла, а другой функции из другого исходного файла?

 

но все равно такие фичи разочаровывают =(
Боюсь, в данном случае на зеркало пенять не стоит.

Share this post


Link to post
Share on other sites
Что такое "статический класс"?

Намекаю дальше: в этих функциях адреса разные при вызове одной функции из одного файла, а другой функции из другого исходного файла?

намек понял... :05:

 

Share this post


Link to post
Share on other sites

В версии 6.50.5 баг с оптимизацией вроде бы исправили.

 

 

Share this post


Link to post
Share on other sites
В версии 6.50.5 баг с оптимизацией вроде бы исправили.

Вроде-бы??? какой именно?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this