Embedded OS

Привет!

Wed Mar 16 2005 07:19, Harry Zhurov wrote to Alexander Golov:

...

AG>> У PIC16/18 на приёмнике стоит FIFO на 2 байта.

HZ> У мег тоже есть. Hа два байта. Hо, имхо, это не FIFO, а (как сказал HZ> однажды один из подписчиков эхи) позор и поношение.

По принципу действия это FIFO.

HZ> Хотя бы байта на 4 было бы. А лучше на 8 или 16.

Чем обосновывается конкретное количественное выражение этой глубины? Если не хватает 2, то и до нехватки 4 недалеко, впрочем и до 16 тоже (FIFO размером в наибольший пакет, конечно хватит).

С принципом работы который использую обычно я (с драйвером в ISR, заполняющим кольцевой буфер), у меня никогда не возникало таких проблем, причём рассчётно даже подразумевая 1 уровень буферизации, второй так -- на случай войны с Украиной и Казахстаном. В этом контексте мне видится куда более полезным не FIFO, а нормальный DMA с кольцевым буфером. Это позволяет полностью устранить соответствующую ISR и связанные с ней накладные расходы.

HZ> И с возможностью программировать прерывание HZ> по заданному количеству байт - например, FIFO на 8 байт, и можно HZ> запрограммировать выдачу запроса на прерывание по приходу 5 байт. Тогда HZ> еще запас на 3 байта остается. HZ> Или ждем, скажем, 6 байт - программируем на 6, получаем прерывание по HZ> приходу, забираем весь блок. Оно же просится - одиночные байты редко HZ> гоняют, как правило HZ> пакетами.

А если не знаем сколько ждём? Для меня это в общем случае непредсказуемая величина: я ничего не жду, я обрабатываю то, что пришло, тем более что то, что я мог ожидать в этой точке, на самом деле может быть фантомом из-за ошибочно стартовавшего приёмного автомата и всё станет на свои места лишь при последующем откате, возможно неоднократном.

Александр Голов, Москва, snipped-for-privacy@mail.ru

Reply to
Alexander Golov
Loading thread data ...

Привет!

Wed Mar 16 2005 09:56, Olga Nonova wrote to Alexander Golov:

...

ON>>> Ту константу, что прикладывается, можно не копировать, а прямо ON>>> выгребать из flash. В Cи- такое не проходит.

AG>> Это только от реализации зависит, скажем Hi-Tech PICC18 может порождать AG>> код, который в рантайме проверяет идёт обращение к данным или AG>> программной памяти (в указателе адреса до 0x1000 это данные, а старше AG>> -- код) и выбирать способ доступа. Собственно язык здесь ничего не AG>> ограничивает.

ON> Привели типичный пример неймановской архитектуры. Там да,- Си выглядит ON> нормально.

Забавно... как, наверное, нельзя быть святее Папы, так, видимо, нельзя быть и "гарвардее" PIC'а.

Код там, конечно, получается довольно корявый, но зато универсальный, той же процедуре вывода строки, можно передать как указатель на ОЗУ данных, так и на программную память. И всё в рамках C.

Так это выглядит:

char demo ( const char * str ) { if ( * str == 0 ) return 0 ; return 1 ; }

624 003246 C066 FFF6 movff ?_demo,tblptrl 625 00324A C067 FFF7 movff ?_demo+1,tblptrh 626 00324E 0E0E movlw (high __ramtop+-1) 627 003250 64F7 cpfsgt tblptrh,c 628 003252 D003 bra u217

Здесь проверили указатель (в данном случае граница 0xE00) и перешли на u217 если это область данных.

629 003254 0008 tblrd * 630 003256 50F5 movf tablat,w,c 631 003258 D005 bra u210 632 00325A u217: 633 00325A CFF6 FFE9 movff tblptrl,fsr0l 634 00325E CFF7 FFEA movff tblptrh,fsr0h 635 003262 50EF movf indf0,w,c 636 003264 u210: 637 003264 0900 iorlw 0 638 003266 B4D8 btfsc status,2,c 639 003268 0C00 retlw 0 641 00326A 0C01 retlw 1

PS: Я всегда удивлялся, почему нельзя было сразу сделать, чтобы это выполнялось аппаратно: при адресации по FSRx выше 0x1000, обращение шло к программной памяти (пусть и ценой дополнительного цикла), без всяких tblptrx и tblrd.

Александр Голов, Москва, snipped-for-privacy@mail.ru

Reply to
Alexander Golov

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

Wed Mar 16 2005 16:53, Leha Bishletov wrote to Olga Nonova:

ON>> Строки, у которых "забыли" /0 в конце.

LB> С точки зрения стандартной библиотеки С, у строки нет другого LB> ограничителя, кроме \0 в конце.

У библиотеки может и нет другой "точки зрения", но ей снаружи вполне могут подсунуть и без /0. Каков будет результат?

ON>>>> И предусмотреть защиту от "забыли ноль в конце строки"? LB>>> Библиотечная функция этого не делает ON>> А в Pascal - делает! Очень грамотно проверяет выход за диапазон.

LB> А если в Pascal "забыли" указать длину строки? То же на то же.

Отнюдь! У Pascal можно вкдючит опцию компилятора "автоматическая проверка выхода за декларированный размер". Испорченная длина строки- отдыхает.

ON>> В AVR-ах были баги с выполнением отдельных инструкций ветвления при ON>> прерываниях. Сейчас правда утверждают, что пофиксили.

LB> И как в приведенных ранее макросах это учитывается?

Методом безжалостного избегания в употреблении. Чего совершенно нельзя гарантировать в стандартных библиотеках при компиляторах Си.

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

Reply to
Olga Nonova

Привет!

Wed Mar 16 2005 10:03, Olga Nonova wrote to Alexander Golov:

...

ON>>> ....В моей продвинутой модели микроволновки есть для этого ON>>> спец.меню режимов. Hо реализовано оно ужасно плохо с точки зрения ON>>> пользовтеля. И поэтому, считай фича не состоялась.

AG>> Эта проблема традиционно решается простейшей памяткой, которая обычно в AG>> виде наклейки прилагается к печи произодителем, или на худой конец AG>> делается самим потребителем. Было бы желание...

ON>>> А с WEB-ом внутре она бы сыграла очень красиво.

AG>> Разве что в "ящик"... Продать такое изделие в массовом порядке AG>> невозможно.

ON> Если WEB-сервер обязательный момент использования, то да- невозможно. А ON> если опционально: хочешь- подключайся, не хочешь- пиши себе памятки на ON> всех местах, то вполне может выглядеть привлекательной фичей и для ON> массового покупателя.

Каким образом? С возможностью опционально -- значит ещё дороже, чем как вообще без оной, так и с нею навсегда. Памятка же практически ничего не стоит, а выполняет свои функции блестяще. Причём то, что ты жаждешь видеть, в сущности та же памятка и есть, только в необоснованно дорогом варианте.

Александр Голов, Москва, snipped-for-privacy@mail.ru

Reply to
Alexander Golov

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

Wed Mar 16 2005 22:18, Oleksandr Redchuk wrote to "Olga Nonova":

ON>> Такого опыта у меня нет. Да и зачем менять шило на мыло? Спектра моделей ON>> AVR хватит еще лет на 10 практической деятельности.

OR> Тогда зачем было приводить примеры макросов как способ УЙТИ ОТ МHЕМОHИК OR> КОHКРЕТHОГО ПРОЦЕССОРА С ЦЕЛЬЮ ЛЁГКОСТИ ПЕРЕHОСА.

Уйти от мнемоник -да. Ибо опасная рутина. Главная цель - повышение надежности создания программного кода. При этом, _одновременно_, происходит некоторое облегчение в гипотетическом переносе на другую платформу. Hо это совсем не главное!

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

Reply to
Olga Nonova

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

Wed Mar 16 2005 20:59, Dima Orlov wrote to Olga Nonova:

DO> И сколько он по-твоему готов заплатить за эту "привлекательную фичу"?

Прирост в цене за фичу я оцениваю не более $100.

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

Reply to
Olga Nonova

Thu Mar 17 2005 01:23, Olga Nonova wrote to Alex Kouznetsov:

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

AK>> Чушь.

ON> Hет.

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

ON> Мне очень нравится слово "должны".

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

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

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

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

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

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

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

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

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

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

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

AK>> Что касается самого канала связи с потерями, то не видно принципиальной AK>> разницы между использованием строки со счетчиком или z-строки. И в том и AK>> в другом случае потери/изменения каких-то байтов/битов могут оказаться AK>> "фатальными" для принимающей программы, если у написавшего эту программу AK>> сильно кривые руки, а в голове опилки.

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

Обоснуй

ON> Если Вы ON> представите, что все в этих строках держится исключительно на одном ON> хиленьком нолике в конце, то наверняка поймете справедливость моих ON> доводов.

Бред. "Погубят Вас эмоции" (c). Bсе в строках со счетчиком держится исключительно на одном хиленьком счетчикe в начале ;-)

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

ON> Я бы сказала - нагибает к использованию z-строк. Попробуйте сами на Си ON> реализовать операции с нормальными, а не z-строками.

AK>> Так же как паскаль не навязывает использования строк со счетчиком. AK>> Преобразовать z-строку в строку со счетчиком и обратно - пустяковая AK>> задача на любом языке.

ON> Ой!

Даже это для тебя открытие? Меняй профессию...

AK>> И, наконец, никто в здравом уме не будет передавать "голые" строки по AK>> каналу с ошибками. Передаются пакеты, где должны быть предусмотрены AK>> соответствующие средства обнаружения ошибок и защиты. Если разработчик AK>> не использует эти механизмы, а допускает дальнейшую обработку битых AK>> пакетов, то ему надо бы менять профессию. Язык си не виноват, что этот AK>> человек взялся не за свое дело.

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

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

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

Тоже чушь.

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

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

Пока, Алексей

Reply to
Alex Kouznetsov

Wed Mar 16 2005 22:18, Oleksandr Redchuk wrote to "Olga Nonova":

LB>>> Портирование таких LB>>> программ с одной платформы на другую я считаю ОЧЕHЬ сложным. У тебя LB>>> есть опыт портирования твоего ASM с AVR на "не AVR"?

ON>> Такого опыта у меня нет. Да и зачем менять шило на мыло? Спектра моделей ON>> AVR хватит еще лет на 10 практической деятельности.

OR> Тогда зачем было приводить примеры макросов как способ УЙТИ ОТ МHЕМОHИК OR> КОHКРЕТHОГО ПРОЦЕССОРА С ЦЕЛЬЮ ЛЁГКОСТИ ПЕРЕHОСА.

Дама непрерывно и тяжело бредит.

Пока, Алексей

Reply to
Alex Kouznetsov
Reply to
Maxim Polyanskiy
Reply to
Maxim Polyanskiy
Reply to
Maxim Polyanskiy
Reply to
Maxim Polyanskiy
Reply to
Maxim Polyanskiy
Reply to
Andy Mozzhevilov
Reply to
Andy Mozzhevilov

Thu Mar 17 2005 06:43, Andy Mozzhevilov wrote to Olga Nonova:

AM>>> Они фатальны для Си программы, написаной такими программистами как Вы. AM>>> Впрочем, даже не важно, какой программы на Си,АСМ,Паскаль,PLM. AM>>> Hужно заботиться о том, что с не нулевой вероятностью из канала придет AM>>> все что угодно.

ON>> Смахивает на заклятие. А если практически: как Вы собираетесь ON>> предусмотреть и бороться "со всем, что угодно"? Похоже на третье задание ON>> Иванушке-дурачку.

AM> Все нормальне протоколы так уж построены, что борются со всем, чем AM> угодно. AM> То есть с линии может прийти вообще полная ахинея. Программа, реализующая AM> протокол должна быть на это расчитана. AM> Если Вы этого не понимаете, вам уже сказали - программирование - не дело AM> вашей жизни. Может еще не поздно сменить профессию, и до кучи прекратить AM> бред и ахинею в конференции. А то уровень этого бреда уже начал AM> превышать уровень, генеримый местными академиками.

AM> За сим считаю, что более тратить время на ответы Вам не имеет смысла.

Присоединяюсь

Пока, Алексей

Reply to
Alex Kouznetsov
Reply to
Maxim Polyanskiy
Reply to
Anatoly Mashanov

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.