[an error occurred while processing this directive] [an error occurred while processing this directive]
Тема к обсуждению: Рацеональное использование битовых переменных в ИАР 2.26
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено alexsander 21 мая 2002 г. 13:31

Сомневаюь что я что то новое открыл,но просто мне очень обидно, я С++ скажем так не очень знаю на нем пишу токо для однокристалок и мне очень это нравится, правда относительно, до этого я писал на асме, просто красота пока программа не выходит за размер несколько килобайт там уже тяжело разбираться си++ здесь просто незаменим.Вот к чему я веду, в иаре отсутствует тип Boolean, хотя для однокристалок этот тип гаразда важне и щаще используется чем к примеру float.Помню как мне кто то советовал (здесь в конфе) ыт используй char, да можно использоввать если теебе нужен один флаг,а ели у тебя их 100 это сто байт да еще и размещенные в ОЗУ а к нему как миним 2 цикла обращение (в случае с АВР) так что это полный геморой, но можно этот флаг в зарегестрированных регистрах но их максимум 12 тоже как то маловато. Еще конечно можно применить один байт описать флаги и обращаться к ним примерно так TEMP|=(1<Всеравно как то не удобно;
Вот что я предлагаю еще ни у кого такого невидел :)

Обявляем такой тип он будет расположен в 10 регистре:

__no_init __regvar union(unsigned char REGFLAGS;strut{unsigned char F1:1,F2:1,F3:1,F4:1,F5:1,F6:1,F7:1,F8:1;};);@10 //вот мы и создали 8 флагов булевского типа.

void main (void)
{
char X,Y;
F1=0;//сбрасывает фалг
F1=1;//устанавливает флаг
if(F2)F3=F2;//проверяем флаги
// а самый шик такие Формы записи
F3=(X//а еще этот регистр флагов можно сохранить где нибудь
X=REGFLAGS;
//или записать в него
REGFLAGS=0x11//установит флаги F1 и F5
//а поповоду кода просто класс
F1=1;
F2=1;
F3=1;
F4=0;
F5=0;
F6=0;
F7=0;
F8=0;
//и все это выполнит одной командой LDI R10,0x07;
};

вобщем клево, но есть один недостаток этот тип нельзя внести в отладчике в WATCH (пробывал в C-SPY и аврстудио 3.5)




Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru