Dave Owen 0 9 мая, 2014 Опубликовано 9 мая, 2014 · Жалоба Хочу перенести проект с Keil на CooIDE+GCC почему-то не хотят инициализироваться переменные помеченные как static static int TestVar = 0; int main(void) { asm(" NOP"); <- точка останова //TestVar ++; while(1) { } } Значение переменной почти всегда мусор значения от 999 до 1М. Хотя жду что будет 0 Может кто сталкивался с такой проблемой? Полностью проект получился такой TestStatic.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 10 10 мая, 2014 Опубликовано 10 мая, 2014 · Жалоба Попробуйте переменную использовать как volatile. В данном проекте переменную вообще можно безболезненно соптимизировать) - т.е. выкинуть, и ничего не изменится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 10 мая, 2014 Опубликовано 10 мая, 2014 · Жалоба Полностью проект получился такойНе могли бы вы в настройках проекта найти и включить генерацию листингов и .map-файла? Если галочек нет, но есть возможность вписывать ключи командной строки, то впишите в строку запуска линкера -Wl,-Map=<имя файла.map> и выложите сюда полученный файл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dave Owen 0 10 мая, 2014 Опубликовано 10 мая, 2014 · Жалоба Попробуйте переменную использовать как volatile. В данном проекте переменную вообще можно безболезненно соптимизировать) - т.е. выкинуть, и ничего не изменится. Оптимизация отключена -O0; Добавление volatile не помогло. Значение переменной отлично от defaul value. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 10 10 мая, 2014 Опубликовано 10 мая, 2014 · Жалоба Может у Вас 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(); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dave Owen 0 10 мая, 2014 Опубликовано 10 мая, 2014 · Жалоба Может у Вас 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 закомментирован Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petka 0 12 мая, 2014 Опубликовано 12 мая, 2014 · Жалоба * @file startup_coide.c ....... код обнуления bss закомментирован :bb-offtopic: Выглядит как палёный "abibas". Понятно, что это сокращение от названия среды, но вот ассоциации... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 12 мая, 2014 Опубликовано 12 мая, 2014 · Жалоба добавлю свои пять копеек. на будующее если вылезет. если вдруг захотите использовать С++, то в таком виде CRT как у Вас еще и конструкторы статических объектов не будут вызываться. решение - добавить в CRT код вызов __libc_init_array() если libc хоть както стандарту соответствует. так же эта мера обеспечит вызов С функций с атрибутом конструктора (это к С++ никак не отностися). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dave Owen 0 12 мая, 2014 Опубликовано 12 мая, 2014 · Жалоба :bb-offtopic: Выглядит как палёный "abibas". Понятно, что это сокращение от названия среды, но вот ассоциации... видимо у ребят из CooCox CoIDE не работает shift Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться