Страница 497 из 628
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт апр 10, 2014 22:12:48
FreshMan
ARV писал(а):мда... такого я от вас не ожидал
ну насчет задымится то я пошутил
так шо можна под переменную выделить байт и инкриментировать ее до БЕСКОНЕЧНОСТИ не опасаясь за "рассудок" МК ?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт апр 10, 2014 22:16:00
ARV
FreshMan писал(а):так шо можна под переменную выделить байт и инкриментировать ее до БЕСКОНЕЧНОСТИ ?
нет, до бесконечности нельзя: ученые считают, что вселенная просуществует еще несколько миллиардов лет, после чего снова "схлопнется"...
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт апр 11, 2014 10:13:24
oleg63m
ARV писал(а):после чего снова "схлопнется"...
Бляха муха, хорошо что сказал, надо будет микроконтроллеров накупить, ато потом где брать то будем?

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт апр 11, 2014 10:44:24
Engineer_Keen
Хрен знает как это на Си будет выглядеть, но можно так:
Код: Выделить всё
COM flag
SUB x,flag ;результат 0 1 1 2 2 3 3..., если flag инициализировать 0, и 0 0 1 1 2 2 3 3..., если флаг инициализировать числом 255
[далее проверка что x>=6]
Зато всегда за 2 такта выполняется

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт апр 11, 2014 21:19:53
FreshMan
ARV писал(а):мда... такого я от вас не ожидал
в принципе, если вас что-то смущает, можно поступить иначе:
так тоже будет правильно ?
а есть ли эллегантное решение когда надобно пропустить N переполнений ?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт апр 11, 2014 21:28:15
ARV
FreshMan писал(а):так тоже будет правильно ?
так будет правильно только в том случае, если flag был проинициализирован значением 0 или 1. если вдруг там было, например, 2, то работать не будет. я обычно переменную с именем flag использую для хранения до 8 независимых флагов - в целях экономии ОЗУ
элегантных решений на все случаи жизни не придумаешь. вполне можно пропускать число прогонов, кратное любой степени 2:
это будет пропускать 8 итераций, а затем 8 раз подряд инкрементировать х... ну и аналогично можно разные варианты подобрать. все это может выродиться и в предложенный вами вариант:
Код: Выделить всё
#define SKIP_CNT 10
static uint8_t flag = SKIP_CNT;
if(!--flag){
flag = SКIP_CNT;
x++;
}
так будет инкремент на каждый SKIP_CNT-ый прогон. для программного счета времени я такое частенько использую
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт апр 11, 2014 23:57:13
FreshMan
ARV писал(а):я обычно переменную с именем flag использую для хранения до 8 независимых флагов - в целях экономии ОЗУ
спасибо за подсказку, я доселе использую для каждого флага по 1 байту
понял что это в корни не правильно
допустим я обявил переменную flag
как каждому биту данной переменной назначить свое имя ?
как, в зависимости от событий в программе, сбрасывать или устанавливать эти флажки ?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб апр 12, 2014 00:09:26
Alexeyslav
Логическими операциями. Забиндить такие операции на удобные дефайны и использовать.
А для ассемблера есть такой флаг T - через него удобно ветвится и проверять(BST)/устанавливать(BLD) флаги в регистрах. Для флагов делаешь удобные дефайны которые привязывают номер бита к имени и все. Правда, флаги от разных переменных могут путаться друг с другом поэтому надо следить в оба чтобы имена флагов использовались строго с именами переменных, понятно что для этого надо будет включить в имя флага имя переменной.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб апр 12, 2014 04:54:34
Аlex
FreshMan писал(а):допустим я обявил переменную flag
как каждому биту данной переменной назначить свое имя ?
как, в зависимости от событий в программе, сбрасывать или устанавливать эти флажки ?
Битовые поля Вам в помощь.
Нельзя назначить имя отдельному биту в переменной и работать с ним через это имя. Отдельный бит можно только сбрасывать, устанавливать и проверять на 0/1, логическими операциями, что собственно сказано постом выше.
Можно, конечно, извернуться через структуры, указатели на них, дефайны, ... но оно того не стоит. Применение битовых полей и лог. операций достаточно для большинства задач.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб апр 12, 2014 07:35:29
КРАМ
Аlex писал(а):
Нельзя назначить имя отдельному биту в переменной и работать с ним через это имя.
Строго говоря, можно.
Если архитектура допускает прямую адресацию битов.
В ARM Cortex-M это возможно.
И не только возможно, но и единственно возможно. Его система команд вообще не имеет битовых операций.
Несмотря на то, что для доступа к биту в Си для АРМ применяют структуры, вполне можно и без структуры вычислить указатель на бит...
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб апр 12, 2014 08:01:46
ARV
КРАМ писал(а):Аlex писал(а):
Нельзя назначить имя отдельному биту в переменной и работать с ним через это имя.
Строго говоря, можно.
Если архитектура допускает прямую адресацию битов.
В ARM Cortex-M это возможно.
новое - хорошо забытое старое. прямая адресация битов была доступна еще в древнем MCS-51

жаль, косвенной не было...
FreshMan, вам верно посоветовали посмотреть в сторону битовых полей, но я дополню, что реализация доступа к битовым полям шире 1 бита может реализовываться компилятором с довольно большой избыточностью в коде, поэтому я бы не рекомендовал использовать битовые поля при острой нехватке памяти.
для однобитовых флагов вполне достаточно обычных битовых операций, они уж точно хорошо оптимизируются компиляторами.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб апр 12, 2014 09:34:36
FreshMan
Аlex писал(а):Нельзя назначить имя отдельному биту в переменной и работать с ним через это имя.
а как же это сделали разработчики "пресловутого" CodeVision ?
ведь в оной IDE допустима запись PORTB.5=1;
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб апр 12, 2014 10:12:54
oleg110592
а как же это сделали разработчики...
PORTB не переменная а I/O register
The bit level access to the I/O registers can be also accomplished by using bit selectors appended after the name of the I/O register.
Because bit level access to I/O registers is done using the CBI, SBI, SBIC and SBIS instructions, the register address must be in the 0 to 1Fh range for sfrb and in the 0 to 1Eh range for sfrw.
на порту F в меге128 не работает:
Note: Bit selector access to I/O registers located in internal RAM above address 5Fh (like PORTF for the ATmega128 for example) will not work, because the CBI, SBI, SBIC and SBIS instructions can't be used for RAM access.
есть в CV хидер iobits.h там макросы для работы с битами:
SETBIT(port,b) - sets bit b of port to logic 1 state, CLRBIT(port,b) - sets bit b of port to logic 0 state и т.д.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб апр 12, 2014 10:16:38
Аlex
FreshMan писал(а):а как же это сделали разработчики "пресловутого" CodeVision ?
ведь в оной IDE допустима запись PORTB.5=1;
Ну взяли и добавили в свой компилятор фишку, для доступа к отдельным битам регистров порта. Это всё "сладости" компиляторов, и к языку программирования не имеют никакого отношения.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб апр 12, 2014 10:26:48
ARV
Аlex писал(а):Ну взяли и добавили в свой компилятор фишку, для доступа к отдельным битам регистров порта. Это всё "сладости" компиляторов, и к языку программирования не имеют никакого отношения.
более того, эта сладость ни каким образом стандарту Си не соответствует!
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб апр 12, 2014 12:55:51
КРАМ
ARV писал(а):прямая адресация битов была доступна еще в древнем MCS-51

жаль, косвенной не было...
Можно поподробнее?
Каким образом может быть прямая адресация и отсутствовать косвенная? Разве шине адреса есть какое то дело до того, кто выставит на ней код?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб апр 12, 2014 15:07:01
ARV
для поподробнее вам бы к докам обратиться... в MCS-51 часть ячеек ОЗУ имеладвойную адресацию - для обращения к байту и к каждлму из битов. для этих двух видов использовались разные команды. к ОЗУ можно было обратиться косвенно, к битам - нет.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб апр 12, 2014 15:45:49
HHIMERA
Просто лысый решил поумничать... Не у всех Cortex есть bit banding... в М0 он отсутствует...
================
На мелких проектах и при нынешнем обилии ОЗУ... в битах вообще особого смысла нет...
Для любителей извращений можно посоветовать заюзать неиспользуемые регистры...
Таким макаром МЭЛТ когда-то в своих платах защиту делал... играл на разнице в регистрах МК51 Themic и Philips...
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб апр 12, 2014 16:06:34
КРАМ
Посмотрел.
Это не вполне непосредственная битовая адресация. Скорее это ОТОБРАЖЕНИЕ битовых команд на общее адресное поле.
Все битовые команды сначала попадают в битовый сопроцессор, который расширяет адресное поле для битов.
Фактически это ничем не отличается от битовых команд в архитектурах Атмела и Микрочипа. Там если рассмотреть структуру кода команды, то в ней условно разделены зоны опкода и адреса бита. Но на самом деле выборка происходит побайтно и дешифратор команд преобразует этот адрес бита в МАСКУ.
В этом смысле в 16-разрядном Микрочипе есть и "косвенная адресация" бит через команду BSW. Но собственно к адресации бит она никакого отношения не имеет.
Впрочем, я не вполне пока разобрался с архитектурой адресации бит в АРМ-Кортекс, вполне возможно, что и там это по сути псевдоадрес....
HHIMERA писал(а):Просто лысый решил поумничать... Не у всех Cortex есть bit banding... в М0 он отсутствует...
================
На мелких проектах и при нынешнем обилии ОЗУ... в битах вообще особого смысла нет...
Ну уж куда мне до Ххимеры...
Правда некоторые математические операции требуют побитовой обработки ОДНОГО слова, но это так... к слову...

И размер ОЗУ тут вообще ни к селу, ни к городу...
Если в кодах Хемминга требуется перестановка бит в ПОТОКЕ данных, то отсутствие адресации бит ЗАМЕДЛЯЕТ обработку...
Да и Бог с ним, с Хэммингом... Обработка графических полей для монохромных LCD превращается в громоздкий индусский код...
ЗЫ. К вопросу об универсальности копеечных М0. При отсутствии битовых команд и битового расширения адресов любая битовая команда превращается в НАБОР команд. Тогда и заявленная производительность - фикция...
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб апр 12, 2014 16:54:16
HHIMERA
КРАМ писал(а):Правда некоторые математические операции требуют побитовой обработки ОДНОГО слова, но это так... к слову...
Разве что к слову... пустому...
В М0 битовые операции повеселее... чем в том же АВР...
И размер ОЗУ тут вообще ни к селу, ни к городу...
Та да... 256 байт вполне хватит...
Если в кодах Хемминга требуется перестановка бит в ПОТОКЕ данных, то отсутствие адресации бит ЗАМЕДЛЯЕТ обработку...
Да и Бог с ним, с Хэммингом... Обработка графических полей для монохромных LCD превращается в громоздкий индусский код...
От незнания к вере???
Для монохромных дисплеев скорости М0 уж по любому хватает... там видео не требуется...
К вопросу об универсальности копеечных М0. При отсутствии битовых команд и битового расширения адресов любая битовая команда превращается в НАБОР команд. Тогда и заявленная производительность - фикция...
Фикция - это не разобравшись в архитектуре пытаться давать умные советы...
М0 это заменитель восьмибиток... и надо сказать - хороший заменитель... Всё остальное от незнания или непонимания... т.е. пустой трёп...