- Vote on answer
- posted
18 years ago
WINAVR
- Vote on answer
- posted
18 years ago
- Vote on answer
- posted
18 years ago
- Vote on answer
- posted
18 years ago
Hello, Andrey Solomatov! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Thu, 27 Oct 2005 11:37:44
+0000 (UTC):DO>>>> Где и когда это интерпретируется как ошибка?
AS> На "прикладном уровне". Или мы программируем исключительно для AS> своего удовольствия?
На каком таком прикладном уровне? Еще раз, и последний. Операция сложения и вычитания не зависит от того знаковые типы используются или нет. Соответственно и реализуется одинаково. И если есть перегруженные рантаймовыми проверками языки, то это вовсе не означает что это делается везде. В С этого не делается вообще никогда.
AS>>> В флаге OVR или аналогичном.
DO>> В каком ЯВУ есть флаг OVR?
AS> Нигде нету.
Так о чем ты говоришь?
AS> Поэтому в каждом извращаются по своему обрабатывая ошибки AS> вычислений.
Нет никакой ошибки. Как интерпретировать 0x80 как 128 или как -1 - выбор программиста, процессор об этом ничего не знает и 0x7f+1 всегда 0x80.
DO>> Да ну? А я почему-то всегда думал, что используется флаг DO>> переноса...
AS> Ага. Апшипся я.
Причем дважды...
AS> [кусь] AS>>>>> p++; /* скажешь не хак? */
DO>>>> Нет конечно.
AS>>> Угу. С учётом того, что теперь указатель указывает неизвестно на что.
DO>> А на что ты хотел, чтобы он указывал, когда писал это?
AS> Никуда не хотел.
Тогда зачем писал?
AS> Это принципиально непроверяемая операция - куда оно полезет.
Принципиально проверяемая, только на фиг это не нужно. Обращение по индексу за пределы массива проверяемо точно так же, но это рантаймовая проверка, жрущая много времени и других ресурсов, потому в практических программах, особенно для embedded, где избытки ресурсов встречаются реже, чем в офисных или домашних РС, такие проверки не практикуются.
AS> Давайте вернём автоматическое объявление переменных, как в AS> фортране - начало на i, j, k - целые.
Какая связь собственно? Объявление переменных не жрет ресурсы целевой системы.
DO>> Какого? Впрочем я и в стандартном виртовском паскале тебе DO>> сделаю все что угодно с любыми указателями. Есть там такой DO>> механизм, как вариантный тип (аналог сишного union или DO>> фортрановского common), который позволяет хакерствовать как DO>> угодно.
AS> Для этого надо усиленно извращаться. Поэтому, я думаю
Не надо, надо просто знать язык...
AS> специально не делали, что не сделали варианты "более удобными для хака".
Зато все виденные мной реализации Паскаля, предназначенные для практического программирования, а не для обучения структурному программированию имеют более удобные механизмы и соответсвенно отличающийся от виртовского язык.
AS>>> А я всегда предпочитаю вывод организовывать в виде множества AS>>> маленьких функций, специализированных под данную AS>>> переменную/поле.
DO>> А Борланд в своих библиотеках предпочел процитированный DO>> способ.
AS> Ну и что? Я этим способом не пользовался никогда.
А то, что ты видимо просто не писал больших развитых программ на ТР. Потому и не пользовался, не знаешь, знать не хочешь и все такое. А Борланд писал (я тоже писал, но Борланд полагаю авторитетней).
AS> Я обязан пользоваться всеми приколами Бормонда?
Ты ничего никому не обязан, но твои аргументы типа мне не нужно, значит и все могут обойтись не состоятельны. Борланд, как я показал, не смог.
DO>> В printf кстати весьма продуманный механизм шаблонов заложен. DO>> Куда более развитый, чем в паскалевском write
AS> Вполне возможно, что он продуманный. Только всё равно - ломы.
Твои проблемы. Исключительно. Другим, как видишь, не ломы.
DO>> А что будешь делать, если понадобится? Вот есть у меня DO>> программа (кстати мне ее мой товарищь на Дельфи писал), DO>> которая "разговаривает" с микроконтроллером и вытаскивает из DO>> него всякие значения. Ток, напряжение, мощность... Причем DO>> программа в контроллере не жестко фиксивана. В зависимости от DO>> версии и типа устройства параметры там хрянятся по разному, DO>> причем не все версии уже есть.
AS> Типа "система калибровки"?
Нет, нет никакой калибровки. Совершенно не важно что это за система, хотя если это интересно, я могу рассказать. Важно, что заранее РСшная программа не знает и не может знать что это будут за параметры и в каком виде их следует представлять. Это должно конфигурироваться по месту, а значит формат представления данных необходимо описывать как-то. И всего лучше это делать общепринятым сишным способом, не изобретая какждый раз что-то новое.
DO>> единицах и с какой точностью это выводить. Так вот последнее DO>> задается тем самым шаблоном из какой-то дельфийской функции, DO>> похожим на printf'овский шаблон.
AS> Я бы скорее всего полюнул и сделал маленькую функцию на AS> встроенном асме.
Куда плюнул, какую функцию, за каким хреном там ассемблер? И зачем ее делать, если она уже сделана? Просто в С тоже самое получается изящней.
AS> Или на самом паскале. Поскольку задача преобразования числа в AS> строку хорошо формализована, и подогнать её "под себя" не AS> слишком трудно.
Нет, ну можно какждый раз восход солнца осуществлять вручную, только зачем?
AS> Плюс ко всему дополнительно - неизвестно, что проще - сделать AS> удобный "для себя" (ввода) и заполнения пользователем формат AS> конфига + и потрахаться с реализацией вывода - или наоборот, AS> "трахаться" со вводом готового формата + лёгкий вывод.
Удобный сделать конечно можно, причем в функции printf это уже сделали. Можно конечно сделать и другой, но я не очень понимаю зачем широкоизвестный формат заменять чем-то другим. И писать свои функции вместо того, чтобы взять готовые.
DO>> Нет, это именно язык, про который тут говорили как про продуманный. DO>> Впрочем возможность не вычислять полностью логическое DO>> выражение - это как раз и есть ТР'шное расширение. Мне DO>> интересно чем надо было думать, чтобы вычислять его DO>> полностью...
AS>>> Си тоже сегодня можно загнать в режим K&R. И?
DO>> Далеко не всякий компилятор это поддерживает, а если да, то DO>> это не будет стандартным С.
AS> Ну тогда не надо говорить про "ключики" в TP.
Я не про ключики, а про совершенно дурацкую паскалевскую идею считать логическое выражение полностью. Из-за ее глупости и пришлось вводить ключик, иначе писать прийдется еще более громоздко.
AS>>> CCM0.ACC0 = 1; // Это вроде работает AS>>> CCM0.CCMOD0 = 3; // А это - нет. :((
DO>> А что делает?
AS> Задаёт режим капкомовского модуля. А это важно?
Нет, важно во что компилируется.
DO>> А авторов ТР как видишь напрягло, раз они formatstr написали...
AS> А меня её существование никогда не интересовало. И?
И ты - не показатель, в отличие от поставляемых с компиляторов примеров и библиотек.
AS> Дабы сэкономить место - на следующее письмо я здесь отвечу. AS>>> CCM0.CCMOD0 = 3; // А это - нет. :((
DO>> Да, забыл сказать, что из имеющихся сходу под рукой BC, DO>> picc16 и picc18 компиляторов твой пример работает во всех DO>> трех. Очевидно, строка DO>> CCM0.CCMOD0 = 3; компилируется в две инструкции and и or DO>> (естественно я выкинул _at(0xff52)). Могу проверить еще на DO>> нескольких, но давай сначала ты приведешь свой листинг.
AS> Да не надо проверять - я тебе так скажу.
Что ты мне скажешь? Мне листинг посмотреть интересно.
AS> Tasking C166 v.2.7 r5. AS> Компилер интересный - у меня некоторые замороченные макросы, AS> нормально прошедшие BC5 препроцессор - в нем "сдохли". AS> Предлагать "уйти" не надо - целевая платформа на нём + софт AS> пишется не мной одним.
Зачем уходить? Делаешь пример, пишешь письмо в саппорт и они исправляют ошибку. Я так делал и получал, причем быстро, исправленную версию.
AS> Пытался я когда-то сделать программу с выделенной AS> конфигурацией в отдельный файл - AS> но не вышло, а исходники давно потерялись.
Это ты о чем?
dima
- Vote on answer
- posted
18 years ago
- Vote on answer
- posted
18 years ago
- Vote on answer
- posted
18 years ago
- Vote on answer
- posted
18 years ago
- Vote on answer
- posted
18 years ago
- Vote on answer
- posted
18 years ago
- Vote on answer
- posted
18 years ago
- Vote on answer
- posted
18 years ago
- Vote on answer
- posted
18 years ago
- Vote on answer
- posted
18 years ago
- Vote on answer
- posted
18 years ago
- Vote on answer
- posted
18 years ago
Hello, Andrey Solomatov! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Fri, 28 Oct 2005 09:59:21
+0000 (UTC):DO>> На каком таком прикладном уровне?
AS> Вот у нас есть матмоделька, которая по параметрам AS> (температуре, давлению и расходу воздуха на входе) определяет AS> давление во входном трубопроводе. AS> Что-то мне подсказывает, что результат операции типа 127+10 = AS> -10 будет рассматриваться в ней как ошибка.
Так это то, что я тебе несколько дней назад говорил, ты только сейчавс начал понимать? "Плюс" в математике и в программировании - совершенно разные, хоть и похожие вещи.
DO>> Еще раз, и последний. Операция сложения и вычитания не DO>> зависит от того знаковые типы используются или нет. DO>> Соответственно и реализуется одинаково.
AS> Пофик мне реализация. Разработкой схемотехники MCU я не занимаюсь -
Тебе вообще, как я посмотрю, все по-фиг.
DO>> И если есть перегруженные рантаймовыми проверками языки, то DO>> это вовсе не означает что это делается везде. В С этого не DO>> делается вообще никогда.
AS> По видимому фирма Microsoft с вами не согласна - бо включила AS> такую возможность. Да и эхотажный Altium:
AS> Файл float.h:
Ну и причем тут float? Ты, похоже, вообще не понимаешь что говоришь.
DO>> Нет никакой ошибки. Как интерпретировать 0x80 как 128 или как -1 - DO>> выбор программиста, процессор об этом ничего не знает и DO>> 0x7f+1 всегда 0x80.
AS> Мы обсуждали ЯВУ, а не представление данных в процессоре.
Какой именно ЯВУ?
AS>>>>> Угу. С учётом того, что теперь указатель указывает AS>>>>> неизвестно на что.
DO>>>> А на что ты хотел, чтобы он указывал, когда писал это?
AS> Похакерствовать. ;))
Похакерствовал?
AS> Произвольный доступ в любое место памяти, не котнролируемый AS> механизмами типизации - явный хак, и от того, что указатель
Легко реализуемый даже в виртовском паскале, не говоря уж о турбо.
AS>>> Это принципиально непроверяемая операция - куда оно полезет.
DO>> Принципиально проверяемая, только на фиг это не нужно.
AS> Ну и как проверить, что int *p; p + 100 указывает на что-то AS> конкретное, а не в пустоту?
Отслеживать рантайм.
DO>> Обращение по индексу за пределы массива проверяемо точно так DO>> же, но это
AS> Обращение за пределы массива проверяемо хотя-бы в случае AS> статических выражаний.
Толку-то.
AS> Плюс в некоторых архитектурах (а-ля i432, i386 и выше) - AS> массив может объявляться в сегменте.
А в некоторых - нет.
DO>> А то, что ты видимо просто не писал больших развитых программ на ТР. DO>> Потому и не пользовался, не знаешь, знать не хочешь и все такое. А DO>> Борланд писал (я тоже писал, но Борланд полагаю авторитетней).
AS> Ради бога, всё может быть. AS> Борланд может делать всё что угодно, я - тоже.
Только с разным результатом. Что написал ты никому не ведомо, в отличие от написанного Борландом.
DO>> Нет, нет никакой калибровки. Совершенно не важно что это за DO>> система, хотя если это интересно, я могу рассказать.
AS> Просто существует такая хрень, которая занимается именно этим.
Какая хрень и чем занимается?
DO>> Важно, что заранее РСшная программа не знает и не может DO>> знать что это будут за параметры и в каком виде их следует DO>> представлять. Это должно конфигурироваться по месту, а значит DO>> формат представления данных необходимо описывать как-то. И DO>> всего лучше это делать общепринятым сишным способом, не DO>> изобретая какждый раз что-то новое.
AS> Вероятно. Правда в реальных изветных мне решениях используется всякая AS> херня типа dam- или ASAP-файлов. Вот так примерно:
AS> 23, /SPZ, AIMVM, {number of speedpulses for calibration of AS> vehicle speed signal}, 1, $BAAD4, $BAAD4 /SPW, 145, 2, 0.001, AS> 10 /SPX, 0, 0, 0, 0, 0 /SPY, 0, 0, 0, 0, 0 /FKX, 0, 0, 0 /FKY, AS> 0, 0, 0 /ABL, 0;
И что это значит? Это шаблон вывода?
DO>> Куда плюнул, какую функцию, за каким хреном там ассемблер? И DO>> зачем ее делать, если она уже сделана? Просто в С тоже самое DO>> получается изящней.
AS> Я бы заподорил, что "подлый" обязательно впишет в поля AS> какую-нибудь ерунду,
Ерунду впишет, ерунду и увидит, какие проблемы?
AS> а обрабатывать ошибки форматированного ввода-вывода во всех известных мне AS> ЯВУ в равной степени фигово.
Не надо ничего обрабатывать, это шаблон вывода, ты все увидишь сам.
DO>> Удобный сделать конечно можно, причем в функции printf это DO>> уже сделали. DO>> Можно конечно сделать и другой, но я не очень понимаю зачем DO>> широкоизвестный формат заменять чем-то другим. И писать свои DO>> функции вместо того, чтобы взять готовые.
AS> Вообще-то этот формат "широкоизвестен" в лишь узких кругах. AS> Т.е. я вообще не могу припомнить никакого конфига, который AS> опирался бы на формат Си-шных шаблонов. AS> Отчего-то.
Вероятно он просто тебе не попадался... Мне (от чего-то) не пришлось долго такой искать. Конфиг web-сервера Apache, формат log-файла
# # The following directives define some format nicknames for use with # a CustomLog directive (see below). # LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent
AS>>>>> CCM0.ACC0 = 1; // Это вроде работает AS>>>>> CCM0.CCMOD0 = 3; // А это - нет. :((
DO>>>> А что делает?
AS> [кусь] AS> Оно *не* проходит компиляцию.
Пиши в саппорт, это ошибка.
dima
- Vote on answer
- posted
18 years ago
- Vote on answer
- posted
18 years ago
- Vote on answer
- posted
18 years ago
- Vote on answer
- posted
18 years ago