Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подскажите как IAR работает с typedef struct
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
west329_
Ситуация такая

Во время выполнения программы (номинальная загрузка стека ОЗУ 10% свободно 90%) вызывается некоторая процедура пусть П1. В процедуре П1 объявляется typedef struct, которая съедает стек ОЗУ на 90% контроллера (так было задуманно), выполняется нужные действия, данные выводятся, и осуществляется выход с процедуры П1.

Такой вопрос а как поступит компилятор IAR с ОЗУ когда выйдет с процедуры П1, вернёт обратно стек к 10%, или стуктура останится висеть в ОЗУ контроллера и останится свободно 100-90=10% ОЗУ ???

IAR AVR.4.21
Непомнящий Евгений
Цитата(west329_ @ Sep 30 2008, 12:53) *
В процедуре П1 объявляется typedef struct, которая съедает стек ОЗУ на 90% контроллера (так было задуманно),

typedef struct к памяти отношения вообще не имеет, ибо это объявление типа, а не определение переменной...

Если вы в процедуре создаете в стеке объекты, то после выхода их процедуры они будут автоматически уничтожены. Если создаете в куче, то уже вы сами ответственны за их удаление. Если объекты - статические переменные в функции или глобальные - они живут вечно.
west329_
Код
/* MD5 context. */
typedef unsigned char      uint8;
typedef unsigned long      uint32;


typedef struct {
        uint32 state[4];    // state (ABCD)                          
        uint32 count[2];    // number of bits, modulo 2^64 (lsb first)
        uint8  buffer[64];  // input buffer                            
      } md5_ctx;
VladimirYU
Цитата(west329_ @ Sep 30 2008, 12:53) *
Ситуация такая

Во время выполнения программы (номинальная загрузка стека ОЗУ 10% свободно 90%) вызывается некоторая процедура пусть П1. В процедуре П1 объявляется typedef struct, которая съедает стек ОЗУ на 90% контроллера (так было задуманно), выполняется нужные действия, данные выводятся, и осуществляется выход с процедуры П1.

Такой вопрос а как поступит компилятор IAR с ОЗУ когда выйдет с процедуры П1, вернёт обратно стек к 10%, или стуктура останится висеть в ОЗУ контроллера и останится свободно 100-90=10% ОЗУ ???

IAR AVR.4.21

Это вопрос не к IAR, а ответ K&R, на форуме ссылок достаточно.
west329_
меня больше всего интересуют эти массивы

Код
uint32 state[4];    // state (ABCD)                          
         uint32 count[2];    // number of bits, modulo 2^64 (lsb first)
         uint8  buffer[64];  // input buffer


они пропадут когда я выйду с процедуры которая вызывала
Код
md5_ctx md5_struct;  //md5 object

???
Непомнящий Евгений
если они в стеке - да, см мой пост выше... Что непонятно-то? smile.gif
И что значит ваша фраза "процедура, которая вызывала md5_ctx md5_struct; //md5 object" ???

Кстати, присоединяюсь к VladimirYU - может быть стоит почитать книжку по С? wink.gif
west329_
Цитата(Непомнящий Евгений @ Sep 30 2008, 12:50) *
если они в стеке - да, см мой пост выше... Что непонятно-то? smile.gif
И что значит ваша фраза "процедура, которая вызывала md5_ctx md5_struct; //md5 object" ???

Кстати, присоединяюсь к VladimirYU - может быть стоит почитать книжку по С? wink.gif

Всё иду читать С smile.gif

П.С.
добавте только в название разделя "для тех кто почитал С"
Непомнящий Евгений
С этого в любом случае стоит начать. Книжка не толстая, зато многие вопросы исчезнут. А если останутся - по крайней мере сможете внятно их задать...
plombir
Цитата(west329_ @ Sep 30 2008, 12:53) *
Ситуация такая
...

west329_, может Вы имели ввиду не стек, а как компилятор в процедуре локально (временно) разместит большую переменную-структуру? И освободит ли он эту память после выхода из неё?
west329_
Цитата(plombir @ Oct 1 2008, 08:03) *
west329_, может Вы имели ввиду не стек, а как компилятор в процедуре локально (временно) разместит большую переменную-структуру? И освободит ли он эту память после выхода из неё?


Да.
Меня смущают предупреждения IAR по достижению заполнения стека на 90%, а когда выхожу с процедуры предупреждения не пропадают, и продолжают выводится как будто стек полон ?
Непомнящий Евгений
Цитата(plombir @ Oct 1 2008, 09:03) *
west329_, может Вы имели ввиду не стек, а как компилятор в процедуре локально (временно) разместит большую переменную-структуру? И освободит ли он эту память после выхода из неё?


А разве компилятор локально (временно) размещает объекты где-то еще помимо стека???

Цитата(west329_ @ Oct 1 2008, 09:23) *
Меня смущают предупреждения IAR по достижению заполнения стека на 90%, а когда выхожу с процедуры предупреждения не пропадают, и продолжают выводится как будто стек полон ?


А указатель стека как при этом меняется? Чему он равен до входа в процедуру и чему после?
west329_
Цитата(Непомнящий Евгений @ Oct 1 2008, 08:29) *
А разве компилятор локально (временно) размещает объекты где-то еще помимо стека???
А указатель стека как при этом меняется? Чему он равен до входа в процедуру и чему после?


Вы все правильно говорите.

Я вобще симулятором ИАР не часто пользуюсь.

Стек по ходу программы высвобождается как я понял из окна Stack/CStack по зелёной линии, хотя предупреждения выводятся.
Непомнящий Евгений
На этой картинке вы еще из функции не вышли... После выхода тоже выводятся ворнинги?
west329_
Цитата(Непомнящий Евгений @ Oct 2 2008, 07:06) *
На этой картинке вы еще из функции не вышли... После выхода тоже выводятся ворнинги?

Да, это меня и засмущало, но зелёная линия пригнула влево до упора, что как я понял свидетельствует об очистке стека, но не факт.
Непомнящий Евгений
Цитата(west329_ @ Oct 3 2008, 13:40) *
зелёная линия пригнула влево до упора, что как я понял свидетельствует об очистке стека, но не факт.


Ну так посмотрите на значения регистров SP и Y ... Первый отвечает за стек возвратов, а второй - за стек данных. Координаты вершин стеков можно увидеть в map-файле.
hainiken
Цитата(west329_ @ Oct 1 2008, 09:23) *
Меня смущают предупреждения IAR по достижению заполнения стека на 90%

Этот порог вроде в настройках можно менять.

А что конкретно делает компилятор видно В asm ЛИСТИНГЕ ! в нем ни чего не утаишь.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.