Страниц: [1] 2 3 ... 10
 1 
 : Февраля 13, 2018, 04:00:14 pm 
Автор Дмитрий - Последний ответ от Hed
Код:
PtSetArg( &args[0], Pt_ARG_WINDOW_STATE, Pt_TRUE, Ph_WM_STATE_ISHIDDEN );
PtSetResources( widget, 1, args );

 2 
 : Февраля 10, 2018, 10:45:27 pm 
Автор Дмитрий - Последний ответ от A_O
RTFM, однако.

When setting a flag, the third argument to PtSetArg() is a bit field specifying the value of the bits to be set. The fourth argument is a bit mask indicating which elements of the bit field should be used.

 3 
 : Февраля 10, 2018, 05:01:23 pm 
Автор Дмитрий - Последний ответ от Дмитрий
Здравствуйте!

Столкнулся со следующей проблемой (в QNX4.25).
Возникла необходимость при запуске ГЛАВНОЕ окно приложения ПРИ ЗАПУСКЕ скрыть, а потом, в процессе, показать.
В документации по QNX нашел, что Pt_ARG_WINDOW_STATE можно изменить и перед тем, как окно реализуется, и после.
Я устанавливаю флаг Pt_ARG_WINDOW_STATE в Ph_WM_STATE_ISHIDDEN в файле, назначенном на обработку события Realized окна, но окно все равно при запуске приложения появляется в развернутом виде.
Если же я изменяю параметры Pt_ARG_WINDOW_STATE в среде Photon AppBuilder, то, что я выбираю там, то я и получаю.
Объясните, где я ошибся, пожалуйста!
P.S. устанавливаю флаг с помощью
PtSetArg( &args[0], Pt_ARG_WINDOW_STATE, Ph_WM_STATE_ISHIDDEN, 0 );
PtSetResources( widget, 1, args );

 4 
 : Января 31, 2018, 02:58:36 pm 
Автор talruns - Последний ответ от talruns
Ну вроде поправила там, где ошиблась

Код:


.globl  testrg
.type   testrg, @function
.data
testrg:
        pushl   %ebp
        pushl   %ebx
        pushl   %ecx
        pushl   %edx
        pushl   %edi
        pushl   %esi

        movl    %esp, %ebp

        movl    $0, %eax       

        movl    $0x55555555, %eax
        cmpl    $0x55555555, %eax
        jne     errexit

        movl    $0x55555555, %ebx
        cmpl    $0x55555555, %ebx
        jne     errexit

        movl    $0x55555555, %edx
        cmpl    $0x55555555, %edx
        jne     errexit

        movl    $0x55555555, %edi
        cmpl    $0x55555555, %edi
        jne     errexit

        movl    $0x55555555, %esi
        cmpl    $0x55555555, %esi
        jne     errexit

        movl    $0xAAAAAAAA, %eax
        movl    %eax, %ebx
        movl    %ebx, %ecx
        movl    %ecx, %edx
        movl    %edx, %edi
        movl    %edi, %esi
        cmpl    $0xAAAAAAAA, %esi
        jne     errexit

        popl   %esi
        popl   %edi
        popl   %edx
        popl   %ecx

        popl   %ebx
        popl   %ebp

        movl    $0, %eax
        ret

errexit:
        movl    %ebp, %esp


        popl   %esi
        popl   %edi
        popl   %edx
        popl   %ecx

        popl   %ebx
        popl   %ebp

        movl    $1, %eax
        ret

        .size   testrg, . - testrg





 5 
 : Января 31, 2018, 11:48:21 am 
Автор talruns - Последний ответ от talruns
Добрый день,
есть вызов функции, написанной на ассемблере


Код:
.globl  testrg
.type   testrg, @function
testrg:
        pushl   %ebp
        movl    %esp, %ebp


        pushl   %ebx // Base register — базовый регистр, применяется для хранения адреса (указателя) на некоторый объект в памяти.
pushl   %ecx // Counter register — счетчик, его неявно используют некоторые команды для организации циклов (см. loop).
        pushl   %edx // Data register — регистр данных, используется для хранения результатов промежуточных вычислений и ввода-вывода.
        pushl   %edi // Destination index register — индекс приёмника, в цепочечных операциях содержит указатель на текущий элемент-приёмник.
        pushl   %esi // Source index register — индекс источника, в цепочечных операциях содержит указатель на текущий элемент-источник.


        movl  $0x55555555, %eax
cmpl  $0x55555555, %eax
        jne   errexit


 
//movl    $0x55555555, %ebx
//cmpl    $0x55555555, %ebx
//jne     errexit




        movl    $0x55555555, %edx
        cmpl     $0x55555555, %edx
        jne     errexit

        movl    $0x55555555, %edi
        cmpl     $0x55555555, %edi
        jne     errexit

        movl    $0x55555555, %esi
        cmpl     $0x55555555, %esi
        jne     errexit

        movl    $0xAAAAAAAA, %eax
// movl    %eax, %ebx
        movl    %ebx, %ecx
        movl    %ecx, %edx
        movl    %edx, %edi
        movl    %edi, %esi
        cmpl     $0xAAAAAAAA, %esi
        jne     errexit

        movl    $0, %eax


        pushl   %esi
        pushl   %edi
        pushl   %edx
pushl   %ecx
        pushl   %ebx

movl %ebp, %esp


        popl    %ebp

        ret

errexit:
pushl   %esi
        pushl   %edi
        pushl   %edx
pushl   %ecx
        pushl   %ebx

movl %ebp, %esp
        movl    $1, %eax
        popl    %ebp


        ret

        .size   testrg, . - testrg



Строчки, на которых вылетает по SIGSEGV связанны с работай с регистром %ebx (они закомментированы).
В чем может быть причина?

Спасибо.

 6 
 : Января 25, 2018, 01:07:44 pm 
Автор Roman St.Zhavnis - Последний ответ от Roman St.Zhavnis
Доброго дня.
А пользовался кто-нибудь библиотекой SIMPL https://sourceforge.net/projects/simpl/ для переноса приложений QNX4 под Linux/Unix? Сам начал делать что-то подобное, а потом наткнулся в Сети.
Есть какие-нибудь подводные камни с её применением?

 7 
 : Января 25, 2018, 08:14:52 am 
Автор denmor86 - Последний ответ от da-nie
 Cheesy Вопрос снимаю. Это не файловые операции застревают - они как раз чётко замечают потерю файла драйвера. Это я забыл, что у меня и драйвер и программа RTC используют и при закрытии отключают прерывания от RTC. Я на прерывании застревал.

 8 
 : Января 24, 2018, 02:56:41 pm 
Автор denmor86 - Последний ответ от da-nie
Что-то я не обращал никогда внимания, что в QNX если драйвер падает, то клиент застревает на операции ввода-вывода. То есть, если клиент сделал open, а затем делает read для драйвера и тут драйвер я закрыл, то клиент повисает на read. Если после этого драйвер запустить, то клиент получит ошибку. Но не раньше. Никто не знает, как это исправить и сделать, чтобы клиент сразу замечал отсутствие драйвера и не подвисал?

 9 
 : Января 22, 2018, 01:39:25 pm 
Автор GrayCat - Последний ответ от Hed
Дело Ваше...  Roll Eyes

 10 
 : Января 22, 2018, 12:37:53 pm 
Автор GrayCat - Последний ответ от GrayCat
Дело ваше, но вообще то, идеология errno в POSIX как раз создана для возможности штатной обработки ошибки и PPS, в том числе, возвращая EMSGSIZE, предоставляет вам возможность корректно и с минимальными затратами обрабатывать данную ситуацию.

Ну нифига ж себе "с минимальными затратами"!!  Cry  Ладно, бывают варианты, когда при нехватке буфера функция возвращает ошибку "мало памяти", И выдаёт значение "сколько нужно". Тогда выделяешь вот эти вот "сколько нужно" байт, и вторым запросом уже точно всё отрабатывает.

А тут мне предлагается, фактически, вслепую играть в "рулетку"? Угадал / не-угадал размер буфера? А если с пятой попытки не угадаю? А если с десятой? Или предлагаете сразу все 64 кБ откусывать? Так никакой памяти не хватит...

Цитировать
Во-первых, почему непонятной? Служба HAM официально входит в состав системных служб QNX, точно также как и io-pkt-v4, inetd, devc-con-hid и т.д. Вы же пользуетесь этими службами, что мешает Вам воспользоваться HAM?  Wink

Во-вторых, HAM достаточно удобная служба: реагирует, практически, на любое состояние процесса/потока, уведомляет "заказчика" об изменении состояния наблюдаемого любым, доступным в QNX, способом.

Чё-то после этого "PPS" у меня доверие ко всяким наворотам QNX потеряно. Так её рекламировали, в медицинские приложения пропихивали, а оказалась тормозная глючная хрень. И поздно уже менять...

Кроме того, вот что бы тут полезного смог бы HAM сделать? Уведомить "Поздно, доктор, я уже здохла"? Даже если перезапустить сам менеджер PPS, то заставить несколько сотен процессов переоткрыть все PPS-"файлы" - ни к чему хорошему не приведёт.

Страниц: [1] 2 3 ... 10