Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 25.02.2008, 23:37  
arkbox
Временная регистрация
 
Регистрация: 05.06.2005
Сообщений: 84
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
arkbox на пути к лучшему
По умолчанию

Сообщение от urry1
cтоп, мухи отдельно, котлеты отдельно... Битовые переменные, которые можно объявить в хайтеке - исключение, а не правило среди "мелких" компиляторов. Поэтому в этом вопросе вообще не фиг на Хайтек ориентироваться.Если хочешь свой код портировать потом на другие платформы. Существуют 2 метода разложения байтов на биты - представить байт в виде структуры из 8 бит или через столь нелюбимое биттест - битклир...Нужно флаг встроенного регистра проверить - открываем н файл камня и смотрим, как он правильно называется... Вот по имени и обращаемся, компилятор поймет. Только свой флаг нужно объявлять, а остальные уже объявлены.
надо запомнить, не используйте встроенные функции, если хотите портировать код на другие платформы! Но кстати по этой же причине лучше не испльзовать собственные делейки С18, они тоже ни где больше работать не будут, хотя работают точно!
Реклама:
arkbox вне форума  
Непрочитано 25.02.2008, 23:41  
arkbox
Временная регистрация
 
Регистрация: 05.06.2005
Сообщений: 84
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
arkbox на пути к лучшему
По умолчанию

Сообщение от alkl
Сообщение от arkbox
есть такая опция, присваивания адреса каждому биту.
Но сдесь тоже явно адрес указываешь. А мы говорим о динамическом номере бита.
нет, я динамически передаю адрес бита в функцию, и она на основе встроенных функций тестирует этот бит.
arkbox вне форума  
Непрочитано 25.02.2008, 23:48  
alkl
Временная регистрация
 
Регистрация: 14.04.2007
Сообщений: 65
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alkl на пути к лучшему
По умолчанию

Сообщение от arkbox
нет, я динамически передаю адрес бита в функцию, и она на основе встроенных функций тестирует этот бит.
Значит твоя проблема решена ?
alkl вне форума  
Непрочитано 26.02.2008, 02:20  
arkbox
Временная регистрация
 
Регистрация: 05.06.2005
Сообщений: 84
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
arkbox на пути к лучшему
По умолчанию

Сообщение от alkl
Сообщение от arkbox
нет, я динамически передаю адрес бита в функцию, и она на основе встроенных функций тестирует этот бит.
Значит твоя проблема решена ?
в рамках компайлера Хайтек и ССц встроенными функциями, а в моем случае не так, а сишными, длинными, но зато стандартными. И не проблема это оказывается а просто отсуцствие опыта, вот как с описанием битов, тоже маразм какой то...
arkbox вне форума  
Непрочитано 26.02.2008, 11:29  
alkl
Временная регистрация
 
Регистрация: 14.04.2007
Сообщений: 65
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alkl на пути к лучшему
По умолчанию

А вот структура :

struct {
unsigned lo : 1;
unsigned dummy : 6;
unsigned hi : 1;
} foo;

Инициализированная структура :

struct {
unsigned lo : 1;
unsigned mid : 6;
unsigned hi : 1;
} foo = {1, 8, 0};

циферка после двоеточия обозначает кол занимаемых бит в байте. Заместо unsigned можно писать любые типы. В данном случае это БИТ.

Обращение :
foo.lo = 0 ;
foo.mid = 0b110011 ;
foo.hi = 1;
или
if (foo.hi)
if (foo.mid == 0b110011)
if (foo.lo)
alkl вне форума  
Непрочитано 26.02.2008, 12:15  
alkl
Временная регистрация
 
Регистрация: 14.04.2007
Сообщений: 65
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alkl на пути к лучшему
По умолчанию

Вот ещё примерчик проверки бита.

unsigned char arr[] = {1,2,4,8,16,32,64,128};
char verbit(char adr ,char numbit )
{
return ( adr & arr[numbit] ) ;
}

Выполняется примерно в два раза быстрей чем BITTST.
alkl вне форума  
Непрочитано 26.02.2008, 13:55  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Сообщение от alkl

Выполняется примерно в два раза быстрей чем BITTST.
Код:
71:                	  	BITSET(status1_,rl);//устанавливаем срабатывание реле в статусе
   02C    1523     BSF 0x23, 0x2
72:                		if(BITTST1(status1_,rl))
   02D    1D23     BTFSS 0x23, 0x2
   02E    2833     GOTO 0x33
73:                		{
74:                	  	svet=1;
   02F    1606     BSF 0x6, 0x4
75:                		}
urry вне форума  
Непрочитано 26.02.2008, 14:13  
alkl
Временная регистрация
 
Регистрация: 14.04.2007
Сообщений: 65
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alkl на пути к лучшему
По умолчанию

Сообщение от "urry
Код:
71:                	  	BITSET(status1_,rl);//устанавливаем срабатывание реле в статусе
   02C    1523     BSF 0x23, 0x2
72:                		if(BITTST1(status1_,rl))
   02D    1D23     BTFSS 0x23, 0x2
   02E    2833     GOTO 0x33
73:                		{
74:                	  	svet=1;
   02F    1606     BSF 0x6, 0x4
75:                		}
У тебя явно укозан номер бита "0x2" , а подразумивается что номер заранее неизвестен.
Читай выше... .
alkl вне форума  
Непрочитано 26.02.2008, 14:14  
arkbox
Временная регистрация
 
Регистрация: 05.06.2005
Сообщений: 84
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
arkbox на пути к лучшему
По умолчанию

Сообщение от urry
Сообщение от alkl

Выполняется примерно в два раза быстрей чем BITTST.
Код:
71:                	  	BITSET(status1_,rl);//устанавливаем срабатывание реле в статусе
   02C    1523     BSF 0x23, 0x2
72:                		if(BITTST1(status1_,rl))
   02D    1D23     BTFSS 0x23, 0x2
   02E    2833     GOTO 0x33
73:                		{
74:                	  	svet=1;
   02F    1606     BSF 0x6, 0x4
75:                		}
Этого просто не может быть! ты же сам писал:
#define BITSET(var,bitno) ((var) |= 1 ‹‹(bitno))
как он может вместо двух сдвигов по номеру бита просто вписать порядковый номер в команду BTFSS?
Видимо это умный компайлер умеет так оптимизировать, посмотрел что номер бита постоянный и заменил дефайн на прямую проверку бита. А что если теперь тоже самое попробовать с передачей в функцию номера бита, причем не одного возможного а нескольких?
arkbox вне форума  
Непрочитано 26.02.2008, 14:24  
alkl
Временная регистрация
 
Регистрация: 14.04.2007
Сообщений: 65
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alkl на пути к лучшему
По умолчанию

Сообщение от arkbox
А что если теперь тоже самое попробовать с передачей в функцию номера бита, причем не одного возможного а нескольких?
Ну и ни чего у тебя не получится.
Как он будет знать какой бит ему вставить в BTFSS, если его номер не известен. Для этого и создаются эти макросы, чтобы определять бит заранее неизвестный.
А если он известен, то и макросов ни каких не надо, сделал лог. И , и все в поряде, один машинный цикл.
alkl вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать данные через модем roog Автоматика и аппаратура связи 4 08.02.2009 02:56
как написать макрос-функцию в Си Winavr serb-radio Микроконтроллеры, АЦП, память и т.д 7 30.09.2008 11:08
Как можно передать без ПК Magic Packet на порт сетевухи? kramolnic Микроконтроллеры, АЦП, память и т.д 2 04.06.2008 07:16
Как передать с МК н Комп. Данные со скоростью 52 мБит!? expolit Микроконтроллеры, АЦП, память и т.д 41 07.01.2008 22:34
Знатоки Си, помогите: Как обьявить функцию? Hoksmur Микроконтроллеры, АЦП, память и т.д 4 09.10.2007 19:36


Часовой пояс GMT +4, время: 06:16.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot