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

Язык СИ для микроконтроллеров


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

Да, я тоже проверил - все работает, и с файлом тоже работает. 

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

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

но результат логического выражения всегда будет 0 или 1.

кто вам это сказал? открываем справочник по Си Шильда и читаем:

Цитата

Логические значениия ИСТИНА (True) и ЛОЖЬ (False) в языке С

При выполнении многих операторов языка С вычисляются значения условных выражений и в зависимости от полученного значения выбирается та или иная ветвь вычислительного процесса. Условное выражение может принимать одно из двух значений: ИСТИНА или ЛОЖЬ. В языке С значение ИСТИНА представлено любым ненулевым значением, включая отрицательные числа. Значение ЛОЖЬ всегда представлено нулем. Такое представление логических значений ИСТИНА и ЛОЖЬ позволяет весьма эффективно программировать многие процедуры.

 

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

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

кто вам это сказал?

https://ideone.com/86srM4 посмотрите и убедитесь.

screenshot-ideone.com-2017-10-21-21-41-58-572.png.e5715fc5845c8397959e0459e59a91f4.png

Вы спутали, как Си трактует числа в качестве логических значений, с тем, чему именно равны результаты логических выражений. Так вот, любое ненулевое число Си считает логической истиной, а в качестве логической лжи используется только 0. Но вот результат выражения "10 больше 3" будет не любое отличное от 0 число, а конкретная единичка.

Особенно смешно мои слова подтверждаются путем логических операций отрицания и двойного отрицания. Если вы согласны, что !(12) будет равно 0, то что скажете про !!(12) - по-вашему, будет 12? :)

Изменено пользователем ARV

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

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

нет такой команды

Не шутите так!

Изменено пользователем ARV

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

12 часа назад, ARV сказал:

Вы спутали, как Си трактует числа в качестве логических значений, с тем, чему именно равны результаты логических выражений.

А у логических выражений есть ЧИСЛЕННЫЙ результат? :)

Вы вообще о чем?

Это Вы путаете представление результата логических выражений в машине с  самим этим результатом.

Когда процессор выполняет условное ветвление при сравнении чисел, то он опирается на  значения флагов регистра состояний, а совсем не на числа.

То есть у условия НЕТ ЧИСЛЕННОГО РЕЗУЛЬТАТА. Его даже нельзя чаще всего физически получить, потому что он не сохраняется ни в каком регистре.

Присвоение единицы или нуля вместо boolean значений - это УСЛОВНОСТЬ связанная с отсутствием этого типа.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

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

28 минут назад, my504 сказал:

А у логических выражений есть ЧИСЛЕННЫЙ результат? 

В языке Си - да. В языке Си любое выражение имеет численный результат.

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

Его даже нельзя чаще всего физически получить, потому что он не сохраняется ни в каком регистре.

Это ваши фантазии, не более того.

screenshot-ideone.com-2017-10-22-10-05-25-920.png.c6c155c3f902160a1b35db5ff6f77b43.png

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

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

Присвоение единицы или нуля вместо boolean значений - это УСЛОВНОСТЬ связанная с отсутствием этого типа

Вы можете называть условностью что угодно, но это не меняет того факта, что истинное логическое выражение в Си имеет численное значение 1, а ложное - 0.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

@ARV А теперь дизассемблируйте откомпилированный файл, и посмотрите как оттранслировался условный переход по булевой переменной. Там тупо переход по флагу Z (zero). То есть сравнение с нулём (false). А уж какой цифрой будет true - совершенно без разницы. Так что Марк (@my504 ) прав.

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

42 минуты назад, ARV сказал:

В языке Си - да. В языке Си любое выражение имеет численный результат.

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

Вы можете называть условностью что угодно, но это не меняет того факта, что истинное логическое выражение в Си имеет численное значение 1, а ложное - 0.

Присвоение ПЕРЕМЕННОЙ значения логического выражения и есть условность. Да, эта условность принята в Си. Ну и что? Из этого не следует, что само условие имеет численный результат. Если процессор не в состоянии получить численный результат от выполнения логического выражения, то о каком "числе"  может идти речь? Ваша "доказательство" не стоит выеденного яйца...

Изменено пользователем my504

戦う前に相手のベルトの色に注目

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

@oldmao@my504 , язык высокого уровня подразумевает, что все идиомы рассматриваются именно на высоком уровне. размещение результата во флаге, регистре или ячейке озу - это вопросы реализации. Главное, чтобы соблюдались требования языка, а способ этого соблюдения никого не волнует. В стандарте Си прописано то, что я пытаюсь вам втолковать: результат логического выражения есть 0 или 1, но любое не нулевое число трактуется, как логическое значение "истина". 

В привлекаете в свои рассуждения собственные домыслы... но в них полно противоречий и натяжек. Допустим, что прав@my504 , говорящий 

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

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

Тогда как объясняется приведенный мной выше скриншот, где результат арифметической суммы двух логических выражений выводится без занесения в переменную? Получается, компилятор смог получить результат? Сумел-таки из флага в регистре состояния как-то извлечь единички и просуммировать их? 

Допустим, прав @oldmao , говорящий 

34 минуты назад, oldmao сказал:

посмотрите как оттранслировался условный переход по булевой переменной

Да, переход делается по флагу в регистре состояний. Однако, точно так же по флагу будет произведен переход для if(22) или if(a*b) - то есть для АРИФМЕТИЧЕСКИХ выражений. Компилятор добавит команды, заносящие в регистр флагов нужные биты, чтобы потом по этим битам выполнить переход.

Си не делает разницы между логическими выражениями и арифметическими. Си оперирует исключительно с ЧИСЛАМИ, что бы вы там не думали себе в голове. Понимаете? Даже символ 'F' - не более чем число для языка Си, а тот факт, что вам (человекам) это преподносится как "символ" - не более чем условность.

Так вот, условности условностями, но факт, закрепленный в стандарте Си, остается фактом: результат логического выражения в Си есть число, и число это 0 или 1 в зависимости от того, ложное или истинное значение выражения получено. 

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

14 минуты назад, ARV сказал:

 

Да, переход делается по флагу в регистре состояний. Однако, точно так же по флагу будет произведен переход для if(22) или if(a*b) - то есть для АРИФМЕТИЧЕСКИХ выражений. Компилятор добавит команды, заносящие в регистр флагов нужные биты, чтобы потом по этим битам выполнить переход.

Как раз компилятор НИЧЕГО не добавит для выполнения логического условия, в отличии от присвоения.

В данном споре имеет значение НАТИВНОСТЬ действий процессора. Так вот присвоение значения переменной по результату логического выражения - это НЕ нативное действо, требующее дополнительных команд. Естественным является условный переход по флагу.

ЗЫ. Абстракции не должны "забывать" про допущения, на которых они построены. Иначе есть высокий риск допустить саму эту абстракцию вне этих допущений.

19 минут назад, ARV сказал:

 

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

Даладна!!!

Вы сможете сделать вывод без занесения в регистровую переменную?

Если переменная не имеет явного вида, это не значит, что ее нет.

 

Изменено пользователем my504

戦う前に相手のベルトの色に注目

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

6 минут назад, my504 сказал:

Как раз компилятор НИЧЕГО не добавит для выполнения логического условия, в отличии от присвоения.

В данном споре имеет значение НАТИВНОСТЬ действий процессора. Так вот присвоение значения переменной по результату логического выражения - это НЕ нативное действо, требующее дополнительных команд. Естественным является условный переход по флагу.

ЗЫ. Абстракции не должны "забывать" про допущения, на которых они построены. Иначе есть высокий риск допустить саму эту абстракцию вне этих допущений.

Вот  этот поток сознания - он вообще о чем? Что он доказывает или опровергает?

Предлагаю воспользоваться принципом "опыт - критерий истины". Прошу вас привести код на Си, который бы подтверждал ваши домыслы. Код, который подтверждает мои утверждения, я уже приводил дважды. Жду аналогичного от вас. Внимание: листинг ассемблера - не применять, т.к. мы говорим не об ассемблере, а о языке Си, который более-менее стандартизирован.

Я же в свою очередь поищу цитату стандарта Си, чтобы поставить точку в споре окончательно. Стандарт вас устроит в качестве непреложной истины?

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Мент детектед.

Все реализации Си для эмбеддед систем имеют возможность вставок на АСМе. В этих вставках либо есть возможность получить доступ к численным значениям, либо нет. Получить доступ к результатам логических выражений невозможно, если не делать специальных присвоений.

А доказывать, что Си присваивает единицу или ноль мне не нужно, я это знаю и без Вас, есличо.

 

戦う前に相手のベルトの色に注目

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

2 минуты назад, my504 сказал:

Получить доступ к результатам логических выражений невозможно, если не делать специальных присвоений

Продемонстрируйте, пожалуйста, как можно получить доступ к результату выражения (a+b) из следующего кода:

volatile int a,b,c,d;

d = (c - 2)/(a + b);

Вы ведь утверждаете, что при помощи ассемблерной вставки это можно сделать? Ну так сделайте. Тогда ваши аргументы будут иметь ценность.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

А представленное выражение является логическим?

А  (a+b) являются выражением в данном примере?

Вы вообще можете изолировать логическое выражение в Си для его применения в АСМ вставке без присвоения?

АРВ, Вы ломитесь в открытую дверь.... :)

 

Изменено пользователем my504

戦う前に相手のベルトの色に注目

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

Ну вот я нашел текст стандарта С: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

Цитирую по мере упоминаний в тексте

Цитата

The result of the logical negation operator ! is 0 if the value of its operand compares unequal to 0, 1 if the value of its operand compares equal to 0. The result has type int.

Результат логического отрицания ! есть 0, если значение его операнда отличается от 0, и 1, если значение его операнда эквивалентно нулю. Тип результата int

Как видите, в стандарте черным по белому написано, что логическое выражение имеет результат типа int - то есть число. И число это 1 или 0.

2 минуты назад, my504 сказал:

А представленное выражение является логическим?

Я рассуждаю так: если результат логического выражения извлечь невозможно, то предполагается, что уж результат арифметического выражения доступен. Если же не доступны результаты любых выражений, ваш аргумент превращается в тыкву и удаляется с доски. Ищите иное доказательство.

4 минуты назад, my504 сказал:

А  (a+b) являются выражением в данном примере?

Вы меня убиваете... А что же это по-вашему?! Выражением в Си является даже вот это:

int var;

var; // вот это - ВЫРАЖЕНИЕ

 

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Часть выражения является выражением?

Является ли выражением "а" в выражении "с=а+в"?

Является ли "=" таким выражением?

Операция присвоения является ЧИСЛЕННОЙ. Поэтому все значения прошедшие эту операцию становятся численными.

Так же как и в неявном преобразовании типов, присвоение ЧИСЛЕННЫМ переменным значений логических выражений - суть просто соглашение языка.

 

Изменено пользователем my504

戦う前に相手のベルトの色に注目

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

7 минут назад, my504 сказал:

Часть выражения является выражением?

да

8 минут назад, my504 сказал:

Является ли выражением "а" в выражении "с=а+в"

да

8 минут назад, my504 сказал:

Является ли "=" таким выражением?

Это оператор, слева и справа которого находятся выражения. Слева - леводопустимое, справа - праводопустимое.

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

int x = a > b;

Чем логическое выражение вдруг стало отличаться от арифметического? Я же вам выше процитировал стандарт (только для оператора !, но можете посмотреть сами, для всех логических операторов то же самое: результат 1 или 0, тип int), который декларирует, что результат логического выражения есть число. А к числу доступ получить можно, т.к. число хранитсяя в регистре или ячейке памяти.

С чем вы спорите, с очевидным и стандартным?

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

47 minutes ago, ARV said:

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

Получить доступ конечно можно, при этом код будет примерно таким

// int x = a == b;
  mov r1, a
  mov r2, b
  sub r1, r2
// Результат в r1 и далее по флагу Z преобразование в 0 или 1

Если результат не нужен, то код будет несколько другим

// if ( a == b )
  mov r1, a
  mov r2, b
  cmp r1, r2  // Результат никуда не помещается
  jz label

В этом случае не будет преобразования типов. Поэтому код будет компактней

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

Давайте спишем на работу оптимизатора. Если промежуточное значение не используется, его вычисление может быть опущено. Так и тут, операция сравнения вычитает один аргумент из второго, результат является целочисленным. Далее этот результат должен бы приводиться к 0/1, но if() принимает не логические значения, а любые численные, поэтому лишнее преобразование опускается.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

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

Давайте спишем на работу оптимизатора.

При обсуждении языка верхнего уровня нет смысла углубляться в нюансы реализации. Я об этом говорил, но товарищи не понимают...

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

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

 Я об этом говорил, но товарищи не понимают...

"Не ищи дурее себя" (с)

Это так мой тесть любил говорить...

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

Могу сказать, что время на поиск проблем связанных с "нюансами реализации" компиляторов становится пренебрежимо малым, если  УГЛУБЛЯТЬСЯ в эти самые нюансы.

ЗЫ. Эмбеддед системы отличаются тем, что по самый небалуй напичканы принципиальными противоречиями со стандартным Си. Именно поэтому в реальных проектах перенести код на иную платформу без его  переписывания заново практически невозможно.

戦う前に相手のベルトの色に注目

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

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

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

Товарищи как собака Павлова: понимают всё, да только ничего сказать доказать не могут. Я вам приводил примеры, я вам приводил доказательства, я вам цитировал стандарт, я вас просил привести собственные доказательства - и что в ответ? В ответ упоминание тестя. Он авторитет в этом, что ли? Ваш тесть Билл Гейтс или Бьёрн Страсуструп?

Докажите ваши утверждения без абстрактных деклараций про "эмбеддед системы" - вот это будет мужской разговор, а так - детский лепет, не более.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Так уже доказали. 

Списали на оптимизацию. 

ЗЫ. Писать что то более основательное, с кодом, примерами из практики мне отчаянно лень. Тем более, что Вы традиционно не желаете слышать собеседников. 

Полагаете себя во всем правым, а свой опыт репрезентативным? Нивапрос. 

Только меня увольте. 

Изменено пользователем my504

戦う前に相手のベルトの色に注目

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

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

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

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

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

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

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

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

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

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

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

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