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

 
 
> Освобождение ОЗУ от "условно глобальных" переменных, для использования в другом режиме
ibiza11
сообщение Apr 7 2011, 09:04
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 13-01-09
Пользователь №: 43 304



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

По названию темы вряд ли можно понять, что мне требуется, объясню подробнее.
Есть устройство, которое работает в двух различных режимах. Оба режима очень требовательны к объему ОЗУ для размещения "условно глобальных" переменных, которые могут меняться и в прерывании и в основном цикле.
Устройство переходит из одного режима в другой по нажатию кнопки, по выставленному после нажатия флагу.
Получается, что есть два набора "условно глобальных" переменных никак не пересекающихся друг с другом, существующих только в пределах текущего режима. Каждый режим использует только свою группу переменных и не обращается ко второй группе.
Объема ОЗУ микроконтроллера не достаточно для одновременного хранения двух групп переменных.
Как реализовать на Си алгоритм при котором, при входе в один режим инициализировалась одна группа переменных, доступных как для основного цикла, так и для прерываний, а переходе во второй режим - освобождалась память, занятая предыдущей группой и инициализировалась вторая группа переменных, физически находящаяся по адресам первой группы переменных?
В программировании на Си новичек, пните пожалуйста в нужном направлении. Компилятор IAR AVR.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
Непомнящий Евген...
сообщение Apr 7 2011, 09:34
Сообщение #2


Знающий
****

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



Код
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;
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 7 2011, 10:02
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(ibiza11 @ Apr 7 2011, 15:04) *
программировании на Си новичек, пните пожалуйста в нужном направлении.
Вы указатели и структуры уже знаете или еще нет? Если нет, то ознакомьтесь. Очень полезные "фичи" языка Си wink.gif
Go to the top of the page
 
+Quote Post
ibiza11
сообщение Apr 7 2011, 12:47
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 13-01-09
Пользователь №: 43 304



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

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

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

Сообщение отредактировал ibiza11 - Apr 7 2011, 13:15
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 7 2011, 13:06
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(ibiza11 @ Apr 7 2011, 16:47) *
разве при указании имени переменной данного типа (mode1, mode2) сразу после объявлении структуры, под эти переменные не выделяется память?
Под объединение (union) выделяется память, достаточная, чтобы разместить наибольших из своих объектов (в Вашем случае - структур). Каждый из объектов (структур) будет занимать в памяти одно и то же место (начинаться с одного адреса).
Go to the top of the page
 
+Quote Post
ibiza11
сообщение Apr 7 2011, 13:14
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 13-01-09
Пользователь №: 43 304



Да, спасибо, Палыч, уже разобрался wink.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 10 2011, 14:56
Сообщение #7


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



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

P.S. А почему последним писателем висит rezident?
С этим разобрался. Из-за переноса темы.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:12
Рейтинг@Mail.ru


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