реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> impure_data, Linaro vs CodeSourcery
IgorKossak
сообщение Jun 10 2012, 18:57
Сообщение #1


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Собрал тем и другим небольшой проект для Cortex-M3. Результат таков:
Код
CodeSourcery arm-2011.09-69-arm-none-eabi
section              size         addr
.isr_vector         0x10c    0x8000000
.text              0x37d4    0x800010c
.ARM.exidx            0x8    0x80038e0
.data                0xf8   0x20000000
.bss                0xb0c   0x200000f8
._usrstack          0x100   0x20000c04

Linaro gcc-arm-none-eabi-4_6-2012q1-20120316
section              size         addr
.isr_vector         0x10c    0x8000000
.text              0x380c    0x800010c
.ARM.exidx            0x8    0x8003918
.data               0x434   0x20000000
.bss                0xb0c   0x20000434
._usrstack          0x100   0x20000f40

Сразу обратил внимание на раздувание секции .data. Расследование показало, что это из-за массива impure_data. Почти килобайт отъело! Код не раздулся, а даже уменьшился, если учесть, что там лежат данные инициализации для всё того же impure_data.
На линаро вразумительного ответа не получил, обещали в версии 4.7 к концу года поправить. Гугление показало, что это недостаток newlib и ключами компиляции\сборки проекта делу не помочь. Похоже, что не все могут нормально библиотеку собрать, чтобы ею можно было пользоваться для контроллеров с маленькой оперативкой.
Должен сказать, что массив impure_data присутствует в обоих случаях (у меня всего одна однобайтовая обнуляемая в стартапе переменная, остальное - impure_data), но с CodeSourcery ещё можно как то жить. Результат же Linaro ни в какие ворота не лезет.
На Linaro польстился на будущее из-за наличия у них полных библиотек с аппаратной плавучкой.
Кто-нибудь сталкивался с проблемой этого пресловутого массива и как избежать его появления?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 11 2012, 07:35
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(IgorKossak @ Jun 11 2012, 00:57) *
На Linaro польстился на будущее из-за наличия у них полных библиотек с аппаратной плавучкой.

А у klen-а не полные? (У него нет массива impure_data)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 11 2012, 07:52
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (IgorKossak @ Jun 10 2012, 21:57) *
Кто-нибудь сталкивался
Сталкивался. Стараюсь избегать функций, приводящих к его появлению. Если уж без них никак - мирюсь. Помнится, в одном случае он появлялся из-за обращения к errno в одной из моих функций и тогда удалось победить объявлением своей переменной errno. С библиотечными функциями такое не прокатывает - они уже скомпилированы исходя из того, что errno член этой самой структуры impure_data.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 11 2012, 08:36
Сообщение #4


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(AHTOXA @ Jun 11 2012, 10:35) *
А у klen-а не полные? (У него нет массива impure_data)

Буду пробовать и этот вариант.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 00:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01358 секунд с 7
ELECTRONIX ©2004-2016