Перейти к содержанию
    

Освобождение ОЗУ от "условно глобальных" переменных

Доброго времени суток уважаемые форумчане!

 

По названию темы вряд ли можно понять, что мне требуется, объясню подробнее.

Есть устройство, которое работает в двух различных режимах. Оба режима очень требовательны к объему ОЗУ для размещения "условно глобальных" переменных, которые могут меняться и в прерывании и в основном цикле.

Устройство переходит из одного режима в другой по нажатию кнопки, по выставленному после нажатия флагу.

Получается, что есть два набора "условно глобальных" переменных никак не пересекающихся друг с другом, существующих только в пределах текущего режима. Каждый режим использует только свою группу переменных и не обращается ко второй группе.

Объема ОЗУ микроконтроллера не достаточно для одновременного хранения двух групп переменных.

Как реализовать на Си алгоритм при котором, при входе в один режим инициализировалась одна группа переменных, доступных как для основного цикла, так и для прерываний, а переходе во второй режим - освобождалась память, занятая предыдущей группой и инициализировалась вторая группа переменных, физически находящаяся по адресам первой группы переменных?

В программировании на Си новичек, пните пожалуйста в нужном направлении. Компилятор IAR AVR.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

программировании на Си новичек, пните пожалуйста в нужном направлении.
Вы указатели и структуры уже знаете или еще нет? Если нет, то ознакомьтесь. Очень полезные "фичи" языка Си ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

стоило написать, что я новичек, так реально пнули. :wacko:

rezident, для здешних гуру я вообще новичек, но не до такой степени... Про структуры и про указатели конечно же знаю, привык читать мануалы раньше чем вопросы задавать. Не верите, недавно я задавал вопрос про указатель на глобальную структуру в форуме Микроконтроллеры->AVR. Почитайте, если интересно. Может, что от Вас нового узнаю по той теме. Вы бы хоть вчитались в суть проблемы, прежде чем издевки писать...

 

Непомнящий Евгений, Спасибо. Не знал про функцию memset. Вопрос по вашему коду: разве при указании имени переменной данного типа (mode1, mode2) сразу после объявлении структуры, под эти переменные не выделяется память? Если да, то обе структуры будут одновременно храниться в памяти, но так они не поместятся в ОЗУ.

P.S. Все разобрался ;) union пропустил, оказывается полезняшка мне подходит:) Непомнящий Евгений, огромное спасибо)

 

rezident, вот структуры и нипричем оказались, не с той ноги чтоли встали сегодня?

Изменено пользователем ibiza11

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

разве при указании имени переменной данного типа (mode1, mode2) сразу после объявлении структуры, под эти переменные не выделяется память?
Под объединение (union) выделяется память, достаточная, чтобы разместить наибольших из своих объектов (в Вашем случае - структур). Каждый из объектов (структур) будет занимать в памяти одно и то же место (начинаться с одного адреса).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:bb-offtopic:

Извиняюсь за офтопик, но, натыкаясь на эту тему воспринимаю информацию как "Освобождение из СИЗО условно-досрочно!"

:biggrin:

 

P.S. А почему последним писателем висит rezident?

С этим разобрался. Из-за переноса темы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...