ARV

Members
  • Публикации

    740
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    3

Все публикации пользователя ARV

  1. Язык Си Для Микроконтроллеров

    Я в своей практике сталкивался с подобным считанное число раз. Причем после тщательного анализа проблемы почти всегда выяснялось, что эта проблема не проявилась бы, если бы я был более аккуратен в кодописании. Именно поэтому я продолжаю настаивать, что знание и соблюдение стандартов всегда помогает, а не вредит. Судя по тому, как приходится вам объяснять очевидное - да. А вообще я любитель-меценат, и достаточно много помогаю новичкам, в частности, тыкая носом в стандарты. А вас, @my504 , я попрошу впредь поменьше рассказывать о страшных проблемах взаимодействия участков кода, которые только дизассмом и отладчиком можно расковырять и устранить, а просто приводить примеры, чтобы можно было воссоздать вашу проблему и разобраться, что явилось её первопричиной. А то ведь (по моим личным наблюдениям) ваши слова о проблемах почти не отличаются от криков самых-самых наивных начинающих, у которых во всех бедах виноваты: а) баги компилятора; б) баги микроконтроллера и в) ошибки в чужих библиотеках. Хотя на поверку почти всегда виноват сам "разработчик"...
  2. Язык Си Для Микроконтроллеров

    Рискну предположить, что как раз-таки из-за вот такого подхода и возникает необходимость разбираться с последствиями. А уж когда горе-писатели передают свой код "на доделку" или "проверку", так вообще рыдать хочется. А ведь простое знание и соблюдение (и применение) стандарта может заметно облегчить все аспекты программирования... Проблема в том, с моей точки зрения, что очень многие рассматривают оператор ? как некий эквивалент оператора if. Но ведь между ними большая разница: оператор if не возвращает результата, а оператор ? возвращает. И эта особенность позволяет писать очень аккуратно-компактные программы. Сравните сами: if(good) printf("Это %s", "хорошо"); else printf("Это %s", "плохо"); // или printf("Это %s", good ? "хорошо" : "плохо");
  3. 2 мешка транзисторов

    Вес около килограмма в сумме. Временно дебаты прекращены, т.к. есть кандидат на покупку. Если не выгорит - продолжим разговор
  4. Нужны кому-нибудь транзисторы эпохи СССР? Вот пара фоток Среди первой кучи есть большое количество из группы МП-шек, ГТ309, ГТ304, туда же попали КУ101, КТ807, ГТ905, КТ801, КТ606, КТ312 и много всяких других. Среди второй - КТ828, КТ807, ГТ905 и даже несколько П306А Всех транзисторов ни разу не касался паяльник. Количество транзисторов и вообще общий номенклатурный состав мешков неизвестны, и подсчетом я займусь только в случае вашей заинтересованности в приобретении... Мне бы сразу все кучей сбыть. Скажем, хотя бы 1 рубль за грамм транзисторов - найдутся покупатели? Ну или хотя бы озвучьте ваши предложения - у кого будет лучше всех, тот и станет счастливчиком Но однозначно доставка/упаковка за ваш счет и в стоимость лота не включена!
  5. Язык Си Для Микроконтроллеров

    Подловили! Ладно, поправлю свое мнение: нет независимых типов, кроме int и float
  6. Язык Си Для Микроконтроллеров

    Снова ваше мнение и требования стандарта вступают в противоречие. Как вы думаете, кто прав в этом споре? Я думаю - стандарт а вам придется смириться с этим. Тот факт, что вам не приходило в голову это делать, не отменяет существования этого явления. Результат логической операции в Си есть int, и либо 0, либо 1 в численном измерении. И ничего более. При этом любое численное значение, отличное от нуля, будет воспринято, как логическая истина, если это потребуется. И все - никаких фантазий. это не стандартный тип для Си Кстати, @oldmao , вы в курсе, что (если копнуть как следует глубоко), в Си вообще нет никаких "самостоятельных" типов, кроме int? Формально все существующие типы есть производные от int (я имею ввиду, что если меняется int, то следом меняются и все прочие типы). И даже, не смотря на то, что элементарной единицей обрабатываемой информации в Си есть байт, для него нет отдельного окончательного типа? А char - это вовсе не байт, если смотреть совсем уж формально... И только (если не ошибаюсь) начиная со стандарта С99 введены типы строгой размерности, в том числе и для байта...
  7. Язык Си Для Микроконтроллеров

    Да очень простое: тип boolean (а уж если точнее - костыль _bool) введены в стандарт буквально позавчера (утрирую), а до этого сто лет типа boolean в Си не было. Ну и вы тогда уж не по диагонали расскажите мне, какая именно переменная тут хранит результат "логического выражения" и по каким правилам осуществляется перевод логического значения в int? Может быть если начнете рассуждать самостоятельно, поймете, наконец, что результат логического выражения (y > 2) сразу имеет (при выполнении условия) значение 1 типа int, как я (и стандарт!!!) говорю. И никакого приведения типов по умолчанию тут не требуется. Еще как относится. Что компилятор считает - все согласны (любое не нулевое == истина), а вот что в результате вычисления логических выражений компилятор выдает - вот об этом спор идет.
  8. Язык Си Для Микроконтроллеров

    Бог мой! Да ведь Ричи говорит о том, ЧТО ВЫ можете применить в качестве true, а вот ЧТО СИ ВЫДАСТ вам в качестве true - не говорит. А это говорит стандарт. Неужели это надо пояснять?! Еще раз. int x = (x + 1) * (y > 2); В этом выражении переменная x будет увеличена на 1, если y больше двух, а если y меньше или равно 2, то x будет обнулена. То есть вышеприведенный код эквивалентен следующему if(y > 2) x += 1; else x = 0; Вы понимаете, что если тупо читать Ричи&Кернигана, то первый код вообще должен давать неизвестно какой результат, ведь неизвестно, чему будет равно (y > 2) - то ли 7, то ли 29879... любое ведь ненулевое... Только это я вам и пытаюсь объяснить! Вышеприведенные примеры работают одинаково на любой платформе, и абсолютно не важно, какие регистры/биты/ячейки там задейстованы! И ваше с Марком понимание совершенно бесполезно! Ибо есть стандарт, который до вас все определил. Еще раз: ранее я цитировал стандарт Си, в котором нет ни буквы фантазий! И там однозначно сказано, что "истинный" результат логического выражения представлен в Си не каким-то "любым ненулевым числом", а вполне конкретным - ЕДИНИЦЕЙ, тип int, т.е. со знаком. О чем еще вы спорите?!
  9. Язык Си Для Микроконтроллеров

    Ну предположим, не 10-точечный БПФ, а 64-точечный... что само по себе для AVR уже не слабая нагрузка. Вы хотели примеров - я дал из того, что у меня есть. Вы пока что философствуете без примеров, пытаясь заставить поверить вам на слово. Не серьёзно это. И по поводу непереносимого кода спорить не буду - на attiny13 портировать линукс ни у кого не получится... Все дело в разумном и достаточном. Вы из крайности в крайность мечетесь, а я придерживаюсь золотой середины. Я просто поражен, как можно взлететь на высоты драйверов DMA, не понимая, как вычисляется логическое выражение и какой у него результат... но это к слову.
  10. Язык Си Для Микроконтроллеров

    Ну я даже не знаю... Мой уровень выше AVR как-то не поднялся, там DMA нет. А вот как вы сумели, не зная правил вычисления логических выражений, стать гуру в DMA b драйверах - я не понимаю. И при всем при том библиотеки HAL для серьёзных МК существуют, а они и реализуют необходимый уровень абстракции. Единого стандарта нет, конечно, и поэтому работа по переходу с одного HAL на другой не так уж и проста, но тем не менее возможна. Знаете, я как-то все время этим и занимаюсь... И, знаете, отлично получается. Вот некоторые жалкие примеры: Скачать видео Скачать видео Скачать видео Все, как видите, динамично меняется, кнопки опрашиваются, все мигает и выводится. И ни разу не сложно.
  11. Отдам Даром (Подарю)

    Ну пишите адрес в ЛС, в чем проблема?
  12. Язык Си Для Микроконтроллеров

    Не угу. Уровни образуются программистом, они не сами по себе зарождаются, как глисты в кошке. Простой пример: работа с кнопками. Можно, как 90% любителей, во всех местах программы, где требуются кнопки, работать напрямую с портами, размазывая уровень абстракции по всей программе. А можно не только выделить всю работу с кнопками в отдельный модуль, но и в этом модуле работу с портами организовать в единственной функции, которую и придется переделать, если сменится архитектура. Работа с дисплеем - аналогично. Ввод-вывод - аналогично. Отличный пример - библиотека FatFs от Chan-а: три функции низкого уровня платформо-зависимы, а остальное - неизменно. Да, в некоторых случаях, на особо малоресурсных платформах, приходится таким подходом жертвовать, т.к. разделение на слои/уровни все-таки некоторые накладные расходы несет. Но это исключение из правил, а не норма. Вот еще пример из жизни: в Си есть вполне нормальная библиотека ввода-вывода stdio. Многие ли из любителей, скажем, AVR, ею пользуются именно для ввода-вывода? Из тех проектов, что я встречал, предел использования - это sprintf. То есть формируем строку, которую потом криво-косо по символам выводим то ли в USART, то ли на ЖКИ... А ведь раз уж ресурсов хватает, чтобы мириться с форматированным выводом, то с минимальными усилиями можно организовать работу printf сразу на ЖКИ или USART - чем не абстрагирование от платформы? Но нет, мыши будут плакать, колоться, но продолжать жрать кактус... Соглашусь. Лишние всегда лишние. А вот нормальные уровни абстракций, необходимые и достаточные, очень даже полезны. И если они вам не нравятся, то вы, вероятно, просто не умеете их готовить...
  13. Язык Си Для Микроконтроллеров

    При чем тут мой опыт, если я вам СТАНДАРТ процитировал? Когда вы пишите код, вы должны ЗНАТЬ, как он будет себя вести. В том и смысл стандарта, чтобы определить ОДНОЗНАЧНО поведение компилятора, даже если это поведение кому-то не нравится. И стандарт определил, что результат логического выражения - число 1 или число 0. Вы с этим спорите... Похоже, что во всём правым считаете себя именно вы... Никакая внутренняя реализация не должна беспокоить программиста ЯВУ. Тем более что какой-нибудь GCC делает так, а какой-нибудь IAR - этак. А код на Си один и тот же, и поведение в итоге получается одно и то же. А если ваши эмбеддед-проекты приходится полностью переписывать при переходе с платформы на платформу, то это проблема ваша, а не языка или компилятора. когда код пишется в расчете на стандарт языка, а так же с учетом разделения на "слои" (уровни абстракции), то при переносе между платформами правятся только участки низкоуровневого взаимодействия с аппаратной частью.
  14. Язык Си Для Микроконтроллеров

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

    По моим "ладонным" весам оба мешка примерно одинаковы по весу. Ну а остальное - это я не в курсе, зачем покупают "германий"... но покупают же зачем-то... надежда сбыть пока не умерла.
  16. 2 мешка транзисторов

    Пусть пакетика, не буду спорить. А что вас рассмешило в цене? Это слишком много? Сколько по-вашему "нормально"?
  17. Отдам Даром (Подарю)

    564-я серия нашла своего нового владельца. Но зато остальное может достаться кому-то задаром!
  18. Отдам Даром (Подарю)

    Хотите, в качестве утешительного приза вышлю мешок диодов?
  19. Отдам Даром (Подарю)

    Неужели после сказанного мною вы не уловили, что 50 рублей за несколько сотен микросхем это не совсем адекватное предложение? Неужели не догадались, что я ожидаю предложение около 5 рублей за штуку? Ну тогда извините... Кстати, я уже пересчитал - их всего 451 штука.
  20. Отдам Даром (Подарю)

    К сожалению, первым, кто обозначил готовность взять хотя бы по моей цене, были не вы. 50 рублей - это не деньги...
  21. Язык Си Для Микроконтроллеров

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

    Пока что 564-я серия - бронь за @nagan
  23. Отдам Даром (Подарю)

    Отдам даром следующие компоненты: Куча резисторов от 2 Вт до 0.125 Вт, различных номиналов, включая переменные и подстроечные, в т.ч. многооборотные. Многие новые, многие б/у. Кучка конденсаторов керамических и немножко пленочных. Емкость от единиц до сотен тысяч пикофарад. Большинство б/у, но попадаются и новые. Куча диодов и стабилитронов. В основном стабилитроны серий Д814, Д818, Д86x. Диоды - всякие разные, германиевые, кремниевые, выпрямительные и импульсные. Есть мосты мощные. Есть древние и современные. Пополам новых и б/у. Все вышеперечисленное отправлю почтой РФ, при условии компенсации затрат на пересылку/упаковку (по чеку с почты). Так же за символическое вознаграждение (можете предложить, сколько сочтете нужным) расстанусь с кучей микросхем серии К564 (никель). Микросхемы все новые (новые - в смысле ни разу не паяные), некоторые в заводской фольге, ассортимент - от логики до счетчиков и дешифраторов, практически весь ряд серии есть. Количество точно не знаю, считать лень, но на глаз - не меньше двух-трех сотен штук. Если кто решит вознаградить мою щедрость хотя бы 5-ю рублями за штуку - пересчитаю точно Вбирать конкретные типономиналы не буду, уж извините. Щедрость моя распространяется только на всю кучу целиком.
  24. Язык Си Для Микроконтроллеров

    да да Это оператор, слева и справа которого находятся выражения. Слева - леводопустимое, справа - праводопустимое. Если же вы спорите с очевидным, то тогда почему утверждаете, что невозможно получить доступ ассемблерной вставкой к результату логического выражения int x = a > b; Чем логическое выражение вдруг стало отличаться от арифметического? Я же вам выше процитировал стандарт (только для оператора !, но можете посмотреть сами, для всех логических операторов то же самое: результат 1 или 0, тип int), который декларирует, что результат логического выражения есть число. А к числу доступ получить можно, т.к. число хранитсяя в регистре или ячейке памяти. С чем вы спорите, с очевидным и стандартным?
  25. Язык Си Для Микроконтроллеров

    Ну вот я нашел текст стандарта С: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf Цитирую по мере упоминаний в тексте Результат логического отрицания ! есть 0, если значение его операнда отличается от 0, и 1, если значение его операнда эквивалентно нулю. Тип результата int Как видите, в стандарте черным по белому написано, что логическое выражение имеет результат типа int - то есть число. И число это 1 или 0. Я рассуждаю так: если результат логического выражения извлечь невозможно, то предполагается, что уж результат арифметического выражения доступен. Если же не доступны результаты любых выражений, ваш аргумент превращается в тыкву и удаляется с доски. Ищите иное доказательство. Вы меня убиваете... А что же это по-вашему?! Выражением в Си является даже вот это: int var; var; // вот это - ВЫРАЖЕНИЕ