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

 
 
 
Reply to this topicStart new topic
> Проблема с stl в iar
juvf
сообщение May 12 2010, 11:54
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Использую компилятор icc430 для msp430. пробую стандартные шаблоны. если объявлении
Цитата
list<int> myIntList;
myIntList.push_back(43); //этот вызов работает
list<myClass> myClassList;
myClass obj;
list.push_back(obj); //в этом месте программа сваливается.

вообще при попытке вставить в контейнер list или map программа сваливается. Кто нибудь использовал стандартные шаблоны в иаре? Они в иаре рабочие? Может нужно какую нибудь опцию компилятору передать, чтоб list заработал?
Go to the top of the page
 
+Quote Post
sergeeff
сообщение May 12 2010, 15:18
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



А должно быть:

Код
list<int> myIntList;
myIntList.push_back(43); //этот вызов работает
list<myClass> myClassList;
myClass obj;
myClassList.push_back(obj);
Go to the top of the page
 
+Quote Post
juvf
сообщение May 12 2010, 16:05
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(sergeeff @ May 12 2010, 21:18) *
А должно быть:

Код
list<int> myIntList;
myIntList.push_back(43); //этот вызов работает
list<myClass> myClassList;
myClass obj;
myClassList.push_back(obj);

опечатался. тот бы код компилятор не пропустил. вообщем на myClassList.push_back(obj); программа сваливается.
Go to the top of the page
 
+Quote Post
dxp
сообщение May 13 2010, 04:21
Сообщение #4


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(juvf @ May 12 2010, 23:05) *
опечатался. тот бы код компилятор не пропустил. вообщем на myClassList.push_back(obj); программа сваливается.

STL требует работы с памятью, каждый контейнер имеет стандартный аллокатор, который обращается к менеджеру памяти с целью выделения оной под размещение объектов. Поэтому нужно проследить, что менеджер памяти имеет достаточно ресурсов для своей работы - размещена "куча" (Heap) достаточного размера. По умолчанию там у нее размер какой-то смешной - что-то порядка 16 байт. Этого хватает для одного обращения, а на втором уже облом.

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

В общем, я бы советовал подумать два раза, прежде чем браться за STL на MSP430 - немного не тот процессор, чтобы с ходу эффективно это на нем использовать. Не лишне будет рассмотреть альтернативные варианты реализации желаемой функциональности.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
juvf
сообщение May 13 2010, 17:26
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



ну примерно так оно и есть. Проследил пошагово где именно в list сваливается: на алокаторе. В чем-то я с вами согласен. Наверно придется альтернативу искать. Но
Цитата
Вообще, стандартный менеджер памяти не очень хорошо подходит под embedded - слишком он универсальный
С этим я тоже согласен, но почему стал пользовать stl - потому что коль иаровский компилятор (icc430) заточен именно под msp430, и для mps430 написан stl, и IAR декларирует нормальную работу stl - то должен быть не стандартный менеджер памяти, а менеджер памяти именно для embedded msp430. Вот в lib-avr четко прописали - с++ есть, но ограниченный: нет new, delete, и нет stl и шаблонов (по мойму этого нет тоже из-за сложностей с кучей). А тут всё есть, но не работает. ((
Go to the top of the page
 
+Quote Post
dxp
сообщение May 14 2010, 07:04
Сообщение #6


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(juvf @ May 14 2010, 00:26) *
почему стал пользовать stl - потому что коль иаровский компилятор (icc430) заточен именно под msp430, и для mps430 написан stl, и IAR декларирует нормальную работу stl - то должен быть не стандартный менеджер памяти, а менеджер памяти именно для embedded msp430. Вот в lib-avr четко прописали - с++ есть, но ограниченный: нет new, delete, и нет stl и шаблонов (по мойму этого нет тоже из-за сложностей с кучей).

Менеджер памяти не может быть как-то заточен под MSP430. Он может просто реализовывать разные стратегии, из которых одни лучше подходят для конкретной задачи, другие - хуже. С пакетом поставляется универсальный, недостатки которого перечислены выше.

Цитата(juvf @ May 14 2010, 00:26) *
А тут всё есть, но не работает. ((

Увеличьте Heap (до несколькоих сотен байт хотя бы), и ваш пример заработает.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

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

 


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


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