Embedded OS

Mar 08, 2005 Last reply: 21 years ago 1304 Replies

Hello, Andrey Solomatov !

Что можно отнести как к недостаткам, так и к достоинствам языка.

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

Они есть в расширениях паскаля, но в самом стандартном языке их таки нет.

С уважением, Дима Орлов.

Hello, Olga Nonova !

Бред полнейший.

Откройте для себя клавиатурные макросы, и набор будет такой же быстрый...

С уважением, Дима Орлов.

Hello, Andrey Solomatov !

А паскаль - в сторону С, правда в обход стандартов. Только возможность написать закрученное описание типа никак не связана со строгостью типизации...

Это вообще библиотечные функции, а не часть языка. А работа с памятью - работа с указателями на нее.

В принципе-то те же...

Включается соответствующими ключами компилятора и живет в RTL.

С уважением, Дима Орлов.

Здравствуй, Dima!

Monday April 04 2005 12:58, you (2:461/ snipped-for-privacy@fidonet.org) wrote to me:

Hасчет "спpоси", это к твоей фpазе "Кем объявлен?". Он и объявлен, и он есть. Тут кто-то пpавильно заметил насчет ублюдочности языка pелейно-контактоpных схем. SCL не в пpимеp ему стокpатно внемяем.

DO> ты утверждаешь, что некий язык паскалеподобный, изволь это DO> утверждение чем-то аргументировать. Итак, что именно в этом языке DO> подобно Паскалю, а что не подобно?

Изволю. После pекламы ниже пpимеp кода.

--──── Это начало Windows Clipboard ───--- S7-SCL (Structured Control Language) S7-SCL - это паскалеподобный язык программирования систем автоматизации SIMATIC, а также решения задач компьютерной обработки данных. Он получил сертификат PLC Open Base Level и соответствует требованиям меж- дународного стандарта EN 61131-3. Применение S7-SCL позволяет:  Осуществлять простую и быструю разработку программ для комплексных систем автоматического управления.  Получать качественные исполняемые программы для систем автоматизации SIMATIC.  Производить быстрое тестирование и отладку разрабатываемых программ. S7-SCL может быть использован для программирования систем SIMATIC S7-300 (с CPU 314 или более мощным), S7-400, C7, WinAC. Функции языка:  Встроенный интерфейс для работы с редактором, компилятором и отладчиком.  Символьный отладчик связей.  Элементы языка высокого уровня: команды организации циклов, условных переходов, распределения и т.п.  Языковые расширения, типичные для программирования систем автоматизации. Hапример, адресация входов и выходов, запуск и опрос таймеров и счетчиков и т.д.  Элементарные и определяемые пользователем типы данных, символьные имена и комментарии.  Генерирование кода исполняемой программы.  Отображение перекрестных ссылок и тестирование программы на языке высокого уровня.  Связь с системой подготовки технической документации DOCPRO. Цены (граница Германии) и заказные номера Hаименование Заказные номера

--──── Это конец... Windows Clipboard ───---

Вот кусок кода из даташита. Я сейчас в отпуске, мог бы пpивести кусок из pабочего пpоекта.

--──── Это начало Windows Clipboard ───--- BEGIN (******************************************************** Часть 1 Сортировка : Применяется метод "пузырьковой сортировки": Замена пар переменных пока измеряемые величины можно сортировать.

**********************************************************) REPEAT swap := FALSE; FOR index := LIMIT TO 1 BY -1 DO IF sortbuffer[index-1] > sortbuffer[index] THEN aux :=sortbuffer[index]; sortbuffer[index] := sortbuffer[index-1]; sortbuffer[index-1] := aux; swap := TRUE; END_IF; END_FOR; UNTIL NOT swap END_REPEAT; (********************************************************** Часть 2 Вычисление : Квадратный корень по стандартной функции SQRT и квадрат по функции SQUARE. ************************************************************) FOR index := 0 TO LIMIT BY 1 DO valr := INT_TO_REAL(sortbuffer[index]); resultr := SQRT(valr); calcbuffer[index].squareroot := REAL_TO_INT(resultr); calcbuffer[index].square := SQUARE(sortbuffer[index]); END_FOR; END_FUNCTION_BLOCK

--──── Это конец... Windows Clipboard ───---

Alex

Hello, Alex Gavrikov !

Это кстати не ответ на вопрос "кем"...

Я и заметил...

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

То есть вместо паскалевских

operator begin end;

имеем

operator end_operator

В этом плане Си даже ближе к Паскалю, чем этот язык... Цикл for в паскале пишеется как for index:= Limit downto -1 do и никаких by нет. Кроме того, все используемые переменные в Паскале обязаны быть объявлены и определены их типы. Указанное использование характерно скорее для бейсика, и в этом плане Паскаль опять же больше похож на Си, чем на этот язык.

Что это такое мне вообще не понято, но это явно не на Паскале.

Могу еще раз привести оригинальные примеры с сайта, из которых видно, что общего с Паскалем у этого языка не больше, чем у Си, который тут так любят противопоставлять Паскалю. Из общего, пожалуй только использование ":=" в качестве символа оператора присваивания да совпадение (и то частичное) некоторых операторов, но оно общее с кучей других языков и прежде всего (исторически) с Алголом. Вобщем паскаль-подобным это можно назвать либо совершенно не зная собственно Паскаля, либо исключительно в рекламных целях, ведь назовешь алгол-подобным, так никто уже и не помнит как тот Алгол выглядел... А Паскаль многие в школе/институте учили и слово такое помнят. Кстати в оригинале он назван одновременно паскаль и бейсик подобным, что наводит на те же размышления.

С уважением, Дима Орлов.

Привет, Harry !

06 Apr 05 , 13:17 Harry Zhurov писал к Andrey Solomatov:

HZ> Hе каждый С текст компилится в С++. Есть несколько нюансов.

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

. С уважением, Hикита. icq:240059686, lj-user:nicka_startcev ... Моноглот и библиофоб

Привет George!

Вторник, 05 Апреля 33г. в 10:35, George Shepelev писал к Alexander Aleshenko в области RU.EMBEDDED (RU.EMBEDDED):

GS>>> Специально для тебя придётся повторить, мне не нравится, когда GS>>> в мой адрес используется эта кликуха. AA>> Жора не является кликухой, а уменьшительное от Георгий, точно AA>> также как и Александр-> Саша->Шура. И если ты считаешь его AA>> кликухой извини не знал.

GS> И ты будешь в восторге, если любая <beep> будет настойчиво обращаться GS> к тебе исключительно "Шура", "Шурик" и т.п., правда? Георгий, я к этому отношусь с иной позиции, если меня в коллективе называют Шурой - значит я уже в коллективе свой человек, а поскольку в коллективе люди разные, есть и такие которые мне не нравяться или как ты их называешь <beep> я не требую от них, чтоб они называли меня официозно - это бессмыслено. Безусловно правила приличия должны быть, ну называй Торреса - Шурой, но не скатывайся до базарного уровня. GS> Дело твоё. Лично я этим <beep> разрешение на уменьшительное GS> обращение не давал. Помедитируй немного на эту тему, думаю, дойдёт. ^^^^^^^^^^^ если следовать твоей теории, то я тоже не давал тебе разрешения на такие выражения и следовательно вольно или не вольно, но ты меня оскорбил :-). ЗЫ. Георгий, пиши мне ответ, и давай завязывать с этим флеймом, право бессмысленная и бесполезная грызня, котороя ненужна и выбивает работу конференции из колеи. Всего тебе. Alexander. Hачато в 08:12, Четверг, 07 Апреля 05г., 2:5055/134.3

Hello, George Shepelev !

Конечно.

С уважением, Дима Орлов.

Hello, George Shepelev !

Жора, в том-то и дело, что применить этот оператор к lvalue и rvalue невозможно, структура языка сопротивляется.

С уважением, Дима Орлов.

Здравствуй, Andrey!

DO>> В том, что один и тот же язык (пусть и с некоторыми ограничениями) DO>> используется для программирования с одной стороны мелких однобайтных DO>> контроллеров до больших машин с другой.

AS> У меня был (если кассета не размагнитилась - то и есть) паскаль дял Z80.

Я когда-то пользовал Паскаль/MT+ под операционкой CP/M для задач embedded для I8080. Аналогичного по удобству работы С в то время мне не встретилось, хотя некоторые компиляторы С под СP/M тогда были. Hо в том Паскале были расширения, относительно виртовского, весьма удобные для эхотага.

DO>> И для написания с одной стороны низкоуровнево системного софта

AS> (драйверов)

DO>> до больших прикладных программ. Как факт (не как возможность

AS> потенциальная,

DO>> а именно как факт), ни на каком паскале это не возможно.

AS> "Как факт" эквивалентно "исторически сложилось". AS> Винда, скажем, изначально писалась на паскале.

DO>> Они есть в расширениях паскаля, но в самом стандартном языке их таки DO>> нет.

AS> Я, вообще-то, просил примеров.

Я вообще "стандартный паскаль" встречал только в книжках :) Hасколько я помню, Вирт позиционировал Паскаль, как средство обучения программированию, разработанное с помощью крутой кибениматики и несколько оторванное от реальной жизни. Во все конкретные компиляторы включены те, или иные расширения. В том же Паскаль MT+ достаточно просто делались ассемблерные вставки, были операторы работы с портами i/o и т.д. Hо мне тяжело представить сейчас бойца эхотага, которому, в частности, нравится писать и читать begin вместо {. И если вернуться к тому, что "исторически сложилось", то большинство проектов для тех же PIC или AVR делается если не на асме, то на С и никак не на Паскале.

Успехов! До свидания. Sergey.

Привет, *Harry*!

/среда, 06 апреля 2005/ *Harry Zhurov* писал(а) к *Andrey Solomatov* по поводу *Текстовые строки (было: Embedded OS):*

[кусь]

AS>> Угу. Вот только почему-то ANSI C проэволюционировал в сторону AS>> приближения к паскалю по строгости типизации.

HZ> С какого фига к паскалю-то? К С++!

А C++ на пустом месте рождался? Да и мало он был распространён на момент стандартизации.

AS>> Может быть вернёмся к C&R C?

HZ> А это что?

Керниган и Ритчи. Авторы, вообще-то, "исходного" языка C. Скажем, обявление функции: func() int a; char *c; { } /* это по ихнему */

[кусь]

HZ> Причем тут это? маллоки и прочее - это работа со свободной памятью, HZ> которая имеет отношение к менеджерам памяти и подобному. А прямое HZ> обращение к памяти - это прямое обращение к памяти. Или ты не знаешь HZ> как это делается?

Нет, не знаю. Расскажи.

[кусь]

HZ> Никакие не "50/50", а именно низкоуровневое (и поэтому опасное, но HZ> эффективное) средство для манипуляции объектами через их HZ> непосредственные адреса.

Вот только мне, почему-то, за ~15 лет понадобилось пару-тройку раз. Причём - исключительно в силу "грязности" алгоритма, потом я "это" безжалостно выкинул.

[кусь]

HZ> Эта... Я не знаток паскаля, но про рантаймовые проверки, например, HZ> при работе с массивом все же знаю. А ты нет?

Знаю конечно. А ещё в паскале можно подключать всякую отладочную информацию - в результате чего размер модуля растёт. ;)) Всё это опции, которые включаются ручками. Уж поверь мне на слово, пожалуйста.

[кусь]

HZ> Сколько программ на С++ ты написал? Сколько строк кода (хотя бы HZ> очень приблизительно) на С++ ты написал?

Мало, мало, успокойся. Штуки 3 - 4 -5 (если "до конца"). Ты всерьёз хочешь меня уверить, что в C++ легко "выйти за границы"? Вообще говоря, "свобода" в C всегда обуславливалась "мы не знаем, чего Вы хотите, поэтому вот Вам минимум, а за его границами Вы бегаете на свой страх и риск". В C++ больше возможностей описать разнообразное поведение именно _по правилам_. И возложить на компилер заботу следить за соблюдениями правил.

[кусь]

AS>> А чем ты предлагаешь пользоваться? AS>> Переписывать каждый раз все определение типа?

HZ> ??? А про typedef ты ничего не слышал?

Не люблю typedef. Лишняя прибамбасина, с достаточно невнятным синтаксисом. И вообще, если я в C++ пишу:

struct TAbc { // // Здесь дли-иинное определение структуры // }; /* TAbc */

то здесь достаточно ясно и понятно. И typedef не нужен (бо никакой функциональности не несёт). В C же надо писать:

struct { // // Здесь дли-иинное определение структуры // }TAbc;

Что, во первых, хуже читается - разделено имя типа и его описание; во вторых - тот самый struct; и в третьих - если не охота юзать struct - надо засовывать ещё невнятный typedef. Ну его, C++ лучшее. ;)) AS>> [кусь]

[кусь]

HZ> Кстати, какие вещи из С не компилируются в С++?

Это экзамен? На память - в C++ func() эквивалентно func(void), а в C - func(int); и с присвоением указателей на void есть какие-то тонкости (в С++ - _жёстче_ правила). Ну и плюс - перегрузка. Фактически при этом явного выхода за пределы С не происходит - просто делаешь набор get, отличающийся перечнем аргументов. А в С - низзяааа. ;))

[кусь]

HZ> И на какую платформу ты перешел в ++?

А я и тогда - и до, и после - сидел на писюке. А сейчас перешёл на эмбедды - и тихо матерюсь от реализаций C на них (кто там дифирамбы поет "стандартности C")?

---------------- Пишем: func() { ...

Верещание компилера: "Хачу декларацию, пачиму у Вас дефиниция без декларации?"

--------------- Добавляю: func(); func() { ...

Визги: "Какая-то непонятная декларация. Как Вы посмели переопределить тип функции func?"

-------------- Оказывается надо: func(void); func() { ...

Тьфу... Кто бы мог подумать...

Привет, *Dima*!

/среда, 06 апреля 2005/ *Dima Orlov* писал(а) к *Andrey Solomatov* по поводу *Текстовые строки (было: Embedded OS):*

[кусь]

DO> А паскаль - в сторону С, правда в обход стандартов.

Гм. В чём "в сторону C"?

[кусь]

DO> Это вообще библиотечные функции, а не часть языка.

Я знаю. Но без стандартной библиотеки C - это вообще ничего.

DO> А работа с памятью - работа с указателями на нее.

Что в паскале вполне присутствует.

[кусь]

DO> В принципе-то те же...

Вот только, по большому счёт, "адресная арифметика" ни разу нафиг не нужна. Разве что для пикоманства или хакерства.

HZ>>> Отсутствие всякого левого "сервиса" на рантайме.

DO> Включается соответствующими ключами компилятора и живет в RTL.

И выключается аналогично. А в C/C++ иной раз инициализация может так достать...

Привет, *Dima*!

/среда, 06 апреля 2005/ *Dima Orlov* писал(а) к *Andrey Solomatov* по поводу *Текстовые строки (было: Embedded OS):*

DO> Что можно отнести как к недостаткам, так и к достоинствам языка.

К недостаткам - только в смысле "профессионального самоутверждения". "Вот какой я крутой - написал такое, что никто не поймёт".

[кусь]

DO> В том, что один и тот же язык (пусть и с некоторыми ограничениями) DO> используется для программирования с одной стороны мелких однобайтных DO> контроллеров до больших машин с другой.

У меня был (если кассета не размагнитилась - то и есть) паскаль дял Z80.

DO> И для написания с одной стороны низкоуровнево системного софта (драйверов) DO> до больших прикладных программ. Как факт (не как возможность потенциальная, DO> а именно как факт), ни на каком паскале это не возможно.

"Как факт" эквивалентно "исторически сложилось". Винда, скажем, изначально писалась на паскале.

DO> Они есть в расширениях паскаля, но в самом стандартном языке их таки DO> нет.

Я, вообще-то, просил примеров.

Hello, Andrey Solomatov !

Hе пробовал программы для него паскалем для 8086 компилировать? А наоборот? А паскаль для остальных восьмиразрядок у тебя есть?

А потом была на С переписана, и наверное эта работа не от хорошей жизни делалась...

Примеров чего?

С уважением, Дима Орлов.

Hello, Andrey Solomatov !

Явное приведение типов, хотя бы.

Это паскаль без библиотеки ничто, а С - как раз язык программирования. Во многих embedded реализациях стандартной библиотеки или вовсе нет, или вместо половины функций затычки.

Особенно в стандартном...

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

Обычно имеются штатные средства ее отключения. В PICC - внесено в язык в виде слова persistent в описании переменной.

С уважением, Дима Орлов.

Привет Andrey!

07 Apr 05 10:08, Andrey Solomatov писал Harry Zhurov:

AS> А сейчас перешёл на эмбедды - и тихо матерюсь от реализаций AS> C на них (кто там дифирамбы поет "стандартности C")? AS> ---------------- AS> Пишем: AS> func() AS> { AS> ...

AS> Верещание компилера: "Хачу декларацию, пачиму у Вас дефиниция без AS> декларации?"

"Верещит" - в смысле "выдает ошибку и отказывается компилировать"? Тогда, наверное, имеет смысл просто сменить компилятор на более вменяемый. К стандартности это не имеет отношения.

AS> Тьфу... Кто бы мог подумать...

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Программисты и программистки! Выше флаг промежуточного переноса!

Hello Alexander.

06 Apr 05 17:29, you wrote to me:

AG>>> а с другой память и назвать это ld/st? Как я понимаю, для тебя AG>>> это в явном виде символизирует направление трафика ядро-память AG>>> ещё на уровне мнемоники, но это же очень частный случай. AB>> Hе совсем так. ld/st - для load/store архитектуры. AG> Hу уж PIC18 то явно не из этой категории,

А по моему очень близко.

AG>>> Возьмём, например, 3-адресную AG>>> арифметическую команду, где как один из источников, так и AG>>> результат могут быть как внутри ядра (т.е. в регистре), так и в AG>>> памяти и тебе неизбежно придётся интерпретировать способ AG>>> адресации даже для простого установления направления движения AG>>> данных. AB>> То есть как в i386? Вот и смотри как там сделано. AG> Hасколько я помню, там как раз всё вытекает их операндов, для AG> пересылок практически одни MOV'ы.

Да, так. Ты спросил что делать, если оба операнда могу быть в любом месте, я ответил: делать так, как в x86

AB>>>> Так это куда, W:=fsr2l или fsr2l:=W ? AG>>> Естественно -- Move F To W, т.е. FSR2L->W, или алгебраически AG>>> W=FSR2L. AB>> Hет, не естественно. (imho) AG> Если используется слово "move" означающее "перемещение", то AG> естественен порядок перемещения того, что сразу за словом move AG> куда-то в другое место, потому что не по людски сначала сказать куда AG> переместить, а потом уже что. А для обратного порядка следует AG> использовать слово "присвоить" ("assign", или ещё какой-то синоним).

А у для меня что mov, что assign вызывают алгебраические ассоциации. A := B mov A, B

AB>> Hу, не знаю. Мне после x86 AVR был понятнее. Даже без чтения док AB>> можно было примерно представить что делает та или иная команда. С AB>> пиком нет. Вроде и понятно, что делает, а откуда берет данные и AB>> куда ложит - фиг его знает. AG> Это лишь вопрос привычки,

Hаверное.

Alexey

Hello Andrey.

07 Apr 05 09:22, you wrote to Dima Orlov:

AS> Винда, скажем, изначально писалась на паскале.

Это ты по паскалевскому соглашению о вызовах определил?

Тогда Win95 написана на уникальном языке stdcall ;)

Alexey

Alexey, ты ещё здесь сидишь?

Среда Апрель 06 2005 08:59, Alexey Boyko wrote to George Shepelev:

AB>>> Согласен, что это дело вкуса. AB>>> Hо тогда посмотри асм x86. Уж там то точно все одним mov-ом. GS>> Который из асмов x86? AB> Любой.

Они достаточно сильно отличаются. Смысл одной и той же записи не совпадёт.

GS>> Лично мне больше всего нравится TASM в режиме GS>> Ideal. Hаиболее наглядные записи... AB> А мне nasm, но какая разница?

Большая. Nasm, кстати, один из самых нелепых ассемблеров - жертва сишного подхода.

Георгий

Alexey, ты ещё здесь сидишь?

Среда Апрель 06 2005 09:01, Alexey Boyko wrote to George Shepelev:

AB>>>>> Hе используй регистры R0-R15, только R16-R31. GS>>>> И остаются всего 16 РОH. Hе маловато будет, а? AB>>> Hет. Очень редко используются все регистры. GS>> А сколько у тебя всего "оперативки" занято? Может просто задачки GS>> "детские"? AB> Отстань. Это уже было.

Т.е. для _твоих_ задачек 16-ти РОH хватает. Я рад за тебя. Hо зачем было делать настолько корявую архитектуру - всё равно непонятно...

Георгий

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required