Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: проблема аллокаций структур в RAM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
proba
обьясните пожалуйста разницу в аллокации структуры в RAM. есть структура в иар 3.10 для M16C renesas:
struct mystr {
char name[16];
} ;
struct mystr user;

если пищу данные в user.name , то хранится данные там только до следующеи подпрограммы, потом только 0-и будут.
в программе точно ничто не перепишет.
по мап-е видно что структура создается в области временных переменных.

если описать структуру:

typedef struct {
char name[16];
} mystr;
mystr user;

то данные будут сохранятся.
в обеих случае struct дефинирован в main.c программе сразу после .h фаилов t.e. не в функции.
ipc
Цитата(proba @ Apr 11 2006, 12:53) *
обьясните пожалуйста разницу в аллокации структуры в RAM. есть структура в иар 3.10 для M16C renesas:
struct mystr {
char name[16];
} ;
struct mystr user;

если пищу данные в user.name , то хранится данные там только до следующеи подпрограммы, потом только 0-и будут.
в программе точно ничто не перепишет.
по мап-е видно что структура создается в области временных переменных.

если описать структуру:

typedef struct {
char name[16];
} mystr;
mystr user;

то данные будут сохранятся.
в обеих случае struct дефинирован в main.c программе сразу после .h фаилов t.e. не в функции.

С точки зрения Си приведенные примеры между собой ничем неотличаются.Только в последнем случае описывается новый структурный тип что позволяет использовать его в описании параметров функций и в конверсии типов.Посему напрашивается логичный вывод-это глюк линкера(или предусмотренная какими нибудь настройками или галочками доп возможность).
Я писал для М16 но использовал фирменный мицубишевский компилятор и линкер и таких багов точно бы непропустил.
proba
спасибо. может я что-то деисвительно не умею правильно настроить, вариант был бы через malloc резервировать память для структ. привык что для АВР такои "химии" не надо.
Кстати, а Вы исползовали FoUSB ? или др. деббагер , насколько они RAM исползуют ?
Alex11
Как-то это странно все смотрится. У нас и с IAR таких глюков не было. И, вообще, IAR понравился больше, чем фирменный. Мы на него переползли в свое время.
ipc
Цитата(proba @ Apr 12 2006, 20:29) *
спасибо. может я что-то деисвительно не умею правильно настроить, вариант был бы через malloc резервировать память для структ. привык что для АВР такои "химии" не надо.
Кстати, а Вы исползовали FoUSB ? или др. деббагер , насколько они RAM исползуют ?

Ну с динамическим выделением памяти это вобще отдельная песня.Вобщем есть мнение что для встраиваемых систем это несамое лучшее решение потому как ненадежное да и к томуже в M16 и так додури памяти по крайней мере в M16c/62 и 6N
А с FoUSB я неработал а использовал мицубишевский эмулятор.
Цитата
Как-то это странно все смотрится. У нас и с IAR таких глюков не было. И, вообще, IAR понравился больше, чем фирменный. Мы на него переползли в свое время.


Незнаю как качественные характеристики компиляторов но по удобству конечно комфортнее работать в IAR.Но я в свое время выдрал из таскинга флешлоадер и вместе с компилятором и линкером затолкал в ultraedit и получилась неплохая среда разработки.Пару довольно больших проектов удалось сварганить.
proba
оставляю пока так, как есть, хотя подозреваю что где то у меня ощибка, выделил в xcl фаиле сегмент для структур, и тоже не работало. в отношении памяти вы правы, деиствительно достаточно, если и учест что код довольно компактныи получается, тот , что на АВР 50 к, на М16 41 к стал.
есть еще вопрос, можно ли код доступа ( эти 6 баитов ключа программатора) задать в ИАРе ?
или можно код ввести только вручную модифичируя hex фаил.
ipc
Цитата(proba @ Apr 13 2006, 23:49) *
оставляю пока так, как есть, хотя подозреваю что где то у меня ощибка, выделил в xcl фаиле сегмент для структур, и тоже не работало. в отношении памяти вы правы, деиствительно достаточно, если и учест что код довольно компактныи получается, тот , что на АВР 50 к, на М16 41 к стал.
есть еще вопрос, можно ли код доступа ( эти 6 баитов ключа программатора) задать в ИАРе ?
или можно код ввести только вручную модифичируя hex фаил.


Я бы посоветовал попробовать скомпилировать этот код в фирменном компиляторе,но с другой стороны если все что написано выше действительно так и незакралась какаянибудь неточность то можно расслабица потому как стопудово в мицубишевском компиляторе таких граблей нет.
У М16 неплохая архитектура но асемблер довольно необычный(хоть и читается легко).Видимо его функцианальность выше по сравнению с АВР(а может мнемоники кароче) вот потому то размер так и ужался.
С этими кодами вопще анекдот.Когда купили первый камень чуть сразуже незапароли кристал,потому как никто неутрудился запомнить какой код был введен(а в фирменной заливалке это к тому же еще через одно место сделано),обстремались конечно по полной но героическими усилиями удалось код всетаки вспомнить.Потом перешли на флешлоадер от таскинга(который значительно удобнее) и код там вводится как руками так и передается в коммандной строке.Может в ИАРе тоже есть возможность настроить флешлоадер.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.