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

Вопросы от начинающих по МК


Рекомендуемые сообщения

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

2 hours ago, Юрий_Нд said:

у них есть проверенный прием

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

Лентяям напомню, что выражение (1<<0) - это бинарная операция, результат которой равен числу, полученному в результате сдвига первого операнда (число 1) влево на количество битов, равное второму операнду (0). Оба операнда должны быть целыми числами. Например, (254<<122) или (b10011101<<b10000111).  Из этого следует, что число "1" взялось не из воздуха или божественного промысла, оно в явном виде прописано в выражении в скобке.

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

2 часа назад, LiVit сказал:

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

Меня часто спрашивают, почему мы просрали космос, электронику и прочее машиностроение.  Я честно отвечаю, что виноват лично  я и то, что у нас появился  интернет. Теперь всем умным людям некогда работать, потому что они очень заняты, обучаяя в интернете меня неразумного. Да, вот так и живем.

Вопрос к  @LiVit, а как Ваш умный компилятор "подгонит под контест", если объявить Ваши переменные каким нибудь  float или double? 

 

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

1 час назад, dasZebra сказал:

а как Ваш умный компилятор "подгонит под контест", если объявить Ваши переменные каким нибудь  float или double? 

никак, он пошлет вас в эротическое путешествие в поисках целочисленного типа.

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

1 час назад, dasZebra сказал:

Вопрос к  @LiVit, а как Ваш умный компилятор "подгонит под контест", если объявить Ваши переменные каким нибудь  float или double? 

Зёбра, зачем вы просрали космос? Да и всё остальное тоже? Нехорошо...

Вы лично, что хотите тут доказать? Напомню, разговор шел про целые числа, которые в микроконтроллерах представляются байтами, 16 и 32 битными словами. Float штука синтетическая. При помощи 32 бит пытаются изобразить не целые числа. И "умный" компилятор воспринимает выражение float a = (1<<0); как единицу в представлении float. Удивительно, правда?  Это называется неявное приведение типа. Почитайте на досуге.

А вот сделать a = a<<1; в данном случае не получится. Потому что это логическая, побитовая операция. Можно вот так: a = (float)((uint32_t)a<<1); Число сначала приведется к целочисленному типу uint32_t (при этом, дробная часть будет отброшена), потом сдвинется на 1 бит, а затем опять приведется к типу float.

Надеюсь, вам теперь стало немного понятнее? И теперь можно не беспокоиться за космос и прочее?

Замечу, что число 1 в float представлено в виде 0x3F800000. И до него конечно же можно добраться средствами Си, хотя он изо всех сил сопротивляется.
Например:
    float a = 1;
    uint32_t *b;
    b = (uint32_t*)&a;
    //теперь b указывает на число 0x3F800000

Если сделать так: *b = *b<<1; то a после этого будет содержать чУдную цифру 1.70141183e+038

Изменено пользователем LiVit
Ссылка на комментарий
Поделиться на другие сайты

30 минут назад, IMXO сказал:

никак, он пошлет вас в эротическое путешествие в поисках целочисленного типа.

Нет почти никаких проблем присвоить сложному типу значение простого типа. 

Однако присвоить ему занчение (x<<y) нельзя. Это ли  не докозательство того что  (x<<y)  вобщем то не совсем  число?

 

@LiVit напомню что разговор о том что 

6 часов назад, dasZebra сказал:

(1<<0) конечно все же отличается от 0b00000001. (1<<0) это 1 и все. А например (1<<1) это не 0b00000010 а всего лишь 10. 

а не о том, о чем Вам там где то что то подумалось.

Изменено пользователем dasZebra
Ссылка на комментарий
Поделиться на другие сайты

29 минут назад, dasZebra сказал:

Однако присвоить ему занчение (x<<y) нельзя. Это ли  не докозательство того что  (x<<y)  вобщем то не совсем  число?

    float a = 0x00;
    uint8_t x = 1;
    uint8_t y = 2;

    a = (x<<y);

Компилятор не ругается, программа выполняется, результат: a равно 4.
Что я делаю не так?

Зебра, я искренне надеюсь, что вы не программируете за деньги. В смысле, что это не ваша профессия. В противном случае, я очень не хотел бы иметь дело с устройствами, в которых ваши программы будут работать.

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

5 минут назад, LiVit сказал:

Компилятор не ругается, программа выполняется, результат: a равно 4.
Что я делаю не так?

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

15 минут назад, LiVit сказал:

очень не хотел бы иметь дело с устройствами, в которых ваши программы будут работать.

Эт кстати да, сам боюсь на аэрбасах летать... утешает одно, я в 2005м всего лишь архитектором и немного тестировщиком подвизался, да и то не по своей воле, и прям что бы кодить - такого не было.

Но тупизмов успел понаглядеться.

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

1 час назад, dasZebra сказал:

то ли  не докозательство того что  (x<<y)  вобщем то не совсем  число?

ага, а "СЛАВА КПСС" - вообще не человек.

Мудрость приходит вместе с импотенцией...

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

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

7 hours ago, dasZebra said:

(x<<y)  вобщем то не совсем  число

Самое что ни на есть число :D 

Хватит уже троллить, тема-то для начинающих. А Юрий_Нд вообще вон испугался и пропал :lol2:

10 hours ago, _abk_ said:

выражение (1<<0) - это бинарная операция, результат которой равен числу, полученному в результате сдвига первого операнда (число 1) влево на количество битов, равное второму операнду (0).

 

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

3 часа назад, dasZebra сказал:

Нет почти никаких проблем присвоить сложному типу значение простого типа. 

Однако присвоить ему занчение (x<<y) нельзя. Это ли  не докозательство того что  (x<<y)  вобщем то не совсем  число?

их вообще нет , потомущта значение (x<<y) есть целочисленная константа , и естественно здесь под Х и У подразумеваются целые числа в десятичном формате. а не ваши фантазии о флоат.
при этом Х и У по дефолту имеют размерность uint16
 

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

20 минут назад, _abk_ сказал:

А Юрий_Нд вообще вон испугался и пропал

Он не испугался и не пропал. Он затроллил всех, а теперь сидит и смотрит на результат со стороны, ехидно ухмыляясь :lol:

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

Во-первых хочу обратиться ко всем участникам этого форума:
1. Извиняюсь, был неправ, заблуждался.
Теперь я знаю почему (1<<0) = 0b0000 0001. И теперь я в это не просто верю, как делал это раньше, а точно знаю это и могу объяснить/пояснить любому желающему.
2. Интернетом не пользовался, книжки умные по этому вопросe не читал, просто взял листочек с карандашиком и написал:
(1<<6)=(16<<2)=(4<<4)=64 
верно?
3. LiVit, как Вы думаете Керниган и Ричи могут мне сказать что-либо новое и неизвестное именно по этому вопросу?
4. LiVit, я прекрасно понимаю, знаю что вы мне хотите сказать. Я же в ответ на Ваши аргументы хочу сказать, что у меня сейчас одна цель. Это написать рабочий д****** код, который будет считать Ампер*часы и Ватт*часы. Желательно так, чтобы в моей программе не было непонятных мне мест. Я думаю, что с сегодняшнего дня таких мест нет вообще.
5. LiVit,  простите я не помню, кто-то стёр все мои, и не только мои сообщения за последние полтора месяца, это Вы обещали мне посмотреть мой код?
6. LiVit, а в чём заключается моя агрессия? Я кого-то обидел, обозвал? Меня называли дураком, это правда, это было. И не только дураком.

Изменено пользователем Юрий_Нд
Ссылка на комментарий
Поделиться на другие сайты

15 часов назад, dasZebra сказал:

это не 0b00000010 а всего лишь 10.

 

9 часов назад, dasZebra сказал:

(x<<y)  вобщем то не совсем  число

Ну вот человек тоже искренне заблуждается (я вот например хоть что-то понял, а человек похоже так ничего и не понял), он что, тоже т-р-о-л-ь?
А может в конце концов уже нужно посмотреть на название темы?

Изменено пользователем Юрий_Нд
Ссылка на комментарий
Поделиться на другие сайты

Блин, а я думал, что человек тут пишет ради "пофилософствовать". Ан нет, он действительно не врубается ... :huh:

 

20 минут назад, Юрий_Нд сказал:

(1<<6)=(16<<2)=(4<<4)=64 
верно?

Вот зачем Вы этой кашей забиваете себе голову ? Зачем эти (на взгляд, совсем нелогичные) преобразования ?
Если Вам нужно узнать результат выражения "1<<6", то просто нарисуйте битики, в которых в 0-вом разряде будет "1", все остальные - "0". И двигайте всю эту "картину" влево 6 раз. Всё, результат получен.
Ну, или, просто запомните. Это выражение будет равняться числу, с единичкой в 6-ом бите.

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

15 минут назад, Alex сказал:

нелогичные) преобразования

А причём тут логика?
Я просто хочу сказать, что всё это числа. И смотреть на это всё нужно, как на числа.
Я просто попытался записать эти числа в различной форме представления.
Вот и всё.

18 минут назад, Alex сказал:

Ну, или, просто запомните.

Ещё раз попытаюсь пояснить.
Это ещё вчера я принимал всё это на веру, а сегодня ёлки-палки, прозрел. Можете считать, что видение у меня было.
Теперь у меня есть всему этому хозяйству логическое пояснение. 
И я просто попытался показать чудеса этой логики.
Только и всего.

А ещё, согласно этой логике, можно записать:
PORTD |= (1<<6);
можно:
PORTD |= (4<<4);
а можно и 
PORTD |= 64;

... и все это будут "однохренственные " операции.

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

35 минут назад, Alex сказал:

Если Вам нужно узнать результат выражения "1<<6", то просто нарисуйте битики, в которых в 0-вом разряде будет "1", все остальные - "0". И двигайте всю эту "картину" влево 6 раз. Всё, результат получен.
Ну, или, просто запомните. Это выражение будет равняться числу, с единичкой в 6-ом бите.

это да, вопросов нет, так и будет. вопрос в том какое значение будет когда

unsigned long int a=(1<<18);

B)
 

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

2 часа назад, _abk_ сказал:

Юрий_Нд вообще вон испугался

... "не-а", он не из пугливых.

5 минут назад, IMXO сказал:

какое значение будет когда


unsigned long int a=(1<<18);

... да хоть unsigned long int a=(1<<32);

а вот unsigned long int a=(1<<33);

это уже "фигвам называется"

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

13 минут назад, IMXO сказал:

протез у тебя есть

Proteus 8.9 у меня есть, а вот цифрового осциллоскопа нет. Может подскажешь где его раздобыть?
Или это нужно только версию "поновей ставить"?

... знаешь какую?

1 - Обменник - 45.png

... если-что, вот такой хочу.

1 - Обменник - 46.png

Изменено пользователем Юрий_Нд
Ссылка на комментарий
Поделиться на другие сайты

29 минут назад, Юрий_Нд сказал:

Может подскажешь где его раздобыть?

на казусе в ЧаВо по протезу :D http://kazus.ru/forums/showpost.php?p=130721&postcount=20
http://kazus.ru/forums/showthread.php?t=13198&page=2#

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

Кстати, по поводу Proteus.
Тут неделю назад была моя тема по поводу некорректной работы прерывания по таймеру Т1 на совпадение.
С таблицами и "всеми делами".
Так вот хочу сказать, что по измерениям в Proteus у меня время между прерываниями чётко одна секунда.
Это я по поводу моего г****кода.

1 - Обменник - 48.png

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

6 минут назад, Юрий_Нд сказал:

Это я по поводу моего г****кода.

я правильно понял, ты целый таймер убил на получение тика в 1секунду,
а в майне вгоняешь МК в ступор делаями  по 200мс,
я ничего не упустил? Вот такой :i-m_so_happy:код...

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

2 часа назад, Юрий_Нд сказал:

.. да хоть unsigned long int a=(1<<32);

а вот unsigned long int a=(1<<33);

это уже "фигвам называется"

(1<<32) будет тот же самый фигвам, как и (1<<33).

Мудрость приходит вместе с импотенцией...

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

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

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