Re Кто pаботал с Windows Embedded?

Dec 16, 2004 Last reply: 21 years ago 900 Replies
19-Jan-05 23:12 Dennis Opanasenko wrote to All:

DO> Код сгенерирован IAR 3.20D. Hу а про R16 - конечно перегружает, задача DO> не DO> обязана сохранить его содержимое. Hу а в асме конечно, можно написать, DO> только парицца неохота. Нет, не так. Не думаю, что у IAR нет регистров, которые не должна трогать вызываемая подпрограмма, так что можно было просто в такой регистр бросить байт и в нём безопасно проверять флаги.

Дело в возможном изменении самой структуры status вызванной функцией, см. мой ответ Полянскому.

wbr,

19-Jan-05 08:40 Maxim Polyanskiy wrote to Anton Abrosimov:

AA>> Я пpивел эту стpуктуpу только на твое утвеpждение, что в сях плохо AA>> pеализована pабота с битами. Так вот, switch pаботает с несколькими AA>> значениями одной пеpеменной, здесь же несколько пеpеменных. В таблицу AA>> набоp флагов никак не скомпилиpуется, вне зависимости, битовые они или AA>> байтовые. А скомпилиться пpовеpка этих флогов может, напpимеp, в AA>> подобную последовательность: AA>> lds r16,... AA>> sbrc r16,0 AA>> rcall ... AA>> sbrc r16,1 AA>> rcall ... AA>> ... MP> Hе пойдет: 1) в это никогда не откомпилируется (ну во всяком случае при MP> текущем интелекте компиллеров). "что я делаю не так?" (С) коллективный разум эхи. Конечно, код немножечко не такой, как приведено, но об этом ниже.

struct { unsigned char a:1; unsigned char b:1; } flags;

void fa(void); void fb(void);

void f(void) { if(flags.a) fa(); if(flags.b) fb(); }

avr-gcc -Os -S дал такое

.text .global f .type f, @function f: lds r24,flags sbrc r24,0 rcall fa lds r24,flags sbrc r24,1 rcall fb ret

MP> 2) кто сказал, что не срется R16 в задаче? А дело тут не в том, "срётся или не срётся R16", а в том, что компилятор понятия не имеет - "срётся или не срётся" сама структура flags. Любая вызванная функция может изменить любую глобальную переменную. Поэтому компилятор просто обязан перезагрузить flags в регистр. gcc позволяет сказать, что функция не имеет побочных эффектов, т.е. не меняет ничего "на стороне". Тогда имеем:

struct { unsigned char a:1; unsigned char b:1; } flags;

int fa(void) __attribute__((pure)); int fb(void) __attribute__((pure));

int f(void) { int temp=0; if(flags.a) temp=fa(); if(flags.b) temp=fb(); return temp; }

avr-gcc -Os -S

.text .global f .type f, @function f: push r28 ldi r24,lo8(0) ldi r25,hi8(0) lds r28,flags sbrc r28,0 rcall fa sbrc r28,1 rcall fb pop r28 ret

И это при том, что в общем и целом я уровнем оптимизации avr-gcc недоволен :-)

wbr,

Hello, George!

Сpд Янв 19 2005, George Shepelev писал к Maxim Polyanskiy по поводу "Re Кто pаботал с Windows Embedded?." GS> О, да, конечно фантастика. Вот у меня приятель (долгое время работает GS> с компьютерами, большой опыт работы с NT, поскольку много лет GS> использует двухпроцессорный комп) пытался подключать фирменные GS> сотовики (SONY ERICSSON) Так так. GS> к компу через фирменный USB переходничок (Texas Instruments) О существовании фирменных USB кабелей S.E. DCU-10 с фирменными драверами он конечно не знает. GS> Юзерская программа MobilEdit! version 1.94 при обращении к телефону GS> под Server 2003 либо XP SP2 валит систему и убивает все в каталоге GS> CONFIG. Под Win 98 работает нормально. Hу так это отдельная кривость отдельных драйверов. GS> Юзерская программа floAt MobileAgent - FMA version 0.1.1.16 stable Что-то пингвинами запахло (кстати в природе пингвины в местах своего массового проживания черезвычайно противно воняют, тухлой рыбой). GS> Георгий WBR! Maxim Polyanskiy.

Здравствуйте.

OR> struct { OR> unsigned char a:1; OR> unsigned char b:1; OR> } flags;

OR> void fa(void); OR> void fb(void);

OR> void f(void) { OR> if(flags.a) fa(); OR> if(flags.b) fb(); OR> }

OR> avr-gcc -Os -S дал такое

OR> .text OR> .global f OR> .type f, @function OR> f: OR> lds r24,flags OR> sbrc r24,0 OR> rcall fa OR> lds r24,flags OR> sbrc r24,1 OR> rcall fb OR> ret

MP>> 2) кто сказал, что не срется R16 в задаче? OR> А дело тут не в том, "срётся или не срётся R16", а в том, что компилятор OR> понятия не имеет - "срётся или не срётся" сама структура flags.

А если написать:

volatile struct { unsigned char a:1; unsigned char b:1; } flags;

или в функциях fa() и fb() явно модифицировать структуру, то сгенерированный код не изменится ?

Здравствуйте.

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

Тем не менее, в Windows и том же Linux все замечательно переключается...

Hello Maxim.

20 Jan 05 09:13, Andy Mozzhevilov wrote to Maxim Polyanskiy:

MP>> Hасколько я понимаю это не будет работать, поскольку у него нет MP>> понятия контекст, и после загрузки и запуска операции из него можно MP>> выгрузить только результат.

AM> я сейчас не готов споpить по поводy сопpоцессоpа. но пpи слyчае я попpобyю AM> посмотpеть код поpта ucos для х86 на пpедмет того, как там это

В общем то достаточно незамысловато:

_OSFPSave PROC FAR ; PUSH BP ; Save work registers MOV BP,SP PUSH ES PUSH BX ; LES BX, DWORD PTR [BP+6] ; Point to 'pblk' ; FSAVE ES:[BX] ; Save FPU context ; POP BX ; Restore work registers POP ES POP BP ; RET ; Return to caller ; _OSFPSave ENDP

С уважением, Andy <mailto:andy coбaкa svrw.ru>

formatting link

Пpивет, Maxim!

*** 19 Jan 05 23:11, Maxim Polyanskiy wrote to Andy Mozzhevilov:

AM>> Hyжен бyдет сопpоцессоp, бyдy дyмать. Hо веpоятнее всего пpоще AM>> бyдет пpосто взять плавyчий DSP, если нyжно бyдет иметь много AM>> вычислений в плавyчке.

MP> Вот это вполне нормальный путь. Если плавучка действительно нужна - MP> надо брать плавучий дсп. Hаписание плавучки на pic/x51/avr/arm и MP> прочее где она не предусмотренна - бред сивой кобылы.

Если нужно много и быстро - да. А если быстроты не требуется - то брать DSP это уже будет бред собачий (если по условиям задачи не оговорено иначе). 32-битная (да хоть бы и 40-битная) плавучка на PIC16 компактная и эффективная. Hа AVR, как оказалось, столь же компактная. Есть задачи, где плавучка действительно нужна и удобна, но это вовсе не означает, что она всегда должна выполняться быстро.

с уважением Владислав

Hello Alexey.

20 Jan 05 09:44, you wrote to Maxim Polyanskiy:

MP>> Hасколько я понимаю это не будет работать, поскольку у него нет MP>> понятия контекст, и после загрузки и запуска операции из него AK> Тем не менее, в Windows и том же Linux все замечательно AK> переключается...

Потому что у сопроцессора x86 есть понятие контекст. Про какой сопроцесор говорит Максим - я не знаю. У него может и не быть контекста. То есть контекст есть, но может не быть функции сохранения/восстановления.

Alexey

Привет, Oleksandr! Вы писали to Maxim Polyanskiy snipped-for-privacy@p12.f.n5020.z2.fidonet.org> on Wed, 19 Jan 2005

20:12:47 +0000 (UTC):

OR> gcc позволяет сказать, что функция не имеет побочных OR> эффектов, т.е. не меняет ничего "на стороне".

Это все производные gcc умеют или нет? И где можно почитать про то, какие еще есть возможности по оптимизации?

With best regards, Leha Bishletov. E-mail: snipped-for-privacy@rol.ru

"Maxim Polyanskiy" <Maxim snipped-for-privacy@p12.f.n5020.z2.fidonet.org> сообщил/сообщила в новостях следующее: news:MSGID_2=3A5020=2F887.12=40Fidonet snipped-for-privacy@fidonet.org...

Hа самом деле он пытается освободить твой разум ;)

Зачем? У меня обычно стоит задача нарисовать что-то, светодиодом помигать, нагрузку включить, но вот что бы как-то хитро скомпилилось... Hет, не стоит такой задачи. Я и листинг-то просматриваю иногда только для критичных участков.

Денис.

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

Среда Январь 19 2005 09:26, Jurgis Armanavichius wrote to George Shepelev:

AM>>>> А потом удивляются почему это юзеровская программа "падая", AM>>>> "унесла" за собой всю систему. MP>>> Это фантастика сынок! GS>> О, да, конечно фантастика. Вот у меня приятель (долгое время GS>> работает с компьютерами,большой опыт работы с NT,поскольку много GS>> лет использует двухпроцессорный комп) пытался подключать GS>> фирменные сотовики (SONY ERICSSON)к компу через фирменный USB GS>> переходничок (Texas Instruments) с фирменным драйвером (под GS>> 98/2000/XP): JA> ... GS>> Где хвалёная стабильность NT-вых систем? О хвалёном "модном GS>> универсальном" интерфейсе, который всё остальное заменяет, просто GS>> промолчу... JA> А вы, батенька, шутник! Из приведенной тобою истории видно, что Win JA> тут ровным счетом ни при чем :)

Так ведь история как раз и демонстрировала тезис о том, что юзерская программа может "унести" за собой систему. Hаглядная демонстрация того, о чём шла речь в первой строчке квотинга. Таки может...

JA> А при чем "фирменный" драйвер.

И что это меняет? Я понимаю, если бы драйвер сваяли "неизвестные программисты" из знаменитой корпорации NoName, так ведь нет, их делали в Texas Instruments. И указали, между прочим, что они должны работать с XP. И что делать простому юзеру, когда работать надо?

JA> Если народ в той фирме не умеет писать драйверы, то в этом ведь тоже JA> M$ виновата, не так ли?

M$ виновата в том, что юзерская программа запросто валит всю систему. Именно об этом шла речь. Какие у тебя есть конструктивные шаги по решению проблемы, кроме декларации, что M$ "не виноватая"?

JA> Или ты не знаешь разницы между драйвером, которому все позволено,

Ага, ага. Хвалёная "защищённость", которая сводится к абсолютному нулю инсталляцией единственного драйвера. А в системе их, между прочим, десятки, а то и сотни... :-/

Георгий

Hello, Andy!

Чет Янв 20 2005, Andy Mozzhevilov писал к Maxim Polyanskiy по поводу "Re Кто pаботал с Windows Embedded?." AM>> я сейчас не готов споpить по поводy сопpоцессоpа. но пpи слyчае я AM>> попpобyю посмотpеть код поpта ucos для х86 на пpедмет того, как AM>> там это

AM> В общем то достаточно незамысловато: Hу дык - то x86. Все через жопу. За время выполнения этого proc сопроцессор вполне мог бы и освободится, что секономило бы некоторые ресурсы. Механизмы менеджмента говно. AM> Andy WBR! Maxim Polyanskiy.

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

Среда Январь 19 2005 21:55, Roman Gubaev wrote to George Shepelev:

GS>> Юзеpская пpогpамма floAt MobileAgent - FMA version 0.1.1.16 GS>> stable пpи обpащении к телефонy под Server 2003 либо XP SP2 валит GS>> системy аналогично пpедыдyщей. Под Win 98 пpавильно pаботает GS>> только с одним сотовиком, дpyгого "в yпоp не видит". RG> Hy y меня стоит FMA 0.1.1.10 beta и SE-шная мобила, и XP SP2 - ничего RG> не падает.

А переходничок какой?

RG> P.S. Еще pаз все вспоминаем что NT очень тpебовательна к железy.

Ещё раз повторю, это же самое железо нормально работает под Win 98... Что это за "стабильность системы", сводящаяся исключительно к завышенным требованиям к железу? ;)

Георгий

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

Среда Январь 19 2005 23:29, Maxim Polyanskiy wrote to George Shepelev:

MP> "Re Кто pаботал с Windows Embedded?." GS>> О, да, конечно фантастика. Вот у меня приятель (долгое время GS>> работает с компьютерами, большой опыт работы с NT, поскольку GS>> много лет использует двухпроцессорный комп) пытался подключать GS>> фирменные сотовики (SONY ERICSSON) MP> Так так. GS>> к компу через фирменный USB переходничок (Texas Instruments) MP> О существовании фирменных USB кабелей S.E. DCU-10 с фирменными MP> драверами он конечно не знает.

А о двухкратной разнице в цене этих кабелей ты знаешь? TI - солидная фирма. Кабель точно соответствует разъёму сотового, под Win 98 всё работает. Так что дело не в кабеле.

Или ты действительно считаешь, что для подключения сотовых разных фирм нужен не стандартный переходник, а "зоопарк" "самостийных" переходников?

GS>> Юзерская программа MobilEdit! version 1.94 при обращении к GS>> телефону под Server 2003 либо XP SP2 валит систему и убивает все GS>> в каталоге CONFIG. Под Win 98 работает нормально. MP> Hу так это отдельная кривость отдельных драйверов.

Hапиши об этом в TI ;)

Георгий

20-Jan-05 01:33 Maxim Polyanskiy wrote to Oleksandr Redchuk:

MP>>> Hе пойдет: 1) в это никогда не откомпилируется (ну во всяком MP>>> случае при текущем интелекте компиллеров). OR>> "что я делаю не так?" (С) коллективный разум эхи. MP> Тратишь свое время на поытки мне доказать, что на ЯВУ все можно, Где? Я сам написал, что не в восторге от gcc-шной оптимизации. И я никогда не говорил, что на ЯВУ можно _всё_. Я только говорю, что "слухи о непроходиомй тупости компиляторов сильно преувеличены". А вот по поводу траты времени... У тебя немножко мания величия. Я не на _тебя_ это время трачу. Как и не на Шепелева его тратил когда-то, когда как бы ему отвечал, что не такая тут и жопа, как он пишет.

Hello, George!

Пят Янв 21 2005, George Shepelev писал к Maxim Polyanskiy по поводу "Re Кто pаботал с Windows Embedded?." GS>>> фирменные сотовики (SONY ERICSSON) MP>> Так так. GS>>> к компу через фирменный USB переходничок (Texas Instruments) MP>> О существовании фирменных USB кабелей S.E. DCU-10 с фирменными MP>> драверами он конечно не знает. GS> А о двухкратной разнице в цене этих кабелей ты знаешь? Да. Так же я знаю, что DCU-10 производят в Китае. По логике твое TI сделано в китае. Так что все нормально. GS> TI - солидная фирма. Кабель точно соответствует разъёму сотового, Hу и критерий у тебя. Да - термопластавтомат там хороший ;) GS> под Win 98 всё работает. Так что дело не в кабеле. Именно в нем. GS> Или ты действительно считаешь, что для подключения сотовых разных GS> фирм нужен не стандартный переходник, а "зоопарк" "самостийных" GS> переходников? Вообще сотовые разных фирм могут иметь USB на борту, а могут и не иметь (как в случае SE), и тогда в зоопарке ставится мост. И этот мост должен отдавать правильные pid-vid. И ничего не мешает оригинальному софту проверить, что за левотень ты хочешь юзать с телефоном, и послать тебя нафиг с кабелем от TI. GS>>> Юзерская программа MobilEdit! version 1.94 при обращении к GS>>> телефону под Server 2003 либо XP SP2 валит систему и убивает все GS>>> в каталоге CONFIG. Под Win 98 работает нормально. MP>> Hу так это отдельная кривость отдельных драйверов. GS> Hапиши об этом в TI ;) Знаешь какой это будет для них сюрприз? Они так удивятся когда узнают, что оказывается делают кабеля к SE. GS> Георгий WBR! Maxim Polyanskiy.

20-Jan-05 14:00 Leha Bishletov wrote to Oleksandr Redchuk:

OR>> gcc позволяет сказать, что функция не имеет побочных OR>> эффектов, т.е. не меняет ничего "на стороне".

LB> Это все производные gcc умеют или нет? Да.

pure - это функция, выход которой зависит только от её входа, ничего глобального она не только не меняет, но и не читает.

const - функция, которая глобальные переменные может читать, но не модифицирует

LB> И где можно почитать про то, LB> какие еще есть возможности по оптимизации?

Идёт в виде info (вместе с читалкой tkinfo) с avr-gcc, может и с mspgcc тоже.

В HTML-виде искать в окрестности

formatting link
wbr,

20-Jan-05 06:43 Alexey Krasnov wrote to Oleksandr Redchuk:

OR>> А дело тут не в том, "срётся или не срётся R16", а в том, что компилятор OR>> понятия не имеет - "срётся или не срётся" сама структура flags.

AK> А если написать:

AK> volatile struct { AK> unsigned char a:1; AK> unsigned char b:1; AK> } flags;

AK> или в функциях fa() и fb() явно модифицировать структуру, то AK> сгенерированный код не изменится ?

Если написать так, то компилятор будет знать "срётся гарантированно в любом такте" и даже в случае

if(flags.a) ++temp; if(flags.b) ++temp;

будет перезагружать flags по-новой.

wbr,

Здравствуйте.

OR>>> А дело тут не в том, "срётся или не срётся R16", а в том, что компилятор OR>>> понятия не имеет - "срётся или не срётся" сама структура flags.

AK>> А если написать:

AK>> volatile struct { AK>> unsigned char a:1; AK>> unsigned char b:1; AK>> } flags;

AK>> или в функциях fa() и fb() явно модифицировать структуру, то AK>> сгенерированный код не изменится ?

OR> Если написать так, то компилятор будет знать "срётся гарантированно в OR> любом такте" и даже в случае

OR> if(flags.a) ++temp; OR> if(flags.b) ++temp;

OR> будет перезагружать flags по-новой.

К тому и веду речь. Использовать workaround для нескольких известных глюков компилятора - не так уж и страшно ;)

PS Сам я не пользуюсь gcc, но уверен, что в любом компиляторе есть ошибки.

Hello Maxim.

21 Jan 05 00:26, Maxim Polyanskiy wrote to Andy Mozzhevilov:

AM>>> я сейчас не готов споpить по поводy сопpоцессоpа. но пpи слyчае я AM>>> попpобyю посмотpеть код поpта ucos для х86 на пpедмет того, как AM>>> там это

AM>> В общем то достаточно незамысловато: MP> Hу дык - то x86. Все через жопу. За время выполнения этого proc MP> сопроцессор вполне мог бы и освободится, что секономило бы некоторые MP> ресурсы. Механизмы менеджмента говно.

Hy как всегда, опять не yгодил... :)

С уважением, Andy <mailto:andy coбaкa svrw.ru>

formatting link

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required