Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Ответить

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Пн янв 18, 2021 18:40:45

Это кому как. Вебинары эти делятся на 2 класса: серия из 3-х воркшопов по BG22, и вебинары на разные темы. Касательно воркшопов, таких AN нет в принципе. В материалах воркшопов всё расписано шаг за шагом в картинках, что хорошо особенно начинающим в этой области и изложение там не в стиле AN. Кроме того, там ждут пока у всех не получится сделать так, как у лекторов. На первых этапах это было очень существенно, т.к. у людей были трудности как стереть флеш, как записать бутлоадер, и т.п., особенно если видите Studio впервые. Кроме того, компы и версии OS у всех разные, и сделать софт такого уровня, который работал-бы везде без проблем и был совместим с любыми другими программами нереально. Однако, с развитием Studio и версий FW и SDK всё значительно улучшилось в этом плане. Не далее как вчера я писал своим студентам методичку как начать работу с BGM220 Explorer Kit из коробки. Для этого купил ещё один такой свежий Кит, поскольку свой перепрошивал уже 100 раз и не помню уже что с ним делал поначалу. Оказалось, что после апгрейда FW в программаторе Кита можно уже не стирать флеш инструментом Simplicity Commander и просто записать туда бутлоадер, а потом приложения. Это как-бы мелочь (по крайней мере для меня), но для многие начинающие так не думают. Впрочем, всё зависит где купите плату и какая её версия попадётся. Я специально купил новую там, где рекомендовал покупать для своего курса студентам (на Маузере). Мне было полезно участвовать в воркшопах, поскольку можно задать вопрос и сразу получить ответ. На форуме фирмы тоже можно вопрос задать, но там отвечают гораздо менее оперативно, а здесь можно сразу переспросить неясные моменты. Я думаю и в третий раз на воркшоп сходить, т.к. у меня уже несколько мелких вопросов накопилось. И, наконец, API постоянно меняются и вместе с ними материалы воркшопов. Конечно, всё можно в доках на сайте почерпнуть, но я не вижу проблемы потратить 45 минут, чтобы всё рассказали и разжевали, так что самому ислать ничего не надо будет. Тем более, что можно вполуха знакомые вещи слушать. Гораздо более полезными в этом плане были семинары до пандемии, которые растягивались на целый рабочий день, и там можно было гораздо более плотно пообщаться и с представителями фирмы и с устроителями семинара, например Arrow или Avnet.

Вебинары второго типа скорее информационные. На сайте фирмы столько документации, что найти что-то (мне) порой нереально или занимает кучу времени. Гораздо более эффективно посетить вебинар, где за 45 минут расскажут состояние дел по вопросу, да ещё слайды дадут. Такой обзорной информации на сайте а AN вообще нет. Певый такой вебинар для региона США/Канады будет завтра в 10 утра по местному. Вебинары доступны в записи вместе со слайдами, но вопросы после них уже оперативно на задать.

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Пн янв 18, 2021 23:03:47

Есть прекрасный an1255-transitioning-from-bluetooth-sdk-v2-to-v3.pdf Он хоть и про переезд с одной версии на другую, но разжевано там всё досканально. Я только после его прочтения въехал в этот стек. Ну т.е. сидишь себе потихоньку, читаешь, что-то сразу кодишь. А если тупо взять какой-то пример, даже пусть самый простой, то ооочень много вопросов возникает прям вот сразу.

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Вт янв 19, 2021 00:57:54

Вот, и я про то. Какие-то вопросы на семинаре освещены могут быть, какие-то можно сразу задать, что-то интересное другие спросить могут. Лично я всегда нахожу для себя что-то новое и полезное почти на каждом вебинаре.

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Ср янв 20, 2021 06:50:39

i'm very disappointed. Можно я тут пока напишу вопросы? Или может можно писать на events@silabs (про кит я туда написал, но ответа что-то пока нет)? но у меня lab4 не пошла. Да, у меня не было proper kit, а BRD4314A - BGM220P, но мне казалось кристалл там должен быть один и тот же, да и работать оно должно было вообще на любой плате. Так вот внешнее проявление проблемы: при нажатии кнопки я не получаю никакого notify, а отсоединение по таймауту. Даже если не включаю разрешение нотификации.

Кнопка у меня работает - я вставлял в ключевые места sl_led_toggle(&sl_led_led0); и видел реакцию на нажатие. Сначала воткнул в функцию void sl_button_on_change(const sl_button_t *handle) перед отправкой ивента, потом в case обработчика ивента - всюду светодиод срабатывает. Если я не посылаю ивент - отсоединение не происходит. Пробовал закомментировать функцию sc = sl_bt_gatt_server_send_characteristic_notification - всё равно происходит разъединение.

Кстати, меня смущает, что компилятор говорит, что эта функция 'sl_bt_gatt_server_send_characteristic_notification' is deprecated. Думал, потому что у мена SDK 3.1.0, а не 3.0.2, но посмотрел еще раз запись вебинара - у лектора тоже этот варнинг выскочил.

Я очень надеюсь, что это моя ошибка, что у меня эта лаба не пошла.... иначе всё печально.
Спойлерapp.c
Код:
/***************************************************************************//**
 * @file
 * @brief Core application logic.
 *******************************************************************************
 * # License
 * <b>Copyright 2020 Silicon Laboratories Inc. www.silabs.com</b>
 *******************************************************************************
 *
 * The licensor of this software is Silicon Laboratories Inc. Your use of this
 * software is governed by the terms of Silicon Labs Master Software License
 * Agreement (MSLA) available at
 * www.silabs.com/about-us/legal/master-software-license-agreement. This
 * software is distributed to you in Source Code format and is governed by the
 * sections of the MSLA applicable to Source Code.
 *
 ******************************************************************************/
#include "em_common.h"
#include "sl_app_assert.h"
#include "sl_bluetooth.h"
#include "gatt_db.h"
#include "app.h"
#include "sl_simple_led_instances.h"
#include "sl_simple_button_instances.h"

// The advertising set handle allocated from Bluetooth stack.
static uint8_t advertising_set_handle = 0xff;

// These variables need to be added and are used for the connection handle
// and the notification parameters to send Button data to the mobile app
uint8_t g_lab4Connection;
uint8_t notification_data[1] = {0};
uint16_t notification_len = 0;
uint8_t notifyEnabled = false;

extern sl_simple_button_context_t simple_btn0_context;
/*
 * Override function for button press that needs to be added.  This function is
 * called in interrupt context and uses the Bluetooth stack external signaling.
 */
void sl_button_on_change(const sl_button_t *handle)
{
  sl_simple_button_context_t *ctxt = ((sl_simple_button_context_t *)handle[0].context);
  if (ctxt->state) {
      ctxt->history += 1;
      sl_bt_external_signal(2);
  }
}

/**************************************************************************//**
 * Application Init.
 *****************************************************************************/
SL_WEAK void app_init(void)
{
  /////////////////////////////////////////////////////////////////////////////
  // Put your additional application init code here!                         //
  // This is called once during start-up.                                    //
  /////////////////////////////////////////////////////////////////////////////
}

/**************************************************************************//**
 * Application Process Action.
 *****************************************************************************/
SL_WEAK void app_process_action(void)
{
  /////////////////////////////////////////////////////////////////////////////
  // Put your additional application code here!                              //
  // This is called infinitely.                                              //
  // Do not call blocking functions from here!                               //
  /////////////////////////////////////////////////////////////////////////////
}

/**************************************************************************//**
 * Bluetooth stack event handler.
 * This overrides the dummy weak implementation.
 *
 * @param[in] evt Event coming from the Bluetooth stack.
 *****************************************************************************/
void sl_bt_on_event(sl_bt_msg_t *evt)
{
  sl_status_t sc;
  bd_addr address;
  uint8_t address_type;
  uint8_t system_id[8];

  switch (SL_BT_MSG_ID(evt->header)) {
    // ----------
    // This event indicates the device has started and the radio is ready.
    // Do not call any stack command before receiving this boot event!
    case sl_bt_evt_system_boot_id:

      // Extract unique ID from BT Address.
      sc = sl_bt_system_get_identity_address(&address, &address_type);
      sl_app_assert(sc == SL_STATUS_OK,
                    "[E: 0x%04x] Failed to get Bluetooth address\n",
                    (int)sc);

      // Pad and reverse unique ID to get System ID.
      system_id[0] = address.addr[5];
      system_id[1] = address.addr[4];
      system_id[2] = address.addr[3];
      system_id[3] = 0xFF;
      system_id[4] = 0xFE;
      system_id[5] = address.addr[2];
      system_id[6] = address.addr[1];
      system_id[7] = address.addr[0];

      sc = sl_bt_gatt_server_write_attribute_value(gattdb_system_id,
                                                   0,
                                                   sizeof(system_id),
                                                   system_id);
      sl_app_assert(sc == SL_STATUS_OK,
                    "[E: 0x%04x] Failed to write attribute\n",
                    (int)sc);

      // Create an advertising set.
      sc = sl_bt_advertiser_create_set(&advertising_set_handle);
      sl_app_assert(sc == SL_STATUS_OK,
                    "[E: 0x%04x] Failed to create advertising set\n",
                    (int)sc);

      // Set advertising interval to 100ms.
      sc = sl_bt_advertiser_set_timing(
        advertising_set_handle,
        160, // min. adv. interval (milliseconds * 1.6)
        160, // max. adv. interval (milliseconds * 1.6)
        0,   // adv. duration
        0);  // max. num. adv. events
      sl_app_assert(sc == SL_STATUS_OK,
                    "[E: 0x%04x] Failed to set advertising timing\n",
                    (int)sc);
      // Start general advertising and enable connections.
      sc = sl_bt_advertiser_start(
        advertising_set_handle,
        advertiser_general_discoverable,
        advertiser_connectable_scannable);
      sl_app_assert(sc == SL_STATUS_OK,
                    "[E: 0x%04x] Failed to start advertising\n",
                    (int)sc);
      break;

    // ----------
    // This event indicates that a new connection was opened.
    case sl_bt_evt_connection_opened_id:

      // When sending notifications we need the connection handle.  Capture
      // it here
      g_lab4Connection = evt->data.evt_connection_opened.connection;

      break;

    // ----------
    // This event indicates that a connection was closed.
    case sl_bt_evt_connection_closed_id:
      // Restart advertising after client has disconnected.
      notifyEnabled = false;
      sc = sl_bt_advertiser_start(
        advertising_set_handle,
        advertiser_general_discoverable,
        advertiser_connectable_scannable);
      sl_app_assert(sc == SL_STATUS_OK,
                    "[E: 0x%04x] Failed to start advertising\n",
                    (int)sc);
      break;

    ///////////////////////////////////////////////////////////////////////////
    // Add additional event handlers here as your application requires!      //
    ///////////////////////////////////////////////////////////////////////////

    case sl_bt_evt_gatt_server_user_write_request_id:
      if (evt->data.evt_gatt_server_user_write_request.characteristic == gattdb_LED) {
              // Write user supplied value to LEDs.
                if (evt->data.evt_gatt_server_attribute_value.value.data[0]) {

                    //This is the use of the Simple LED component
                    sl_led_turn_on(&sl_led_led0);
                }
                else {
                    //This is the use of the Simple LED component
                    sl_led_turn_off(&sl_led_led0);
                }
              sl_bt_gatt_server_send_user_write_response(
                  evt->data.evt_gatt_server_user_write_request.connection,
                  gattdb_LED, SL_STATUS_OK);
            }
            break;

    case sl_bt_evt_system_external_signal_id:
        /* Process external signals */
        if (evt->data.evt_system_external_signal.extsignals == 2) { // 1 = BTN0
            sl_led_toggle(&sl_led_led0);
            if (notifyEnabled && 0) {  // заблокировал посылку нотификаций вообще!
                notification_data[0] = (uint8_t)simple_btn0_context.history;
//                simple_btn0_context.history = 0;

                // send number of button presses
                sc = sl_bt_gatt_server_send_characteristic_notification(
                      g_lab4Connection, gattdb_BTN, sizeof(notification_data),
                      notification_data, &notification_len);
          }
      }
      break;

    case  sl_bt_evt_gatt_server_characteristic_status_id:
      if ((evt->data.evt_gatt_server_characteristic_status.characteristic == gattdb_BTN)
          && (evt->data.evt_gatt_server_characteristic_status.status_flags == 0x01)) {
          if (evt->data.evt_gatt_server_characteristic_status.client_config_flags == 0x00) {
              notifyEnabled = false;
          } else {
              notifyEnabled = true;
          }
      }
      break;
    // ----------
    // Default event handler.
    default:
      break;
  }
}



На вебинаре я ничего не смог спросить, так как осознание проблемы пришло спустя час после вебинара, да и с zoom-ом я еще не разобрался, как им пользоваться. Собственно, весь вебинар я с ним боролся, чтобы он не раскрывался на весь экран заслоняя мой симплисити студио.

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Ср янв 20, 2021 09:40:24

Посмотрю Ваш файл к вечеру по Москве, сейчас ложусь спать. API часто меняются, но depricated поддерживаются. Я само изложение сегодня не слушал, для меня это всё пройденный этап, поскольку сам в январе создал с дюжину подобных демонстрационных проектов для своих студентов. Посвятил сегодня время задаванию своих вопросов (не относящихся непосредственно к излагаемому материалу) и получил ответы сразу. На один из вопросов предложили написать в тех-поддержку, что я и сделал. Сегодня-же получил уже ответ, и проблема решена. Поэтому считаю, что посетил семинар с пользой для дела. Вообще следует упомянуть, что даже на форуме фирмы стали отвечать быстрее, но всё-равно пара-тройка дней проходит между вопросом и ответом. А на семинаре в этом плане более динамично - можно задать несколько уточнений к вопросу и все в течении часа.

К Zoom привыкните быстро, для универов это один из основных инструментов преподавания во времена удалёнки наряду с Collaborate Ultra и Microsoft Teams.. Если хотите, можем связаться - пришлю Zoom линк в ЛС. Если есть возможность, с ним удобнее работать с двумя мониторами - на одном Zoom, на другом IDE. Иначе, конечно, жутко неудобно переключаться.

Добавлено позже...
Посмотрел программу, всё красиво. Жаль, что не прислали мне весь проект, пришлось самому дополнить его до рабочего. Заменил depricated API на нормальную и добавил выдачу в терминал на комп сообщений через printf. Всё работает, даже с depricated API, не знаю почему у Вас не работало. В архиве .sls файл проекта, его следует сначала раззиповать и тогда можно будет загрузить в Studio через File->Import и скомпилировать.
soc_empty.zip
(292.95 KiB) Скачиваний: 181

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Чт янв 21, 2021 17:38:45

Угу, с файлов всё нормально. Я тут подумал, и решил попробовать всё то же самое сделать на плате Thunderboard Sense 2 c EFR32MG12. Уже наловчился кнопки и светодиоды быстро добавлять... запустил - всё работает как надо. Но тут я заметил, что проект создал с SDK 3.0.0. Попробовал в проекте поменять на 3.1.0 - проект поломался. Создал друой, указав SDK 3.1.0 - файл app.c просто перекопировал - тоже всё работает. Точно также создал проект для платы BGM220P - не работает. Причем заметил, что после создания ивента даже advertising перестаёт работать - надо нажимать сброс. Пробовал под дебаггером запустить - там работает как надо. Но как ни странно, ваш проект работает. Надо изучать где и в чем отличие.

Добавлено after 30 minutes 48 seconds:
Хм. сделал снова проект и скопировал ваш файл. Ну оно не скомпилировалось, так как у меня не было pintf, поэтому я закомментировал все строчкисвязанные с printf - не работает. Пошел в софтваре компонентс и добавил tiny printf c IO stream USART1 - заработало.

странно.

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Чт янв 21, 2021 18:17:50

Не знаю как Вам помочь, поскольку не вижу что и как Вы делаете. А приведённое выше описание слишком кратко и расплывчато и мне непонятно. Отмечу лишь, что у меня никаких проблем не было и все SSv5 проекты работали без заморочек и для запуска никогда кнопку reset нажимать не нужно было после загрузки кода. Компоненты для
LED и кнопок я никогда на использовал, и всегда задействовал драйвер GPIO_interrupt и API из EMLIB. Мне так короче и быстрее. Добавлял лишь instance под пины для LED и кнопок в GPIO_init. Если хотите, могу прислать demo.

Если Вы просто скопировали мой app.c файл во вновь созданный проект, конечно он не будет работать без ручного добавления software components. Следует создать новый проект путём File->Import моего .sls файла, тогда весь созданный таким образом проект будет сразу готов для компиляции и должен собраться и работать без проблем.

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Чт янв 21, 2021 21:14:34

Я не писал подробно, так как, полагал, что понятно, что вопрос по лабораторной работе 4 и я её выполняю строго по-нотам и никакой отсебятины.. Т.е. Создаю проект, добавляю компоненты, конфигурирую GATT и правлю app.c. Под конец, мне надоело править app.c и я его копирую целиком. И пробовал этот проект создавать под разные платы с разными SDK (если это возможно). Естественно, конфигурирую периферию соответственно распиновке соответствующей платы (хотя это сам делает добавлятель компонентов, я только смотрю что правильный порт назначен и закрываю окошко).

Если его делать строго по инструкции, то на плате Thunderboard sense 2 работает, а на BGM220P - нет. Если проект на BGM220P запускать под отладчиком - работает. Если к проекту добавить компонент tiny printf (вместе с необходимым ему io stream USART), то тоже работает.

Если в вашем проекте, закомментировать в файле app.c все строчки где есть printf и из Software components удалить Tiny Printf, IO Stream retarget STDIO и IO Stream USART (т.е. всё необходимое для printf) - тоже перестаёт работать. Такое ощущение, что работает тогда, когда в системе есть какой-то "замедлитель". (Хотя, когда мой код ведёт себя таким образом, обычно выясняется, что где-то неинициализирована переменная или пропущен модификатор volatile).

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Чт янв 21, 2021 21:51:28

Вы переинсталлировали бутлоадер на BGM220 плате? Там изначально стоит старый, нужно его обязательно сменить на новый, иначе BT приложения не работают правильно (по крайней мере, у меня не работали). Сейчас пошлю Вам в ЛС инструкции и попробую сам соорудить проект аналогичный по функционалу Lab4.

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Чт янв 21, 2021 22:26:33

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

О, этот internal storage bootloader у меня уже есть собранный проект, и даже подписанный. Но пока я ключи в микроконтроллер не загружал.

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Чт янв 21, 2021 23:35:40

Ха! Я смог повторить проблему разрыва соединения, даже собрав проект Lab4 немного по-другому, но с тем-же функционалом.
Действительно, без printf не работает. Проблему смог преодолеть, поставив в обработчик прерывания кнопки задержку на 1мс (строка 109 в коде). Также работает если не посылать сигнал в стек и перенести обработчик внешнего сигнала в тело обработчика прерывания кнопки, но тоже после задержки. Сегодня вечером попробую повозиться с оригинальным кодом Lab 4 из Lab Manuals. Если не заработает без задержек и прочих фокусов, спрошу на форуме фирмы. А пока мой код:
Lab4.zip
(283.92 KiB) Скачиваний: 165

Насчёт бутлоадера, если Вы загружали precompiled на фабрике приложения в BGM220, они уже содержат нормальный бутлоадер, так что загрузка нового в соответствии с моей методичкой ничего не даст и проблема не в этом.

Добавлено позже: верьте или нет, но Ваш код для Lab4 работает нормально на демо-плате плате Thunderboard BG22 без всяких ухищрений. Сейчас спрошу в чём дело на тех. форуме. Как только (и если) ответят, отпишусь.

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Пт янв 22, 2021 22:18:58

Даже и не знаю теперь, радоваться или огорчаться... То что на демо-плате работает - это наверняка, ведь на вебинаре показали - оно работает. Просто расстраивает, что ни с того ни с сего возникает такой глюк и не знаешь, сам накосячил или где. Вчера пришло письмо, что мою плату выслали с трек-кодом.

Хотя ожидал, что будут примеры в стиле SSv5 - типа отдельной аппликации app_led.c, app_btn.c а не в стиле SSv4, где всё встраивается в один switch-case. Во всяком случае я так это понял, когда читал про миграцию с v4 на v5. Ну может дальше будет.

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Сб янв 23, 2021 15:33:23

удалено
Последний раз редактировалось parovoZZ Сб янв 23, 2021 21:11:37, всего редактировалось 1 раз.

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Сб янв 23, 2021 20:26:20

parovoZZ: Вы темой не ошиблись?
uldemir писал(а):ожидал, что будут примеры в стиле SSv5
Ничего не мешает самим попробовать. В стиле SSv5 необязательно информировать BT стек о внешних событиях. Можно ввести глобальную флаговую переменную button_signal, устанавливать её в обработчике прерывания кнопки вместо отсылки сигнала стеку, и проверять её в основном цикле приложения. Проверил - работает.
Спойлер
Код:
void sl_button_on_change(const sl_button_t *handle)
{
   sl_simple_button_context_t *ctxt = ((sl_simple_button_context_t *)handle[0].context);
   if (ctxt->state) {
      ctxt->history += 1;
      button_signal = 1;
//      sl_bt_external_signal(1);
   }
}

/**************************************************************************//**
 * Application Init.
 *****************************************************************************/
SL_WEAK void app_init(void)
{
}

/**************************************************************************//**
 * Application Process Action.
 *****************************************************************************/
SL_WEAK void app_process_action(void)
{
   if (button_signal) {
      sl_led_toggle(&sl_led_led0);
      if (notifyEnabled) {
         notification_data[0] = (uint8_t)simple_btn0_context.history;
//         simple_btn0_context.history = 0;
         // send number of button presses
         sl_bt_gatt_server_send_notification(g_lab4Connection,
           gattdb_BTN, sizeof(notification_data), notification_data);
      }
      button_signal = 0;
   }
}

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Вт фев 09, 2021 16:49:30

Есть вопрос. После очередного обновления - поменялся Bluetooth SDK с версии 3.1.0 на 3.1.1 - перестали собираться все проекты сделанные с предыдущим SDK. Как выйти из этой ситуации?

ошибка всюду одна:
fatal error: config-device-acceleration.h: No such file or directory mbedtls_config_autogen.h /BGM220-soc_empty/autogen line 36 C/C++ Problem

зато плюсом то, что вышепомянутая "четвертая лаба" с этим SDK стала работать и на плате с BGM220P (BRD4314A).

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Ср фев 10, 2021 06:26:46

Мммда... Я долго возился, но понял что проще всего будет пересобрать проект. Они поменяли структуру проекта в плане расположения tls библиотек.

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Ср фев 10, 2021 08:34:10

Тогда, хочу вернуться к вопросу о разделении процессов. В AN1255 я что-то не нашел...
Вот допустим, я хочу сделать отдельный процесс для кнопок и в нём делаю функцию обрабатывающую события БТ стека: button_on_event(evt). Как сделать, чтобы эта функция вошла в цепочку вызовов?

Вот в проекте iBeacon там такая конструкция в sl_bluetooth.c :
Код:
void sl_bt_process_event(sl_bt_msg_t *evt)
{
  sl_bt_ota_dfu_on_event(evt);
  sl_bt_beacon_on_event(evt);
  sl_bt_on_event(evt);
}
Но этот файл сгенеренный автоматически и править его нет смысла.

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Ср фев 10, 2021 19:09:56

Хммм. Перечитал несколько раз, но так до конца и не понял о чём идёт речь. Прежде всего процесс... - программируете приложение под RTOS? В любом случае, sl_bt - это внутренняя кухня BT стека и к кнопкам не имеет отношения. Прерывания от кнопок независимы от компоненты BT и зачем их класть в "цепочку стека" мне неясно. Посмотрите мой проект тремя постами выше. Возможно, я не понял вопрос.

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Ср фев 10, 2021 19:41:42

Нет. не RTOS.

Первое впечатление, когда читал про SSv5 было такое, что я смогу сделать несколько "процессов". У каждого свой init и свой process. И внутри каждого "процесса" я могу объявить функцию _on_event в которой и общается мой "процесс" со стеком.

Посмотрел на образцы и вижу, что у простого SoC Empty есть "процесс" app и "процесс" ota_dfu. И у обоих есть своя функция _on_event. Если, как в лабораторной работе №2, добавить iBeacon, то появляется третий процесс - beacon. И тоже со своим beacon_on_event. И как они вызываются я привёл в предыдущем сообщении. Но вот не могу найти механизма, как эти функции туда добавляются.

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

Хотя, я могу из app.c и сам вызывать подчинённые процессы.

Re: Разработка Bluetooth приложений на модулях Silicon Labs

Ср фев 10, 2021 20:28:27

Если я правильно понял, под "процессом" подразумевается какой-то while-loop (хотя OTA и не имеет цикла)? Если так, и у Вас их несколько, то может пора подумать про RTOS. В любом случае, чего я по-прежнему не понимаю - это что мешает общаться со стеком из обработчика on_event внешнего процесса? И вообще, чем on_event "процесса" отличается от обычного обработчика прерывания NVIC и чем лучше организация этого обработчика как on_event по сравнению со стандартным обработчиком прерывания NVIC. Конкретика помогла-бы понять лучше. Организация вызовов on_event OTA, iBeacon, и стека в sl_bt_process_event() - это внутренняя кухня BT стека и относится только к нему и мне неясно зачем нужно ещё что-то добавлять туда самому, когда можно это сделать вне sl_bt_process_event()?
Ответить