Jump to content

    

Harvester

Участник
  • Content Count

    401
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Harvester

  • Rank
    Местный
  • Birthday 12/24/1976

Контакты

  • Сайт
    Array

Информация

  • Город
    Array

Recent Profile Visitors

4588 profile views
  1. И где там "ядро"? Впрочем, если я неправильно употребил слово "модуль", приношу извинения.
  2. Для начала я как минимум хочу понять, какая взаимосвязь между областью [heap] и динамически выделяемыми буферами. Просто, если я для МК задаю в скрипте линкера кучу, я понимаю, что выделение будет производиться в этой области и при нехватке памяти ошибка возникнет уже в момент выделения. А как в случае линукса - непонятно. И, кстати, я нигде не говорил про модуль ядра.
  3. Я попробую это сделать, когда будет возможность. Надеюсь, все эти утилиты будут в системе (у меня кастомный линукс на ядре 2.6). А Вы можете пояснить, что означает строка [heap] в файле maps? Это действительно куча для динамической памяти или что-то другое? На самом деле программа очень простая - после сигнала выделяет несколько буферов, выполняет некую обработку, записывает данные в файл и освобождает буферы. Процесс всегда одинаков, отличается только размер обрабатываемых данных. Вот, что находится в файле maps: 10670000-106ac000 rwxp 00000000 00:00 0 [heap] 48000000-48020000 r-xp 00000000 00:0b 1701 /lib/ld-2.13.so При большом объеме данных выделяются такие буферы (1, 2 и 4 - фиксированного размера): Realloc max buffer: 1068edd8 - 1068ee34 Realloc coeff buffer: 1068ee38 - 1068ee94 Realloc data buffer: 48070008 - 4810c408 Realloc write buffer: 1068ee98 - 106aea98 При этом буфер “data” выделяется не в куче, а черт-знает где, а буфер “write” вылазит за границу кучи, указанную в maps. Но в этом случае процесс еще не падает, а вроде бы нормально работает. При небольшом объеме данных выделяются такие буферы: Realloc max buffer: 1068edd8 - 1068ee34 Realloc coeff buffer: 1068ee38 - 1068ee94 Realloc data buffer: 1068ee98 - 106ae298 Realloc write buffer: 106ae2a0 - 106cdea0 В этом случае все буфера выделяются в куче и получается, что буфер “write” полностью лежит вне границ, указанных в maps. В этом случае наблюдается segfault.
  4. Так вот я и хочу понять. Просто мой процесс при определенных условиях падает с segfault. Я вывел в лог адреса динамически выделяемых буферов и увидел, что эти буфера выходят за пределы области, которая в файле maps для этого процесса помечена как [heap].
  5. Подскажите пожалуйста, каким образом при сборке программы для Linux задается размер кучи, в которой будет динамически выделяться память?
  6. Что-то не получается. :( Не получается растянуть scrollarea на все доступное пространство. Если убрать нижнюю растяжку, то все просто смещается вниз, если дополнительно убрать верхнюю, то CAPTION и SUBCAPTION расползаются по верхней половине, а scrollarea все равно не меняется
  7. Похоже, что магия редактора форм выше моего понимания.
  8. Я правильно понял? scr_wdg_contents = new QWidget(); scr_wdg_contents->setGeometry(QRect(0, 0, 268, 470)); // Основной виджет scr_wdg_header = new QWidget(); // Для лейблов header_splitter = new QVBoxLayout(scr_wdg_header); scr_wdg_data = new QWidget(); //для кнопок data_splitter = new QVBoxLayout(data_splitter); verticalLayout_3 = new QVBoxLayout(scr_wdg_contents); verticalLayout_3->addWidget(scr_wdg_header); verticalLayout_3->addWidget(scr_wdg_data); scrollArea->setWidget(scr_wdg_data); data_splitter->addWidget(scrollArea);
  9. Имеется окно (виджет), в которое помещаются (QVBoxLayout) одна или две QLabel и неограниченное число QButton. Содержимое центрируется по вертикали. Когда кнопок становится слишком много появляется полоса прокрутки. Мне нужно изменить код так, чтобы QLabel всегда оставались на экране, а полоса прокрутки появлялась только только для кнопок. Я понимаю, что нужно взять два менеджера компоновки, а что с ними делать дальше - уже нет :( . Вот текущий код (то, что qt генерит из *.ui, с сокращениями): Виджеты добавляются в лэйаут menu_splitter. class Ui_dlgMenu { public: QVBoxLayout *verticalLayout; QScrollArea *scrollArea; QWidget *scr_wdg_contents; QVBoxLayout *verticalLayout_3; QVBoxLayout *menu_splitter; void setupUi(QWidget *dlgMenu) { dlgMenu->resize(272, 480); dlgMenu->setMaximumSize(QSize(272, 480)); verticalLayout = new QVBoxLayout(dlgMenu); scrollArea = new QScrollArea(dlgMenu); sizePolicy1.setHorizontalStretch(0); sizePolicy1.setVerticalStretch(0); sizePolicy1.setHeightForWidth(scrollArea->sizePolicy().hasHeightForWidth()); scrollArea->setSizePolicy(sizePolicy1); scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); scrollArea->setWidgetResizable(true); scr_wdg_contents = new QWidget(); scr_wdg_contents->setGeometry(QRect(0, 0, 268, 470)); verticalLayout_3 = new QVBoxLayout(scr_wdg_contents); menu_splitter = new QVBoxLayout(); verticalLayout_3->addLayout(menu_splitter); scrollArea->setWidget(scr_wdg_contents); verticalLayout->addWidget(scrollArea); }
  10. Имеется класс виджета Qt: class GotoMenu : public QPushButton { Q_OBJECT public: GotoMenu(QWidget* parent = 0, bool handle_click = true); ~GotoMenu(); ... protected: void paintEvent(QPaintEvent* arg1); ... }; Согласно идеологии Qt при перерисовке виджета вызывается paintEvent(). Здесь вопросов нет. Теперь я создаю класс-наследник: class ComboElement : public GotoMenu { Q_OBJECT public: ComboElement(QWidget* parent = 0, const QString &var_combo = CommonData::_emptyString); ~ComboElement(); ... }; Правильно ли я понимаю, что если я не переопределю этом классе PaintEvent(), то при перерисовке этого виджета будет вызываться paintEvent() предка (GotoMenu)?
  11. Добрый день. Система CentOS 6, кросс-компиляция для powerpc. На сборочном сервере (с той же системой) все работает хорошо, но когда я пытаюсь повторить это на локальном компе, вылезает непонятная проблема. На финальном этапе сборки (перед генерацией образа) формируется список пакетов и вызывается команда ipkg: mkdir "$(IMAGEDIR)" PACKAGES='' ; for i in $(CONTENTSDIR); do \ PACKAGES="$$PACKAGES $(PACKAGEDIR)/$${i}_*.ipk"; \ done; \ $(IPKG) -o "$(IMAGEDIR)" install $$PACKAGES Проблема в том, что для 25-и пакетов команда выдает: Clearing state_want and state_flag for pkg=xxxxxx (arch_priority=0 flag=16 want=2) И только для 6-и: Installing xxxx(20015d-vard1) to root... А в конце: Nothing to be done An error ocurred, return value: 1. Collected errors: Cannot find package busybox. Check the spelling or perhaps run 'ipkg update' ... Все пакеты есть, ведь список формируется из реального содержимого папки. Права у всех пакетов одинаковые. Почему такое может происходить? Куда смотреть?
  12. Я задал тот вопрос, который меня интересовал. В общем, я решил не использовать термин "дроссель", пока он явно не встретится в тексте.
  13. Простите, но Вы не совсем правы. Я ведь не спрашиваю, можно ли катушку индуктивности назвать просто индуктивностью. "сопротивление" vs "резистор", также как и "емкость" vs "конденсатор" - это противопоставление физической величины и компонента, работа которого основана на этой физической величине. Очевидно, что такая замена некорректна и условно допустима только в разговорной речи.