ibiza11 0 7 апреля, 2011 Опубликовано 7 апреля, 2011 · Жалоба Доброго времени суток уважаемые форумчане! По названию темы вряд ли можно понять, что мне требуется, объясню подробнее. Есть устройство, которое работает в двух различных режимах. Оба режима очень требовательны к объему ОЗУ для размещения "условно глобальных" переменных, которые могут меняться и в прерывании и в основном цикле. Устройство переходит из одного режима в другой по нажатию кнопки, по выставленному после нажатия флагу. Получается, что есть два набора "условно глобальных" переменных никак не пересекающихся друг с другом, существующих только в пределах текущего режима. Каждый режим использует только свою группу переменных и не обращается ко второй группе. Объема ОЗУ микроконтроллера не достаточно для одновременного хранения двух групп переменных. Как реализовать на Си алгоритм при котором, при входе в один режим инициализировалась одна группа переменных, доступных как для основного цикла, так и для прерываний, а переходе во второй режим - освобождалась память, занятая предыдущей группой и инициализировалась вторая группа переменных, физически находящаяся по адресам первой группы переменных? В программировании на Си новичек, пните пожалуйста в нужном направлении. Компилятор IAR AVR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 7 апреля, 2011 Опубликовано 7 апреля, 2011 · Жалоба union { struct { int a, b, c; } mode1; struct { int a; double b; } mode2; } global; void switchMode() { memset(&global, 0, sizeof(global)); } global.mode1.a = 10; switchMode(); gloal.mode2.b = 10.5; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 7 апреля, 2011 Опубликовано 7 апреля, 2011 · Жалоба программировании на Си новичек, пните пожалуйста в нужном направлении.Вы указатели и структуры уже знаете или еще нет? Если нет, то ознакомьтесь. Очень полезные "фичи" языка Си ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ibiza11 0 7 апреля, 2011 Опубликовано 7 апреля, 2011 (изменено) · Жалоба стоило написать, что я новичек, так реально пнули. rezident, для здешних гуру я вообще новичек, но не до такой степени... Про структуры и про указатели конечно же знаю, привык читать мануалы раньше чем вопросы задавать. Не верите, недавно я задавал вопрос про указатель на глобальную структуру в форуме Микроконтроллеры->AVR. Почитайте, если интересно. Может, что от Вас нового узнаю по той теме. Вы бы хоть вчитались в суть проблемы, прежде чем издевки писать... Непомнящий Евгений, Спасибо. Не знал про функцию memset. Вопрос по вашему коду: разве при указании имени переменной данного типа (mode1, mode2) сразу после объявлении структуры, под эти переменные не выделяется память? Если да, то обе структуры будут одновременно храниться в памяти, но так они не поместятся в ОЗУ. P.S. Все разобрался ;) union пропустил, оказывается полезняшка мне подходит:) Непомнящий Евгений, огромное спасибо) rezident, вот структуры и нипричем оказались, не с той ноги чтоли встали сегодня? Изменено 7 апреля, 2011 пользователем ibiza11 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 7 апреля, 2011 Опубликовано 7 апреля, 2011 · Жалоба разве при указании имени переменной данного типа (mode1, mode2) сразу после объявлении структуры, под эти переменные не выделяется память?Под объединение (union) выделяется память, достаточная, чтобы разместить наибольших из своих объектов (в Вашем случае - структур). Каждый из объектов (структур) будет занимать в памяти одно и то же место (начинаться с одного адреса). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ibiza11 0 7 апреля, 2011 Опубликовано 7 апреля, 2011 · Жалоба Да, спасибо, Палыч, уже разобрался ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 10 апреля, 2011 Опубликовано 10 апреля, 2011 · Жалоба :bb-offtopic: Извиняюсь за офтопик, но, натыкаясь на эту тему воспринимаю информацию как "Освобождение из СИЗО условно-досрочно!" P.S. А почему последним писателем висит rezident? С этим разобрался. Из-за переноса темы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться