Embedded OS

16-Mar-05 08:12 Andrej Arnold wrote to Leha Bishletov:

AA> Как в таких случаях говорят - не ставь телегу впереди лошади.

AA> А прямым текстом - эти макросы были написаны ещё тогда, AA> когда и такой абревиатуры авр никто и не слыхивал.

Я немного позанудствую.

Речь шла отнюдь не о портировании макросов.

15-Mar-05 21:50 Olga Nonova wrote to Leha Bishletov:

ON>>> Грамотные ассемблерщики работают в макросах, библиотеку которых

------------------------------^^^^^^^^^^^^^^^^^^^ ON>>> каждый создал и отладил сам для себя. Чисто машинных команд в ON>>> исходниках практически не встречается. Поэтому, для перехода на

---------------------------------------------^^^^^^^^^^^^^^^^^^^^^^^ ON>>> другую платформу перелопачивать килобайты ассемблера вовсе не

------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ON>>> требуется.

------^^^^^^^^^^

LB>> Можно увидеть хотя бы фрагмент этих макросов? Особенно интересно, как

-------------------------------------^^^^ LB>> решается задача по контролю соответствия типов (на С это происходит LB>> автоматически). Еще было бы не плохо, если бы была возможность LB>> организовать т.н. "компилированый стек".

И вот в качестве примера макросов, сильно облегчающих переход на другую платформу (перевод ПРОГРАММЫ, а не этих макросов) выдано несколько макросов, которые, не спорю, облегчают написание и сопровождение программы, но перевод её на другую платформу... "облиште своi дiвочi мрii"

ON> MoveByte MACRO Byt1,Byt2 ON> lds R16,Byt1 ON> sts Byt2,R16 ON> ENDM Всё вроде бы нормально. На первый взгляд этот макрос (макрос, а не программа!) в пол-чиха портируется на любой макроассемблер. На второй - на MCS51 вдруг захочется уточнить - а между чем и чем (data/idata/xdata) этот макрос должен перегонять информацию. Имеется-то, извините, 9 комбинаций. Ну ладно, смело предположим, что мы нашли для MCS51 макроассемблер с операцией spaceof(var), возвращающей пространство размещения Byt1, Byt2 и через условную компиляцию слепили макрос, который делает всё, что надо. На третий - натыкаемся на процессор с одним-двумя аккумуляторами или там вообще с одним рабочим регистром, который портится при использовании легко спортированного МАКРОСА, копирующего память в память. А ПРОГРАММА, на минуточку так, писалась в расчёте на 32-роновый AVR и в 90% (ну пусть 30%, от этого не легче) мест в этих ронах в процессе работы макроса лежала спокойно необходимая для работы информация. И программу перелопачивать всю. А вот с Byt2 = Byt1; таких проблем не будет.

Единственное, на мой взгляд, что действительно перенесётся легко с процессора на процессор благодаря макросам - это "виртуализированные" вычисления. В смысле использования виртуальной машины. Заводим один-два 32-битных аккумулятора (у AVR - на РОН, у pic16 - в регистровом файле, у 68hc11 - в странице короткой адресации). И пишем себе _load varX _mul varX _store temp1 _load varY _mul varY _add temp1 _sqrt _cmp varR brsh куда_надо

Да, такое перенесётся легко после реализации такой же виртуальной машины. Но всё остальное - всё то, что использует не виртуальный вычислитель, а реальное ядро - макросы перенести помогут слабо. И чем эффективнее использует - тем тяжелее перенести (т.е. тем ближе к написанию новой программы глядя на старую как на справку по алгоритмам). А если ВСЯ программа сделана не для реального процессора, а для реализованного на нём виртуального - то как-то тогда не совсем понятно -

1) при чём тут асемблер _реального_ процессора и разговоры о _переносе_ _ассемблерной_ программы, а не о _реализации_ виртуальной машины на другой платформе 2) не лучше ли сразу было взять Forth или слепить с его (или не с его) помощью компилятор нужного задаче-ориентированного языка в "ассемблер" выбранной виртуальной машины.

wbr,

Reply to
Oleksandr Redchuk
Loading thread data ...
Reply to
Andy Mozzhevilov

Здравствуйте, Уважаемый Alex!

Thu Mar 17 2005 02:57, Alex Kouznetsov wrote to Olga Nonova:

AK> "должны" - в том смысле, что позаботиться об этом должен программист, AK> язык к этому не имеет отношения

ON>> А как на самом деле происходит? ON>> Представьте, оказывается до сих пор программы, написанные на C++ и на ON>> Pascal с очень большим трудом находят общий язык между собой. Это ON>> замечание обычно хорошо понятно хоть раз писавшим DLL-ки.

AK> в огороде бузина...

Совсем нет. Речь зашла о передаче данных от программы к программе, в частности, через каналы связи. Здесь точно та же проблема, как с DLL-ками. И "ноль забыть" при интеграции системы - раз плюнуть. Весь вопрос только в одном- сколько времени будет искать "потерю нуля" сишник и сколько паскалист.

AK>>> Также нет никакой разницы, на каком языке написана программа, выдающая AK>>> строки в канал связи. Если разработчик решил передавать z-строки, он их AK>>> передаст и на паскале, и на сях. Если же он решил использовать строки AK>>> со счетчиком, он опять же сделает их и на си и на паскале.

ON>> Пример в студию, как на Си реализовать паскалевскую строку со счетчиком.

AK> Pукопашное преобразование: AK> #include <string.h>

AK> char zstr[] = "примерчик"; AK> char cstr[strlen(zstr)]; /* строка со счетчиком AK> cstr[0] = strlen(zstr); AK> for (int i=0; i<strlen(zstr); i++) AK> cstr[i+1] = zstr[i]; AK> Результат можешь выдавать в канал связи, раз тебе этого хочется.

Спасибо. Однако слишком поспешно исполнено, чтобы было рассмотрено всерьез. Так например, сразу видны тривиальные ошибки синтаксиса, надо было писать как минимум: char cstr[SizeOf(zstr)]. А по хорошему, чтобы был еще "запас" на работу со строкой SizeOf(zstr)+ AnyRest. Плюс к тому, в вашем цикле будет избыточное число раз вызываться вычисление strlen(zstr), что для z-строк занимает достаточное время. Hу а в-третьих, как библиотеки С-компилятора станут работать с образованной таким образом "строкой", а на самом деле структурой? Или предлагаете самому все написать с нуля?

ON>> Hа Паскале это делается просто в декларациях:

ON>> Var ON>> MyString : string[32];

ON>> И все. Сразу есть переменная, сразу понятен размер ее контейнера, ON>> мгновенно получаете автоматичекий контроль выхода за допустимый диапазон ON>> и можно спокойно плевать на забывчивость кем-то "закрывающих нулей".

AK> Шило на мыло. Теперь рассмотри вариант, когда канал с помехами меняет AK> значение счетчика.

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

ON>> ... Да, все _может_ оказаться фатальным. Hо у сишных ON>> z-строк вероятность этого "может" значительно больше.

AK> Обоснуй

См выше.

ON>> Про механизмы проверки целостности приходящих пакетов- очень разумно.

AK> Тогдa не нeси ахинею про строки, это не имеет отношения к задаче: AK> "Зато в приходящих из канала связи пакетах можно встретить и не такие AK> чудеса забывчивости. И последствия фатальны для скомпилированной на Си AK> программы." (c) Тебе сразу было сказано, что это чушь.

Попробуйте все-таки мыслено представить себе процесс интеграции системы.

ON>> Уважаемый Алексей! Давайте вернемся к началу разговора. Он начался с ON>> RTOS в исходниках на Си для встраивания в маленькие однокристаллки. В ON>> этом конкретном случае использование Си представляется совершенно ON>> пагубным занятием, а не вообще-"он плохой!".

AK> Тоже чушь.

"Сказал, как отрезал!"

ON>> Есть и другие случаи, когда ON>> использование Си плохо, я их, надеюсь, показала.

AK> Ты не показала ничего, кроме своего дремучего невежества и зашоренности. AK> Сон разума рождает чудовищ (c)

Да, это особенно заметно на тех С-примерах, что Вы приводите.

Всего Вам Хорошего Ольга

Reply to
Olga Nonova

Здравствуйте, Уважаемый Maxim!

Thu Mar 17 2005 05:42, Maxim Polyanskiy wrote to Olga Nonova:

ON>> Совсем меня запутали в терминах. Какой же это гарвард, если компилятор ON>> может разобраться без всяких дополнительных аттрибутов в типах памяти, ON>> просто по диапазону адресов? Hеправильный какой-то гарвард получается.

MP> Они просто не понимают о чем речь и тебя специально запутывают.

Я уже заметила, что умение оценивать все на живой практике- не самый сильный конек моих оппонентов.

MP> PIC - Гарвард.

Хорошо, пусть будет так.

MP> Он имеет все недостатки Гарварда при работе с указателями и всем, что из MP> них растет (любым массивом втч строковым). Компилятор ни в чем не MP> разбирается. Ему надо указывать в конечной точке откуда берется массив. MP> (Hе дай бог вариант, что он берется и оттуда и оттуда, тогда он будет MP> генерить ужасный код).

Все правильно. Следует только уточнить, что речь идет о компиляторах с Си. С языка, который изначально создавался и оптимизировался под сравнительно большие машины с неймановской архитектурой. А когда академические программисты "затащили" его в мир мелких девайсов, то Си там стал выглядеть очень некрасиво.

Всего Вам Хорошего Ольга

Reply to
Olga Nonova
Reply to
Vladimir Karpenko
Reply to
Sergey Davydov
Reply to
George Shepelev
Reply to
George Shepelev
Reply to
George Shepelev
Reply to
George Shepelev
Reply to
Sergey Davydov
Reply to
George Shepelev
Reply to
George Shepelev

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.