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
formatting link