west329 0 30 сентября, 2008 Опубликовано 30 сентября, 2008 · Жалоба Ситуация такая Во время выполнения программы (номинальная загрузка стека ОЗУ 10% свободно 90%) вызывается некоторая процедура пусть П1. В процедуре П1 объявляется typedef struct, которая съедает стек ОЗУ на 90% контроллера (так было задуманно), выполняется нужные действия, данные выводятся, и осуществляется выход с процедуры П1. Такой вопрос а как поступит компилятор IAR с ОЗУ когда выйдет с процедуры П1, вернёт обратно стек к 10%, или стуктура останится висеть в ОЗУ контроллера и останится свободно 100-90=10% ОЗУ ??? IAR AVR.4.21 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 30 сентября, 2008 Опубликовано 30 сентября, 2008 · Жалоба В процедуре П1 объявляется typedef struct, которая съедает стек ОЗУ на 90% контроллера (так было задуманно), typedef struct к памяти отношения вообще не имеет, ибо это объявление типа, а не определение переменной... Если вы в процедуре создаете в стеке объекты, то после выхода их процедуры они будут автоматически уничтожены. Если создаете в куче, то уже вы сами ответственны за их удаление. Если объекты - статические переменные в функции или глобальные - они живут вечно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
west329 0 30 сентября, 2008 Опубликовано 30 сентября, 2008 · Жалоба /* 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 0 30 сентября, 2008 Опубликовано 30 сентября, 2008 · Жалоба Ситуация такая Во время выполнения программы (номинальная загрузка стека ОЗУ 10% свободно 90%) вызывается некоторая процедура пусть П1. В процедуре П1 объявляется typedef struct, которая съедает стек ОЗУ на 90% контроллера (так было задуманно), выполняется нужные действия, данные выводятся, и осуществляется выход с процедуры П1. Такой вопрос а как поступит компилятор IAR с ОЗУ когда выйдет с процедуры П1, вернёт обратно стек к 10%, или стуктура останится висеть в ОЗУ контроллера и останится свободно 100-90=10% ОЗУ ??? IAR AVR.4.21 Это вопрос не к IAR, а ответ K&R, на форуме ссылок достаточно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
west329 0 30 сентября, 2008 Опубликовано 30 сентября, 2008 (изменено) · Жалоба меня больше всего интересуют эти массивы 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 ??? Изменено 30 сентября, 2008 пользователем west329_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 30 сентября, 2008 Опубликовано 30 сентября, 2008 · Жалоба если они в стеке - да, см мой пост выше... Что непонятно-то? :) И что значит ваша фраза "процедура, которая вызывала md5_ctx md5_struct; //md5 object" ??? Кстати, присоединяюсь к VladimirYU - может быть стоит почитать книжку по С? ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
west329 0 30 сентября, 2008 Опубликовано 30 сентября, 2008 (изменено) · Жалоба если они в стеке - да, см мой пост выше... Что непонятно-то? :) И что значит ваша фраза "процедура, которая вызывала md5_ctx md5_struct; //md5 object" ??? Кстати, присоединяюсь к VladimirYU - может быть стоит почитать книжку по С? ;) Всё иду читать С :) П.С. добавте только в название разделя "для тех кто почитал С" Изменено 30 сентября, 2008 пользователем west329_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 30 сентября, 2008 Опубликовано 30 сентября, 2008 · Жалоба С этого в любом случае стоит начать. Книжка не толстая, зато многие вопросы исчезнут. А если останутся - по крайней мере сможете внятно их задать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
plombir 0 1 октября, 2008 Опубликовано 1 октября, 2008 · Жалоба Ситуация такая ... west329_, может Вы имели ввиду не стек, а как компилятор в процедуре локально (временно) разместит большую переменную-структуру? И освободит ли он эту память после выхода из неё? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
west329 0 1 октября, 2008 Опубликовано 1 октября, 2008 (изменено) · Жалоба west329_, может Вы имели ввиду не стек, а как компилятор в процедуре локально (временно) разместит большую переменную-структуру? И освободит ли он эту память после выхода из неё? Да. Меня смущают предупреждения IAR по достижению заполнения стека на 90%, а когда выхожу с процедуры предупреждения не пропадают, и продолжают выводится как будто стек полон ? Изменено 1 октября, 2008 пользователем west329_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 1 октября, 2008 Опубликовано 1 октября, 2008 · Жалоба west329_, может Вы имели ввиду не стек, а как компилятор в процедуре локально (временно) разместит большую переменную-структуру? И освободит ли он эту память после выхода из неё? А разве компилятор локально (временно) размещает объекты где-то еще помимо стека??? Меня смущают предупреждения IAR по достижению заполнения стека на 90%, а когда выхожу с процедуры предупреждения не пропадают, и продолжают выводится как будто стек полон ? А указатель стека как при этом меняется? Чему он равен до входа в процедуру и чему после? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
west329 0 1 октября, 2008 Опубликовано 1 октября, 2008 · Жалоба А разве компилятор локально (временно) размещает объекты где-то еще помимо стека??? А указатель стека как при этом меняется? Чему он равен до входа в процедуру и чему после? Вы все правильно говорите. Я вобще симулятором ИАР не часто пользуюсь. Стек по ходу программы высвобождается как я понял из окна Stack/CStack по зелёной линии, хотя предупреждения выводятся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 2 октября, 2008 Опубликовано 2 октября, 2008 · Жалоба На этой картинке вы еще из функции не вышли... После выхода тоже выводятся ворнинги? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
west329 0 3 октября, 2008 Опубликовано 3 октября, 2008 · Жалоба На этой картинке вы еще из функции не вышли... После выхода тоже выводятся ворнинги? Да, это меня и засмущало, но зелёная линия пригнула влево до упора, что как я понял свидетельствует об очистке стека, но не факт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 3 октября, 2008 Опубликовано 3 октября, 2008 · Жалоба зелёная линия пригнула влево до упора, что как я понял свидетельствует об очистке стека, но не факт. Ну так посмотрите на значения регистров SP и Y ... Первый отвечает за стек возвратов, а второй - за стек данных. Координаты вершин стеков можно увидеть в map-файле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться