LINUX.ORG.RU

Сообщения braboar

 

Добавить FreeRTOS-Plus в проект stm32cube

Форум — Development

Привет, ЛОР!

У нас с коллегой один проект, который требует FreeRTOS и STM32. Создавать проекты с поддержкой FreeRTOS в stm32cube уже получается, а как добавить FreeRTOS-Plus - пока не понятно. Может кто-нибудь подсказать, что, куда и как, чтобы получить желаемое? Если что, то контроллер - stm32f767zitx. Не предлагайте, пожалуйста, сменить контроллер, от нас не зависит.

 ,

braboar
()

Переподключиться клиенту к TCP серверу

Форум — Development

Доброго всем!

Для нужд тестирования tcp-клиента делаю простой сервер, от которого (пока) нужно только принять сообщение и подтвердить его прием.

Клиент (псевдокод):

cli_sd = socket(AF_INET, SOCK_STREAM, 0);
setsockopt(cli_sd, SOL_SOCKET, SO_RCVTIME0, ...);
setsockopt(cli_sd, SOL_SOCKET, SO_SNDTIME0, ...);
connect(cli_sd, ...);
while (1) {
    send(...);
    recv(...);
}

Сервер (тоже псевдокод):

srv_sd = socket(AF_INET, SOCK_STREAM, 0);
setsockopt(srv_sd, SOL_SOCKET, SO_REUSEADDR, ...);
bind(...);
while (1) {
    cli_sd = accept(...);
    setsockopt(..., SO_RCVTIME0, ...);
    setsockopt(..., SO_SNDTIME0, ...);
    int rd = recv(...);
    if (errno == ECONNRESET) {
        shutdown(cli_sd, ...);
        close(cli_sd, ...);
        continue;
    }
    send(...);
}

Обмен есть, сообщения посылаются/отправляются, а вот когда я прерываю работу клиента (чтобы сымитировать разрыв соединения) accept как ни в чем не бывало, тут же соединяется, cli_sd получает то же значение, что и было, но ведь клиент уже не работает.

Поскольку это первое серьезное приложение с сокетами, помогите разобраться, как переподсоединить клиента.

 ,

braboar
()

Отмонтировать SD карту.

Форум — Desktop

Добрый вечер, люди! Дано: slackware 15, KDE. SD кардридер (встроенный). Вставляю карту и она автоматически монтируется без проблем. А вот при попытке Safely remove (в систрее) - не размонтируется. Только umount /dev/mmcblk0p1 вручную.

Подскажите, куда смотреть и что править.

braboar
()

Mutex'сы - как их правильно готовить

Форум — Development

Вот тут лежит небольшой пример. Посмотрите, пожалуйста, и скажите: что неправильно, чего не хватает. Заранее благодарен.

 ,

braboar
()

Нормальная компиляция на хосте и ошибка в госте. Как исправить?

Форум — Development

Добрый день!

Есть такой код:

std::atomic_int g_thr_cnt(0);


class Logger
{
public:
    ~Logger() {};

    static Logger& get_logger()
    {
        static Logger logger;
        return logger;
    }

    void log(const std::string& _msg)
    {
        m_messages.push_back(_msg);
    }

    void log_job(std::atomic_int& _counter)
    {
        while (_counter > 0)
        {
            cout << "Log job" << endl;
            usleep(670000);
        }
        cout << "Logger exited" << endl;
    }

protected:
    std::list<std::string> m_messages;

    Logger() {};
    Logger(const Logger& _obj); // no copies

    const Logger& operator=(const Logger& _obj); // no assignment
};

void sig_handler(int _sig)
{
    switch (_sig)
    {
    case SIGTERM:
        {
            cout << "Got SIGTERM" << endl;
        }
        g_thr_cnt = 0;
        break;
    default:
        cout << "No, no, no, David Blaine, no street magic!" << endl;
    }
}


int main()
{
    g_thr_cnt = 1;

    signal(SIGTERM, sig_handler);

    Logger& logger = Logger::get_logger();
    std::thread thr(&Logger::log_job, std::ref(logger), std::ref(g_thr_cnt));
    thr.join();

    cout << "[exited]" << endl;
    return 0;
}

На хосте (CentOS stream, gcc (GCC) 8.5.020210514) он собирается и работает. Ок, идем на целевую ОС (Debian 8 в виртуалке, gcc (Debian 4.9.2-10) 4.9.2) и получаем ошибку:

Scanning dependencies of target thr
make[2]: Warning: File '/home/user/work/log-thr/src/main.cpp' has modification time 6673 s in the future
[ 50%] Building CXX object CMakeFiles/thr.dir/main.cpp.o
In file included from /usr/include/c++/4.9/thread:39:0,
                 from /home/user/work/log-thr/src/main.cpp:2:
/usr/include/c++/4.9/functional: In instantiation of ‘struct std::_Bind_simple<std::_Mem_fn<void (Logger::*)(std::__atomic_base<int>&)>(std::reference_wrapper<Logger>, std::reference_wrapper<std::__atomic_base<int> >)>’:
/usr/include/c++/4.9/thread:140:47:   required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (Logger::*)(std::__atomic_base<int>&); _Args = {std::reference_wrapper<Logger>, std::reference_wrapper<std::__atomic_base<int> >}]’
/home/user/work/log-thr/src/main.cpp:77:76:   required from here
/usr/include/c++/4.9/functional:1665:61: error: no type named ‘type’ in ‘class std::result_of<std::_Mem_fn<void (Logger::*)(std::__atomic_base<int>&)>(std::reference_wrapper<Logger>, std::reference_wrapper<std::__atomic_base<int> >)>’
       typedef typename result_of<_Callable(_Args...)>::type result_type;
                                                             ^
/usr/include/c++/4.9/functional:1695:9: error: no type named ‘type’ in ‘class std::result_of<std::_Mem_fn<void (Logger::*)(std::__atomic_base<int>&)>(std::reference_wrapper<Logger>, std::reference_wrapper<std::__atomic_base<int> >)>’
         _M_invoke(_Index_tuple<_Indices...>)
         ^
CMakeFiles/thr.dir/build.make:62: recipe for target 'CMakeFiles/thr.dir/main.cpp.o' failed
make[2]: *** [CMakeFiles/thr.dir/main.cpp.o] Error 1
CMakeFiles/Makefile2:72: recipe for target 'CMakeFiles/thr.dir/all' failed
make[1]: *** [CMakeFiles/thr.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2

Кто-нибудь знает, как заставить код собираться?

 

braboar
()

Корректно прервать std::thread

Форум — Development

Добрый всем вечер!

Есть такой класс:

class BackgroundTask
{
public:
    BackgroundTask();
    ~BackgroundTask();

    void odd_job()
    {
        while (1)
        {
            // do something useful
        }
    }

    void slot_need_stop()
    {
        std::terminate();
    }
};

Где-то в main:

    std::thread jobt(&BackgroundTask::odd_job, &job);

    jobt.join();

Слот slot_need_stop связан с сигналом от обработчика SIGTERM и прерывает работу odd_job.

Насколько корректно такое прерывание потока? Если нет, то посоветуйте, плиз, как. Заранее благодарен.

 ,

braboar
()

JSON и rsyslog

Форум — Admin

Здравствуйте, люди добрые!

Очередные вопросы про rsyslog (если что, rsyslog 8.4.2-1).

Теперь бы надо сделать вывод в лог в json. Добавил в rsyslog.conf шаблон:

template(name="outfmt" type="list" option.jsonf="on") {
         property(outname="@timestamp"
                  name="timereported" 
                  dateFormat="rfc3339" format="jsonf")
         property(outname="host"
                  name="hostname" format="jsonf")
         property(outname="severity"
                  name="syslogseverity-text" caseConversion="upper" format="jsonf")
         property(outname="facility"
                  name="syslogfacility-text" format="jsonf")
         property(outname="syslog-tag"
                  name="syslogtag" format="jsonf")
         property(outname="source"
                  name="app-name" format="jsonf")
         property(outname="message"
                  name="msg" format="jsonf")

     }

и перезапустил службу. Однако, не вижу в логе JSON’а. Отсюда вопросы:

  • 1 Есть конкретное место для шаблона или все равно?
  • 2 app-name в шаблоне должно совпадать с openlog(app_name, ...), т.е. именем программы?

 

braboar
()

очистка буфера последовательного порта

Форум — Development

Всем привет!

Есть некоторое устройство, с которым идет обмен через последовательный порт. Я вычитываю количество доступных для чтения байтов, затем читаю их. Чтение очищает буфер и порт готов к приему сдедующего пакета. Сейчас я обмениваюсь с устройством через USB->UART.

  • Имеет ли значение какой порт используется, изменится ли поведение, если будет «железный» UART?

  • Может измениться ли поведение в зависимости от настроек порта (если да, от каких настроек это зависит)?

 ,

braboar
()

syslog в произвольный файл

Форум — Admin

И снова здравствуйте!

Пытаюсь записать syslog в отдельный файл. Сделал тестовую программу в которой:

    openlog("testlog", LOG_CONS, LOG_USER);
    syslog(LOG_INFO, "TESTLOG: %s", argv[1]);

Бинарь на выходе имеет имя tsl.

В /etc/rsyslog.conf:

if $programmname startswith "testlog" then /home/user/test/test.log

Перезапускаю rsyslog, запускаю программу, а строка, которую я должен записать в лог оказывается и в test.log и в /var/log/messages

Так и должно быть или я что-то делаю не так?

 

braboar
()

Что должен уметь демон, чтобы его можно было перезапустить/стартовать из systemd?

Форум — Development

День добрый!

Дали тут мне задачу сделать демона. Как сделать демона - понятно, книг/доков/примеров достаточно. А что должно быть в самом демоне, чтобы обеспечить поддержку start/restart/stop средствами systemd?

 ,

braboar
()

Как правильно внести изменения в конфигурацию grub

Форум — Admin

Всем добра!

Понадобилось мне добавить параметр ядра при загрузке CentOS8.

Гугл говорит, что можно править /etc/default/grub + grub2-mkconfig а еще можно через grub2-editenv - set Поскольку с GRUB’ом сталкиваюсь в первый раз, а в гугле всяких советов море, подскажите, как лучше/правильней?

 

braboar
()

Где заказать иконки?

Форум — General

Здравствуйте, добрые люди!

Собственно вопрос в названии. Для своих личных проектов хочу заказать иконки, остается выбрать исполнителя.

Может кто-нибудь порекомендовать сайт и исполнителя?

Поиск в Яндекс дал кое-что, помогите, плиз, с выбором.

 ,

braboar
()

Xilinx Zynq-7000 не работает пример

Форум — General

Извините, но букв будет много.

Есть кастомная плате на базе zynq с двумя подключенными flash. На нулевой (QSPI) моя программа, первую (SPI) надо использовать для своих целей.

Беру их пример (xspips_flash_polled_example.c) и пытаюсь запустить. Если ничего не менять, то пример не работает, неверно читается ID флешки и зависает в цикле ожидания статуса.

Если в начале теста изменить FLASH_SPI_SELECT_1 на FLASH_SPI_SELECT_0 (что, вроде бы логично, ибо эта флешка 0-вая на своем контроллере), тогда Device ID корректный, все статусы приходят. А дальше сам тест - записываются тестовые данные, читаются и не совпадают.

Если есть добрые люди, которые знают, как исправить ситуацию - буду признателен.

 ,

braboar
()

C/C++ code navigation, call graph

Форум — Development

Добрый всем день!

Вроде недавно обсуждали подобный вопрос, но найти не получается. Подскажите, пожалуйста, программы навигации по коду и построения диаграммы вызовов. Спасибо.

 ,

braboar
()

Не добавляется тема в Development

Форум — Linux-org-ru

Собственно, subj. Пишу заголовок, указываю теги, доюавляю текст самого сообщения. После нажатия кнопки «Поместить» тема на форуме не добавляется.

braboar
()

No wireless extensions

Форум — Linux-hardware

Slackware64-current, Asus X509FA-EJ027.

После старта в dmesg:

root@darkstar:/home/live# dmesg | grep -i rtw
[   15.357660] rtw_8821ce 0000:02:00.0: enabling device (0000 -> 0003)
[   15.615515] rtw_8821ce 0000:02:00.0: Firmware version 24.8.0, H2C version 12
[   15.634227] rtw_8821ce 0000:02:00.0: rfe 4 isn't supported
[   15.634385] rtw_8821ce 0000:02:00.0: failed to setup chip efuse info
[   15.634423] rtw_8821ce 0000:02:00.0: failed to setup chip information

еще:

root@darkstar:/home/live# lspci
02:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8821CE 802.11ac PCIe Wireless Network Adapter
root@darkstar:/home/live# iwconfig
lo        no wireless extensions.
root@darkstar:/home/live# inxi -nx
Network:   Device-1: Realtek RTL8821CE 802.11ac PCIe Wireless Network Adapter vendor: AzureWave driver: N/A port: 3000 
           bus-ID: 02:00.0 

драйверы:

root@darkstar:/home/live# lsmod | grep -i rtw
rtw88_8821ce           16384  0
rtw88_8821c            94208  1 rtw88_8821ce
rtw88_pci              28672  1 rtw88_8821ce
rtw88_core            167936  2 rtw88_pci,rtw88_8821c
mac80211             1069056  2 rtw88_pci,rtw88_core
cfg80211             1032192  2 rtw88_core,mac80211

Ядро:

Linux darkstar.home.arpa 5.15.2 #1 SMP PREEMPT Fri Nov 12 11:44:33 CST 2021 x86_64 Intel(R) Core(TM) i5-8265U CPU @ 1.60GHz GenuineIntel GNU/Linux

RJ-45 нет, так что надо поднимать wi-fi. Собственно, вопрос: как?

 ,

braboar
()

CMakeLists.txt

Форум — Development

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

.
├── CMakeLists.txt
├── base
│   ├── CMakeLists.txt
│   ├──── base.h
│   └──── base.cpp
├── Test1
│   ├── CMakeLists.txt
│   │       └────  set(PROJ1 test1)
│   │              project(${PROJ1})
│   │              set(HDRSRT ../base/base.h test1.h)
│   │              set(SRCSRT ../base/base.cpp test1.cpp)
│   │              find_package(Qt5Core)
│   │              set(CMAKE_AUTOMOC ON)
│   │              add_library(${PROJ1} STATIC ${HDSRT} ${SRCSRT})
│   │              target_link_libraries(${PROJ1} Qt5::Core)
│   ├──── test1.h
│   └──── test1.cpp
└── Test2
    ├── CMakeLists.txt
    ├──── test2.h
    └──── test2.cpp

Тесты имеют общий базовый класс, base. Проект успешно собирается, и, даже работает. Но, если я пробую использовать две библиотеки олдновременно, получаю ошибку multiple definition методов базового класса. Подскажите, пожалуйста, как исправить ситуацию.

 , ,

braboar
()

Упаковка/распаковка данных в памяти

Форум — Development

Здравствуйте, люди добрые!

В проекте для данных мало места (нет файловой системы), а распаковать надо. Подскажите, чем такое можно сделать в памяти, без файловых операций.

UPD: желательно C.

braboar
()

Qt4.8.7

Форум — Development

Здравствуйте, люди!

Собираю сабж из исходников:

./configure -confirm-license -opensource -debug-and-release -nomake examples -nomake tests

Много ошибок вида

error: ‘class Ui::QPrintPropertiesWidget’ has no member named ‘cupsPropertiesPage’

все касаются qprintdialog_unix.cpp.

Добавление

-no-cups

не помогает.

Подскажите, плиз, как сконфигурировать и собрать

UPD: Похоже, не собрать. А может, у кого-то есть офф-лайн инсталлятор 4.8.7? У меня только 4.8.1.

 , ,

braboar
()

Форматировать строку

Форум — Development

Подскажите, пожалуйста, как из

s1='ham'
'{0:{width}}'.format(s1, width=width)

сделать подобное, но для двух строк. Такое

s1='ham'
s2='spam'
'{0:{width}}|{0:{width}}'.format(s1, s2, width=width)

выводит 'ham |ham '

 

braboar
()

RSS подписка на новые темы