Перейти к содержанию
    

GCC STM32 static var

Хочу перенести проект с Keil на CooIDE+GCC

почему-то не хотят инициализироваться переменные помеченные как static

 

static int TestVar = 0;

int main(void)
{
     asm(" NOP");        <- точка останова

    //TestVar ++;

    while(1)
    {
    }
}

 

Значение переменной почти всегда мусор значения от 999 до 1М. Хотя жду что будет 0

Может кто сталкивался с такой проблемой?

 

 

Полностью проект получился такой

TestStatic.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте переменную использовать как volatile.

В данном проекте переменную вообще можно безболезненно соптимизировать) - т.е. выкинуть, и ничего не изменится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Полностью проект получился такой
Не могли бы вы в настройках проекта найти и включить генерацию листингов и .map-файла? Если галочек нет, но есть возможность вписывать ключи командной строки, то впишите в строку запуска линкера -Wl,-Map=<имя файла.map> и выложите сюда полученный файл.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте переменную использовать как volatile.

В данном проекте переменную вообще можно безболезненно соптимизировать) - т.е. выкинуть, и ничего не изменится.

 

Оптимизация отключена -O0;

Добавление volatile не помогло. Значение переменной отлично от defaul value.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может у Вас startup плохой или скрипт линкера.

Посмотрел startup - там какой-то враг все закементировал))

void Default_Reset_Handler(void)
{
  /* Initialize data and bss */
  unsigned long *pulSrc, *pulDest;

  /* Copy the data segment initializers from flash to SRAM */
//  pulSrc = &_sidata;
//
//  for(pulDest = &_sdata; pulDest < &_edata; )
//  {
//    *(pulDest++) = *(pulSrc++);
//  }
//
//  /* Zero fill the bss segment. */
//  for(pulDest = &_sbss; pulDest < &_ebss; )
//  {
//    *(pulDest++) = 0;
//  }

  /* Setup the microcontroller system. */
  SystemInit();
    
  /* Call the application's entry point.*/
  main();
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может у Вас startup плохой или скрипт линкера.

Посмотрел startup - там какой-то враг все закементировал))

 

Действительно дело было в bss

У ARM и IAR нет очиcтки bss как у GCC

 

Скачал свежий CMSIS с сайта STM них код

* @file startup_stm32l1xx_md.s

* @author MCD Application Team

* @version V1.1.1

* @date 09-March-2012

 

/* Zero fill the bss segment. */ есть

В старых версиях тоже присутствует

 

Почему-то с сайта Coocox.org

* @file startup_coide.c

* @author Coocox

* @version V1.0

* @date 20/07/2010

код обнуления bss закомментирован

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

* @file startup_coide.c

.......

код обнуления bss закомментирован

:bb-offtopic: Выглядит как палёный "abibas".

Понятно, что это сокращение от названия среды, но вот ассоциации...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

добавлю свои пять копеек.

на будующее если вылезет.

если вдруг захотите использовать С++, то в таком виде CRT как у Вас еще и конструкторы статических объектов не будут вызываться. решение - добавить в CRT код вызов __libc_init_array() если libc хоть както стандарту соответствует. так же эта мера обеспечит вызов С функций с атрибутом конструктора (это к С++ никак не отностися).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:bb-offtopic: Выглядит как палёный "abibas".

Понятно, что это сокращение от названия среды, но вот ассоциации...

 

видимо у ребят из CooCox CoIDE не работает shift :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...