Embedded OS

17-Mar-05 05:09 Maxim Polyanskiy wrote to Dima Orlov:

DO>> Оно не просто так отсутствует. Оно просто на фиг не нужно. Хочешь DO>> готовой пищи - иди в ресторан или закажи ее на дом. А заниматься для DO>> этого нетривиальным программированием сложных роботов никто не будет. MP> Ключевое слово "иди". MP> Как известно двигателью прогресса является лень. MP> Еще иногда цена вопроса. MP> Так что это будет изобретено и запрограммированно ;)

Мне почему-то кажется, что раньше появятся автоматизированные микро-кухни на чердаке/в подвале каждого дома и "мусоропроводы наоборот". Так как хоть двигателем прогресса является лень, левая пятка - является дирижёром. И если мне вдруг на ужин захотелось не курицы, а тушеных с овощами кальмаров, детям - по кусочку жареного филе сёмги, а жене - фаршированного судака - то, во-первых, придётся холодильник иметь побольше, во-вторых - одной СВЧ-печки просто не хватит, в третьих - придётся ждать дольше, чем левая пятка согласна, в четвёртых - от переругивания на кухне между слишком разговорчивыми холодильником, парой СВЧ-печек, грилем и парой роботов - мне просто плохо станет.

wbr, p.s. какой, извините, web-интерфейс??? Голосовое управление нужно. Чтобы сквозь дверь ванной можно было с намыленной головой крикнуть "кофе и гренки, пожалуйста!".

Reply to
Oleksandr Redchuk
Loading thread data ...

Thu Mar 17 2005 20:03, Andy Mozzhevilov wrote to Alex Kouznetsov:

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

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

AM> Вот думаю, может отшибить ее нафиг на /400 ?

Как знаешь, но я бы оставил. Насколько я понимаю, их интересуют именно реакции, а отшибание - тоже реакция. Ну вроде как в дневниках Йона Тихого, где в послании "Спасем Космос" было описано растение, которое питалось руганью.

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

Кстати, полное имя виртуала вроде бы "ольга николаевна нонова", что тоже достаточно прозрачно: ник 0=none

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

Reply to
Alex Kouznetsov
Reply to
Peter Kostenko

Привет!

Thu Mar 17 2005 08:08, Maxim Polyanskiy wrote to Alexander Golov:

...

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

MP> Потому, что тогда бы это был C-ориентированный Гарвард. А подобного бреда MP> природа еще не видела. Специально заточенные под реализацию компилятора MP> команды - это удел отдельных реализаций архитектуры ФонHеймана.

Мда, это уже какие-то навязчивые идеи...

Речь шла прежде всего об удобствах доступа к программной памяти (LFSR, PLUSW, банальном ускорении доступа, наконец) и передачи ссылок (если ты не в курсе, ссылки и на асме удобно передавать единым образом, а не раздельно для данных и кода). Ну и, естественно, о возможности размещения Software Stack во внешнем ОЗУ.

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

Reply to
Alexander Golov

Привет!

Thu Mar 17 2005 18:37, Maxim Polyanskiy wrote to Alexey Stekolshikow:

...

AS>> Угу. Атмел анонсировал 1-cycle x51 MCU. Пока только заменители 2051 AS>> и 4051, но обещают всю линейку.

MP> В реале конечно это просто увеличение присутствия x51 на рынке.

Если люди инвестируют средства в модернизацию старинных МК при наличии собственного одноклассного семейства, это может говорить разве что о рыночных проблемах с этим собственным семейством, а уж никак о рыночной динамике 51-го.

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

Reply to
Alexander Golov
Reply to
Alexander Derazhne

Thu, 17 Mar 2005 21:00:20 +0300 Alexey V Bugrov wrote to Harry Zhurov:

[...]

HZ>> Как быть в случае использования ОС для другой платформы?

AV> Hикак. Ядро (таскманагер) писать с нуля. Все остальное может быть и на С AV> написано, легко перенесется.

Похоже, у нас несколько разное восприятие понятия "ядро". Вот ISR, где возможно перепланирование - это ядро?

HZ>> Все эти HZ>> завязки на конкретный компилятор конкретной платформы, конечно, дают HZ>> некую свободу в конкретном случае, но решение получается частным со HZ>> всеми вытекающими.

AV> Даже для uC/OS Лябрус вполне прозрачно написал, что если интересует AV> результат, а не процесс, то самая главная часть ОС, AV> в том числе планировщик, должна быть написана на асме. Обвеска на C - AV> сколько угодно.

Но сам-то он все на С делает. На асме только низкоуровневый код вроде переключения контекстов. И тут я с ним целиком и полностью согласен, и делаю именно так. Но функции переключения контекстов - очень небольшая часть от всего остального. А все остальное прекрасно пишется на С и оверхеда почти не создает.

[...]

AV>>> 4. Вызов "внеосевого прерывания" с его собственным AV>>> сохранением восстановлением "контекста", тех самых двух регистров.

HZ>> Как это "вызов"? Оно уже вызвано. Аппаратно. Мы в нем уже HZ>> находимся.

AV> Да. Обработчик прерывания - это функция. Какая разница кто ее вызовет: AV> внешнее событие или другой код? Единственная AV> проблема - это reti вместо ret на выходе. Hо это можно обойти.

А вектора прерываний ты сам руками вставляешь? Поясню, что имеется в виду: в IAR'е, например, есть волшебное слово __interrupt, которое придает функции особый статус - в частности, компилятор сохраняет все используемые регистры, а не только local. И еще там же предназначена к использованию волшебная прагма: #pragma vector=..., где указываешь адрес ISR. Таким образом, компилятор делает всю остальную работу - помещение адреса ISR в таблицу векторов прерываний, реализует поведение внутри ISR как это полагается делать (все же обработчик прерываний - непростая функция).

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

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

AV> Ой. Эти десять строчек надо на асме писать.

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

[...]

AV>>> Hу что, запредельные накладные расходы? HZ>> Hет. Только я пока не вижу, как это можно реализовать, не HZ>> привязываясь к нюансам МК и используемого компилятора.

AV> Интересует процесс или результат? :) AV> Hикто же тебе не предлагает всю ось каждый раз писать с нуля. Только AV> небольшую часть на асме для каждой платформы и/или AV> компилятора. Или это противоречит идее? :)

Никакой особой идеи тут нет. Есть реальные требования. Мне приходится работать не с одним семейством МК, тут надо учитывать это обстоятельство. В итоге мой путь - как в uCOS: все на ЯВУ за исключением малой части низкоуровневого кода, который пишется на асме для каждой платформы и который по-другому просто не реализовать. ISR - на ЯВУ со всеми возможными для пользователя удобствами при максимальной безопасности. Т.е. достаточно написать:

#pragma vector=... OS_INTERRUPT void Slon_ISR() { TISR_Wrapper ISR_Wrapper;

... // прикладной код }

И все. Остальное делает компилятор, включая сохранение/восстановление контекста, переключение на стек прерываний, перепланирование.

Единственный минус тут (с чего, собсно, и началось обсуждение) - это неэффективное использование ресурсов в случае, когда прерывание не является источником событий для ОС. Для этих случаев можно применить и альтернативные варианты реализации. Хоть складывание в буфер байтов с периодическим относительно редким опросом, хоть путем эмуляции софтового прерывания, задействовав для этого любое свободное аппаратное, хоть путем подмены векторов прерываний, как в случае двух ISR.

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

Если будет требоваться скорость (либо какие-то другие причины вынудят), то так и делаем. Что выбрать - второй вопрос. Но пока по скорости устраивает, можно и не дергаться, а решить все в лоб.

[...]

HZ>> Более надежным решением, имхо, является просто отобрать у HZ>> компилятора возможность рулить процессом сохранения/восстановления HZ>> регистров в прерывании (осевом). Т.е. чтобы он вообще к этому не HZ>> касался. Тогда пишем на входе свой код сохранения, на выходе свой код HZ>> восстановления.

AV> Hа асме?

Естественно. Пишется макрос, который состоит из ассемблерных вставок. Один на входе (сохранение), другой на выходе (восстановление).

HZ>> сидят, одно ПЛИС, другое МК. С ПЛИС проблем нет, она все успевает со HZ>> свистом, что понятно, а вот для МК приходится паузы между передачами HZ>> байтов вводить, чтобы он гарантированно успевал обменивать байты на HZ>> своем конце.

AV> Я никак не против, но если этого не делают, значит без этого можно AV> обойтись. Или взять то, где это есть. :)

Подозреваю, что просто на момент появления мода еще не пришла. Но тенденция, имхо уже есть. Думаю, через несколько лет в старших членах семейств мелких МК будет появляться коммуникационная периферия с буферами.

Reply to
Harry Zhurov

Thu, 17 Mar 2005 19:42:46 +0300 Andy Mozzhevilov wrote to Harry Zhurov:

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

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

К сожалению, тут нас не спрашивают. Когда ты написал:

__interrupt void Slon_ISR() { ... }

то любой вызов функции внутри этого обработчика автоматически приведет к тому, что компилятор сохранит local регистры (у него регистры делятся на scratch и local. scratch - это рабочие, их любая функция может юзать, не сохраняя, и вызывающая в них свои временные значения не хранит. А local - это наоборот те, которые можно использовать, только предварительно сохранив значение). Поскольку в прерывании все используемые регистры должны быть сохранены, то вызов из ISR любой функции, чье тело недоступно в точке вызова, вынуждает компилятор сохранять все local регистры (scratch и так сохранит вызванная).

Можно, конечно, слово __interrupt не писать, а оформить в виде обычной функции и асмовом файле руками вставить вектор. Делал и так. Но не могу сказать, что этот вариант вызывает симпатию и удовлетворение. :)

Reply to
Harry Zhurov
Reply to
Alexander Torres
Reply to
Alexey Stekolshikow

Thu Mar 17 2005 22:39, Kirill Frolov wrote to Alex Kouznetsov:

KF> Hемедленно нажми на RESET, Alex Kouznetsov!

KF> 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];

KF> Я фигею, дорогая редакция...

"Калаид, который уже давно бился, шипел и содрогался, произнес наконец: 'По-п-погодка нынче хорошая, старички! К-как спалось?' Всегда он из-за своего дефекта речи отстает от событий." (с) АБС, "Второе нашествие марсиан"

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

Reply to
Alex Kouznetsov
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.