Страниц: [1] 2 3 ... 10
 1 
 : Июня 15, 2018, 10:00:54 am 
Автор qnx_user - Последний ответ от qnx_user
Цитата: A_O
Ошибка в том, что вы пытаетесь создать главное окно посредством вызова ApCreateWidget. Это нужно делать только через PtAppInit.
Понял, исправил.

Цитата: A_O
Кроме того, у вас ошибка в функции AppClassInit.
Слона то я и не заметил. Поправил. Спасибо!

Цитата: A_O
PS Привет Охлопкову.
Очень давно не контактировал, пытаюсь разобраться как реализованы некоторые его приложухи.

 2 
 : Июня 15, 2018, 09:41:48 am 
Автор qnx_user - Последний ответ от A_O
Генерировать приложение в PhAB как раз совершенно не обязательно. Ошибка в том, что вы пытаетесь создать главное окно посредством вызова ApCreateWidget. Это нужно делать только через PtAppInit.
Кроме того, у вас ошибка в функции AppClassInit.
PS Привет Охлопкову.

 3 
 : Июня 14, 2018, 10:45:14 pm 
Автор qnx_user - Последний ответ от qnx_user
Код:
#include <Ap.h>
#include <Pt.h>
#include <stdio.h>

char ab_exe_path[PATH_MAX];

void ApClassInit()
{
ApAddClass( "PtWindow", &PtWindow );
ApAddClass( "PtLabel",  &PtLabel );
ApAddClass( "PtLabel",  &PtPane );
}

int main( int argc, char *argv[] )
{
ApDBase_t  *dbase;
PtWidget_t *window;
PtArg_t    args[2];
PtWidget_t *test;
int i;

// PtSetArg( &args[0], Pt_ARG_WINDOW_TITLE, "Window Demo", 0 );
// window = PtAppInit( NULL, NULL, NULL, 1, args );

ApClassInit();
dbase = ApOpenDBaseFile( "base.wgtw" );
if ( NULL == dbase ) {
printf( "Error ApOpenDBaseFile\n" );
}

// Нормально выводит все имена виджетов на печать.
for ( i = 0; i < dbase->wgt_ctr; i++ )
printf( "%s\n", dbase->wgt_list[i]->name );

// SIGSEGV
PtSetArg( &args[0], Pt_ARG_WINDOW_TITLE, "Window Demo", 0 );
window = ApCreateWidget( (ApDBase_t const *)dbase, dbase->wgt_list[0]->name, 0, 0, 1, args );
if ( NULL != window ) {
printf( "PtRealizeWidget( window );\n" );
PtRealizeWidget( window );
}

// SIGSEGV
test = ApCreateWidgetFamily( (ApDBase_t const *)dbase, dbase->wgt_list[1]->name, -1, -1, 0, NULL );
if ( NULL != test ) {
printf( "PtRealizeWidget( test );\n" );
PtRealizeWidget( test );
}

ApCloseDBase( dbase );

PtRealizeWidget( window );
PtMainLoop();

return 0;
}

Подскажите почему вызовы ApCreateWidget и ApCreateWidgetFamily упорно валятся в SIGSEGV, перепробовал множество всяких комбинаций, вроде все по докам делаю. Проект приложил (компилил в OpenWatcom 1.9, в родном QNX4 Watcom 10.6 тоже пытался результат аналогичный).

P.S. Прочитал в доке, что данные функции можно использовать только из приложения сгенерированного в PhAb, а я как-раз таки не хотел пользоваться им, думал использовать его только для формирования базы виджетов, а выдирать их оттуда самостоятельно. Я правильно понимаю что такой возможности нет? Дело в том что все свои проекты под qnx4 собираю из под видны с помощью OpenWatcom (своя структура проектов и тп.),  и не хотелось бы привязываться к PhAb, которым пользоваться возможно только из под QNX4.

Спасибо.

 4 
 : Июня 13, 2018, 09:21:28 am 
Автор Absolut - Последний ответ от Hed
Есть еще вариант: посмотреть данную флешку утилитой dmde-RecoveryFilesOnFlash. Ясно, что это не физ. повреждения, значит разметка ФС.

 5 
 : Июня 03, 2018, 03:49:08 pm 
Автор da-nie - Последний ответ от da-nie
Ну, на raspberry pi это делается очень легко - там обычная система с линуксом. А вот на stm32 есть маленькая проблема. Дело в том, что CubeMX позволяет активировать аппаратный модуль работы с SD-картами и поддержку файловой системы FAT32 (и только в комплекте с этим модулем). Но вот подключение SD-карты возможно только по протоколу обмена SDIO. А у меня на китайской плате распайка сделана для ставшего стандартом для самодельщиков падключению по SPI со всеми подтяжками к питанию и отсутствием "ненужных" линий. То есть, потребуется отдельно распаивать SD-карту. Подключить по SPI, на самом деле, тоже не сложно, но тогда я лишусь поддержки FAT32 "из коробки" от CubeMX. Впрочем, когда-то я делал свой модуль работы с FAT32, но там нет операций записи - с ними я решил не возиться на тот момент и по слухам (я не видел такого - думаю, причина в банальной ошибке чтения карты по какой-то причине), он иногда подглючивает. Есть, правда,уже готовый модуль работы с FAT32 для практически любого контроллера, работающий аж всего на 512 байтах ОЗУ, но с его подключением надо разбираться. Но ничего невозможного нет (кроме видеопотока - stm32 слишком медленный для кодирования видео). Smiley

 6 
 : Июня 03, 2018, 03:01:32 pm 
Автор da-nie - Последний ответ от lastcross
Видео работы отдельно модуля с Raspberry Pi:
..
И собранного устройства с stm32:

Было бы здорово, если бы существовала возможность записи полученных изображений или как снимок, или как видеопоток на флешку. Не пришлось бы записывать с видеокамеры, да и практическое применение было бы интереснее.

 7 
 : Июня 03, 2018, 11:23:02 am 
Автор da-nie - Последний ответ от da-nie
Видео работы отдельно модуля с Raspberry Pi:
https://www.youtube.com/watch?v=IWScr3B4RJ0

И собранного устройства с stm32:
https://www.youtube.com/watch?v=BMG0rLr8tC8


 8 
 : Мая 29, 2018, 10:46:10 am 
Автор qnx_user - Последний ответ от qnx_user
Вот поэтому и интересно было бы глянуть результат работы IDA на этой функции.
Я уже смотрел мельком, там внутрях функции вызываются еще некоторое кол-во функций, чтобы произвести реверсинг необходимо потратить некоторое время, как свободное время появится сделаю.

Возможно, она сама обращается к каким-то библиотечным функциям (скорее всего, именно к функциям выделения памяти) и каким-то образом портит содержимое кучи.
Скорее всего так и есть.

 9 
 : Мая 29, 2018, 10:23:00 am 
Автор qnx_user - Последний ответ от da-nie
Вот поэтому и интересно было бы глянуть результат работы IDA на этой функции.

 10 
 : Мая 29, 2018, 09:38:00 am 
Автор qnx_user - Последний ответ от A_O
Еще немного поковырялся.
1). При некоторых сочетаниях опций программа просто падает (SIGSEGV). Причем падает даже в случае пустой функции main().
2). Похоже, что _getvideoconfig во всех случаях возвращает одинаковые данные.
Возможно, она сама обращается к каким-то библиотечным функциям (скорее всего, именно к функциям выделения памяти) и каким-то образом портит содержимое кучи.

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