|
Подскажите как IAR работает с typedef struct |
|
|
|
Sep 30 2008, 09:09
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(west329_ @ Sep 30 2008, 12:53)  В процедуре П1 объявляется typedef struct, которая съедает стек ОЗУ на 90% контроллера (так было задуманно), typedef struct к памяти отношения вообще не имеет, ибо это объявление типа, а не определение переменной... Если вы в процедуре создаете в стеке объекты, то после выхода их процедуры они будут автоматически уничтожены. Если создаете в куче, то уже вы сами ответственны за их удаление. Если объекты - статические переменные в функции или глобальные - они живут вечно.
|
|
|
|
|
Sep 30 2008, 09:32
|
Местный
  
Группа: Свой
Сообщений: 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, на форуме ссылок достаточно.
|
|
|
|
|
Sep 30 2008, 09:41
|

Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
Sep 30 2008, 10:17
|

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

|
Цитата(Непомнящий Евгений @ Sep 30 2008, 12:50)  если они в стеке - да, см мой пост выше... Что непонятно-то?  И что значит ваша фраза "процедура, которая вызывала md5_ctx md5_struct; //md5 object" ??? Кстати, присоединяюсь к VladimirYU - может быть стоит почитать книжку по С?  Всё иду читать С  П.С. добавте только в название разделя "для тех кто почитал С"
Сообщение отредактировал west329_ - Sep 30 2008, 10:18
|
|
|
|
|
Oct 1 2008, 05:03
|
Частый гость
 
Группа: Участник
Сообщений: 99
Регистрация: 14-12-05
Пользователь №: 12 191

|
Цитата(west329_ @ Sep 30 2008, 12:53)  Ситуация такая ... west329_, может Вы имели ввиду не стек, а как компилятор в процедуре локально (временно) разместит большую переменную-структуру? И освободит ли он эту память после выхода из неё?
|
|
|
|
|
Oct 1 2008, 05:23
|

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

|
Цитата(plombir @ Oct 1 2008, 08:03)  west329_, может Вы имели ввиду не стек, а как компилятор в процедуре локально (временно) разместит большую переменную-структуру? И освободит ли он эту память после выхода из неё? Да. Меня смущают предупреждения IAR по достижению заполнения стека на 90%, а когда выхожу с процедуры предупреждения не пропадают, и продолжают выводится как будто стек полон ?
Сообщение отредактировал west329_ - Oct 1 2008, 05:25
|
|
|
|
|
Oct 1 2008, 05:29
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(plombir @ Oct 1 2008, 09:03)  west329_, может Вы имели ввиду не стек, а как компилятор в процедуре локально (временно) разместит большую переменную-структуру? И освободит ли он эту память после выхода из неё? А разве компилятор локально (временно) размещает объекты где-то еще помимо стека??? Цитата(west329_ @ Oct 1 2008, 09:23)  Меня смущают предупреждения IAR по достижению заполнения стека на 90%, а когда выхожу с процедуры предупреждения не пропадают, и продолжают выводится как будто стек полон ? А указатель стека как при этом меняется? Чему он равен до входа в процедуру и чему после?
|
|
|
|
|
Oct 1 2008, 05:51
|

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

|
Цитата(Непомнящий Евгений @ Oct 1 2008, 08:29)  А разве компилятор локально (временно) размещает объекты где-то еще помимо стека??? А указатель стека как при этом меняется? Чему он равен до входа в процедуру и чему после? Вы все правильно говорите. Я вобще симулятором ИАР не часто пользуюсь. Стек по ходу программы высвобождается как я понял из окна Stack/CStack по зелёной линии, хотя предупреждения выводятся.
Эскизы прикрепленных изображений
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|