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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Подскажите как IAR работает с typedef struct
west329_
сообщение Sep 30 2008, 08:53
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Ситуация такая

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

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

IAR AVR.4.21
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Sep 30 2008, 09:09
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



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

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

Если вы в процедуре создаете в стеке объекты, то после выхода их процедуры они будут автоматически уничтожены. Если создаете в куче, то уже вы сами ответственны за их удаление. Если объекты - статические переменные в функции или глобальные - они живут вечно.
Go to the top of the page
 
+Quote Post
west329_
сообщение Sep 30 2008, 09:32
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Код
/* 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;
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Sep 30 2008, 09:32
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Цитата(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, на форуме ссылок достаточно.
Go to the top of the page
 
+Quote Post
west329_
сообщение Sep 30 2008, 09:41
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



меня больше всего интересуют эти массивы

Код
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

???

Сообщение отредактировал west329_ - Sep 30 2008, 09:41
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Sep 30 2008, 09:50
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



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

Кстати, присоединяюсь к VladimirYU - может быть стоит почитать книжку по С? wink.gif
Go to the top of the page
 
+Quote Post
west329_
сообщение Sep 30 2008, 10:17
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



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

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

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

П.С.
добавте только в название разделя "для тех кто почитал С"

Сообщение отредактировал west329_ - Sep 30 2008, 10:18
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Sep 30 2008, 10:37
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



С этого в любом случае стоит начать. Книжка не толстая, зато многие вопросы исчезнут. А если останутся - по крайней мере сможете внятно их задать...
Go to the top of the page
 
+Quote Post
plombir
сообщение Oct 1 2008, 05:03
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 14-12-05
Пользователь №: 12 191



Цитата(west329_ @ Sep 30 2008, 12:53) *
Ситуация такая
...

west329_, может Вы имели ввиду не стек, а как компилятор в процедуре локально (временно) разместит большую переменную-структуру? И освободит ли он эту память после выхода из неё?
Go to the top of the page
 
+Quote Post
west329_
сообщение Oct 1 2008, 05:23
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



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


Да.
Меня смущают предупреждения IAR по достижению заполнения стека на 90%, а когда выхожу с процедуры предупреждения не пропадают, и продолжают выводится как будто стек полон ?

Сообщение отредактировал west329_ - Oct 1 2008, 05:25
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Oct 1 2008, 05:29
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



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


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

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


А указатель стека как при этом меняется? Чему он равен до входа в процедуру и чему после?
Go to the top of the page
 
+Quote Post
west329_
сообщение Oct 1 2008, 05:51
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



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


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

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

Стек по ходу программы высвобождается как я понял из окна Stack/CStack по зелёной линии, хотя предупреждения выводятся.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Oct 2 2008, 04:06
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



На этой картинке вы еще из функции не вышли... После выхода тоже выводятся ворнинги?
Go to the top of the page
 
+Quote Post
west329_
сообщение Oct 3 2008, 09:40
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



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

Да, это меня и засмущало, но зелёная линия пригнула влево до упора, что как я понял свидетельствует об очистке стека, но не факт.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Oct 3 2008, 11:15
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



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


Ну так посмотрите на значения регистров SP и Y ... Первый отвечает за стек возвратов, а второй - за стек данных. Координаты вершин стеков можно увидеть в map-файле.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 30th June 2025 - 12:12
Рейтинг@Mail.ru


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