Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Micrium OS - кто-нить пользует? Есть вопросы.

Пн апр 27, 2020 23:19:36

Прикупил EZR32HG320F64R61G. Но из-за самоизоляции не могу забрать из ЧиДа.
Поэтому тренируюсь на Pearl Gecko Starter Kit купленной задешево по случаю.

Поморгать светодиодами и порисовать на LCD экране уже не интересно (LCD экран на ките чертовски хорош!).
Поэтому решил пальнуть из тяжёлой артиллерии - RTOS.
На данный момент имею Simplicity IDE с установленным Gecko SDK 5.9.4.0, Micrium OS Kernel 2.7.4 и GNU ARM 7.2.1.
Вообще не понял, как добыть рабочий пример с Micrium, т.к. IDE предлагает только документацию и ссылки на их doc`s (документация опечалила - нет и половины. А что есть, то расходится с комментариями в сырцах). Поэтому иду по этому гайду https://www.silabs.com/community/blog.e ... iumos-xSAy
Он вроде и не старый, но уже устарел: IDLE задача из kernel выпилена (если нужна IDLE задача, то комментарии в файлах говорят о создании пустой задачи с низшим приоритетом), TICK задача заменена на sleeptimer.
Все гайды начинаются так: откройте пример такой-то... Но мне нечего открывать, поэтому пошел с нуля. Новый MCU Project, далее выбираю копировать сырцы и дать линки на SDK (хотя все гайды говорят про необходимость скопировать Micrium OS Kernel в папку с проектом). По факту в папку с проектом "упали" пустые папки, куда в IDE залинкованы *.c файлы. В свойствах компилятора прописал линки к заголовочным файлам.

ВОПРОС 1. При пересборке проекта компилируются абсолютно все файлы. Процесс затягивается на 30-40 секунд. Почему так?
ВОПРОС 2. У меня две задачи. Одна мигает одним светодиодом, другая другим. Задача выглядит так:
Код:
void LED0Tgl_TaskCode (void *p_arg)
{
   RTOS_ERR   err;

   const OS_TICK   delay = 5000;

   Mem_SegCreate(      "Msg Pool Mem",
                  &MsgPoolMemSeg,
                  (CPU_ADDR)&MsgPoolMem,
                  MSG_POOL_SIZE,
                  LIB_MEM_PADDING_ALIGN_NONE,
                  &err);

   APP_RTOS_ASSERT_DBG((RTOS_ERR_CODE_GET(err) == RTOS_ERR_NONE), 1);

   Common_Init(&err);
   APP_RTOS_ASSERT_CRITICAL(err.Code == RTOS_ERR_NONE, ;);

   while (DEF_ON)
   {
      GPIO_PinOutToggle(gpioPortF, LED0_PIN);

      OSTimeDly(delay, OS_OPT_TIME_DLY, &err);

      if (RTOS_ERR_CODE_GET(err) != RTOS_ERR_NONE)
      {
         ///
      }
   }
}

В результате OSTimeDly формирует ошибку
RTOS_ERR_WOULD_OVF [30]
и во вторую задачу вообще не входит.
Где можно почитать про ошибки?
ВОПРОС 3. Где задаётся системный тик? У меня это так (по гайду):
Код:
#if (OS_CFG_TMR_EN == DEF_ENABLED)
static CPU_STK TimerTaskStk[LAB_OS_TMR_TASK_STK_SIZE];
#define TIMER_TASK_CFG .TmrTaskCfg =      \
{                                 \
   .StkBasePtr   = &TimerTaskStk[0],         \
   .StkSize   = LAB_OS_TMR_TASK_STK_SIZE,   \
   .Prio      = LAB_OS_TMR_TASK_PRIO,      \
   .RateHz      = LAB_OS_TMR_TASK_RATE_HZ   \
},
#else
#define TIMER_TASK_CFG
#endif

Что такое RateHz? У меня стоит значение 10u. Тик 100 мс?
Возможно, я не вижу мигания из-за ошибки выше?

ВОПРОС 4. Надо ли писать в main():
Код:
   CPU_Init();

   CMU_ClockEnable(cmuClock_GPIO, true);



Пытался изучить TI RTOS, но что-то не пошло. Здесь вроде по документации просто, но вот само документирование...

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Ср апр 29, 2020 23:00:08

Есть в файле sl_sleeptimer.c такая строчка

Код:
timer_frequency = sleeptimer_hal_get_timer_frequency();

и она возвращает 0.
Если нырнуть в недра функции, то там есть следующее:
Код:
CMU_ClockFreqGet(cmuClock_RTCC)

и оно тоже возвращает 0.
Блин блинский, как заставить тикать RTCC sleep timer?

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Ср апр 29, 2020 23:30:28

Беда многих фирм в том, что документация отстаёт от версий ПО, что делает многие туториалы недействительными. В версии SDK начиная с 2.7.0 сделано много изменений, в частности в последней версии RTOS. У меня здесь есть статья про эту RTOS под предыдущей версией SDK 2.6.x, где всё было сделано по классике и без больших изменений на протяжении долгих лет. Краткий ответ на Ваши вопросы - установите эту версию SDK, тогда все доки будут релевантыми, да и у меня в статье многое разжёвано. Так будет быстрее войти в курс дела, потом сами на свои дополнительные вопросы ответить сможете. На TI RTOS я забил по этой-же причине - очень сильное отставание доков от последней версии ПО. Но это было давно, с тех пор я к ней не возвращался, сейчас ситуация может быть и лучше, не знаю. Скорость компилирования в Eclipse зависит от шустрости компа, у меня это занимает секунд 10-20. RateHz - частота в герцах.

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Чт апр 30, 2020 16:30:14

У меня здесь есть статья про эту RTOS под предыдущей версией SDK 2.6.x, где всё было сделано по классике и без больших изменений на протяжении долгих лет.

Да, читал эту статью. Я думал, что я один такой русскоязычный. Странно, микриум стоит на втором месте после FreeRTOS, а документации толковой кот наплакал.


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

Я добавил в студию плату Thunderboard Sense 2 (SLTB004A). Но студия просит сменить версию SDK, чтобы увидеть примеры.
Тогда добавил плату EFM32 Giant Gecko Starter Kit (EFM32GG-STK3700). И о, чудо! Стали доступны примеры. Утянул к себе STK3700_micriumos_blink. Оно без проблем собралось. Работу проверить не могу - у меня Pearl Gecko. Поэтому в свойствах проекта сменил плату на свою. Но не тут-то было - 20 ошибок как с куста. Битый час добавлял недостающие пути к файлам и папкам. В результате проект собрался, но вернулось на круги своя - ловится эта ошибка:
Код:
  OS_ASSERT_DBG_ERR_SET((OSCfg_TickRate_Hz <= sl_sleeptimer_get_timer_frequency()), *p_err, RTOS_ERR_INVALID_CFG, ;)


В проекте с GiantGecko используется таймер RTC, а у меня RTCC. Могу и ошибаться, т.к. даташит на GG не смотрел))

За микриум ухватился, т.к. там есть библиотека с MQTT и USB. Но USB хочу портануть LUFA.

Добавлено after 7 minutes 46 seconds:
На TI RTOS я забил по этой-же причине - очень сильное отставание доков от последней версии ПО. Но это было давно, с тех пор я к ней не возвращался, сейчас ситуация может быть и лучше, не знаю.

Мне сайт TI нравится больше - любой пример можно скачать вообще без танцев с бубном. По-крайней мере, проблем с изучением MSP430FR не возникло. Если что не понятно из документации, есть примеры на все случаи жизни.

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Чт апр 30, 2020 21:30:58

У меня есть такая плата для Pearl Gecko, но я так и не понял чего хотите добиться. Ранее я работал с RTOS на этой плате. Для запуска RTCC нужно не только разрешить для него тактирование, но и заполнить структуру инициализации, если делаете ето с помощью Emlib. Или можно непосредственно с регистрами работать. Могу прислать тестовый проект для этого. Однако, с RTOS я сижу на SDK 2.6.4. Версия 2.7.х ещё сыровата, важные для меня "детские болезни" в Bluetooth под RTOS устранены только в последней её ревизии 2.7.4, и кто знает что там ещё осталось после major апгрейда при переходе с 2.6 на 2.7.

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Чт апр 30, 2020 22:42:56

Раскурил я эту шнягу силиконовскую)))
Я обходил стороной функции, которые начинаются на BSP_, считая их ардуино стайл программированием. Мне казалось, что внутри них настраивается только периферия выбранного платы-кита, я же хочу взять голый МК и внедрить в сой USB свисток. Поэтому всякие BSP_LedsInit() мне никак не подходят - на моей плате всё по-другому, нежели на ките. Но оказывается, что есть очень полезная функция BSP_SystemInit(), которая осуществляет минимально-начальную инициализацию камня. И там же есть мой RTC:
Код:
  sleeptimer_osc = cmuOsc_LFRCO;
  sleeptimer_select = cmuSelect_LFRCO;
#else
  #error "The definition of BSP_LF_CLK_SEL in bsp_cfg.h is not handled."
#endif

#if ((SL_SLEEPTIMER_PERIPHERAL == SL_SLEEPTIMER_PERIPHERAL_RTCC) || (SL_SLEEPTIMER_PERIPHERAL == SL_SLEEPTIMER_PERIPHERAL_RTC))
#if (SL_SLEEPTIMER_PERIPHERAL == SL_SLEEPTIMER_PERIPHERAL_RTCC)
  #if defined(_SILICON_LABS_32B_SERIES_2)
    sleeptimer_clock = cmuClock_RTCC;
  #else
    sleeptimer_clock = cmuClock_LFE;
  #endif
#elif (SL_SLEEPTIMER_PERIPHERAL == SL_SLEEPTIMER_PERIPHERAL_RTC)
  sleeptimer_clock = cmuClock_LFA;
#endif

  CMU_ClockSelectSet(sleeptimer_clock, sleeptimer_select);
#elif (SL_SLEEPTIMER_PERIPHERAL != SL_SLEEPTIMER_PERIPHERAL_PRORTC)
  #error "Invalid peripheral selected for SL_SLEEPTIMER in sl_sleeptimer_config.h"
#endif

  CMU_OscillatorEnable(sleeptimer_osc, true, false);

Добавил в проект на 3700STK, который переведен на PearlGecko и он замигал светодиодом)) Фуууух.

Т.к. это мой первый ARM, я понял, что без библиотек от производителя вообще никак. Я думал, что у MSP430 замороченная система тактирования, а у Cortex M4 это вообще головоломка. Но убило не это, а инициализация DCDC преобразователя - это какие-то вилы))) Это неделю надо безвылазно разбираться с регистрами, чтобы прикинуть что к чему)))

Добавлено after 4 minutes 28 seconds:
но я так и не понял чего хотите добиться.

светодиодиками поморгать из операционной системы. Ну это для начала.

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Чт апр 30, 2020 23:20:50

Т.к. это мой первый ARM, я понял,
что без библиотек от производителя вообще никак.
Не могу с этим согласиться. Да и сами Вы после второго-третьего проекта поймёте, что это не так. Мои студенты программируют EFM32 с нуля в моём курсе по ассемблеру без всяких библиотек, лишь на основе регистров, правда, без RTOS.
Я думал, что у MSP430 замороченная система тактирования, а у Cortex M4 это вообще головоломка.
Также уверен, что скоро измените своё мнение по этому поводу. Тактирование у EFM32 совершенно прозрачное по сравнению с другими моделями АРМ. Может оно выглядит сложным только сразу после 8- и 16-битных МК.
Но убило не это, а инициализация DCDC преобразователя - это какие-то вилы))) Это неделю надо безвылазно разбираться с регистрами, чтобы прикинуть что к чему)))
Take it easy. После недели работы с ARM будете конфигурировать любую периферию на уровне регистров в течении получаса с перекурами. А пока с библиотекой периферии вообще проблем не вижу - заполнил структуру (и то, большая часть её уже заполнена дефолтно) и передал её в API функцию.
светодиодиками поморгать из операционной системы. Ну это для начала.
Как я понял, Вам это уже удалось. С USB и MQTT я под RTOS не работал, а вот для Bluetooth - пару недель назад представил сюда статью, скоро опубликуют, надеюсь.

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Пт май 01, 2020 03:05:57

Как я понял, Вам это уже удалось.

Я почему-то решил, что ядро ОС само себе готовит тактирование. Оказывается, что это не так. Теперь буду разбираться, как на IDLE (не знаю, как это по-русски) задаче заставить ядро уйти в EM2.

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

я тоже хочу попробовать этот орешек. Печаль в том, что в Китае можно купить готовые платы, но это будет TI. У TI блютус внедрен в их RTOS. Возможно, что их RTOS не такая уж и сложная, но у меня пока нет железа. Тренироваться не на чем. А без практики чтение мануалов бесполезно - не откладывается.
Делать свою плату на МК от SiLabs - я не сделаю её в таких габаритах, которые предлагают китайцы. А если МК на шарах, то мне его вообще будет не распаять(

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Пт май 01, 2020 09:05:48

Про габариты китайцев не понял маленькая для Вас их плата или большая и какой чип имеете в виду. В любом случае для Bluetooth следует просто купить Силлабовский Bluetooth модуль, который паяется легко. Размер его 13x15mm. У них eщё есть новый Bluetooth MK семейства BG22 в корпусе QFN32.

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Пт май 01, 2020 13:54:41

Габариты имею ввиду что-то в пределах 15*20мм. У китайцев такой модуль стоит в районе 6$. Мне от модуля нужен SPI интерфейс, пара-тройка GPIO и разведённая радиочасть.
Мне тут ещё перепала arduino nano ble 33 на nRF52840. У китайцев тоже такое есть, но nRF пока не изучал. Стек arduino не интересен в принципе. Платка лежит без дела пока.

Тут кстати ещё вопрос про отчет компилятора. Вроде в симплисити студии GNU компилятор, а выдаёт такую простыню
section size addr
.text 32740 0
.ARM.exidx 8 32740
.data 284 536870912
.bss 15228 536871196
.heap 3072 536886424
.stack_dummy 1024 536886424
.ARM.attributes 46 0
.comment 126 0
.debug_info 161910 0
.debug_abbrev 14073 0
.debug_loc 32912 0
.debug_aranges 3984 0
.debug_ranges 3504 0
.debug_line 50293 0
.debug_str 34601 0
.debug_frame 16040 0
.stabstr 223 0
Total 370068
Где бы почитать что есть что? IAR формирует map файл и в нём всё расписано. Здесь ж не понимаю, что вошло в прошивку, а что нет( Сколько ОЗУ занято...

Почему на каждый чих пересобирается проект тоже стало понятно - бесчисленное количество команд препроцессора в практически во всех файлах.

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Пт май 01, 2020 20:07:14

Где бы почитать что есть что?
См здесь.

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Пт май 01, 2020 21:58:58

Блин, фантастика! Мигают два светодиода, когда операционной системе делать нечего, она уходит в EM2. Потребление при этом 1-2мкА. Правда расплата за это куча флеша, куча оперативы)))

А для запуска uc/Probe необходим OS_TRACE_INIT?

Дебаггер с energy profiler несовместим?

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Пт май 01, 2020 23:04:37

Мигание светодиодов с микроамперным потреблением можно добиться и без платы за флеш для RTOS. Однако, как, например, показано в 3-й статье про Bluetooth, добавка RTOS к Bluetooth приложению практически не оказывает ощутимого влияния на среднее токопотребление, однако, уменьшает головную боль состыковки временных требований обработки событий стека и приложения.

OS_TRACE_INIT необходим только для Segger System View.
В студии можно запускать загрузочный адаптер только для отладки кода или измерения потребления, но не оба сразу.

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Сб май 02, 2020 04:10:48

Мигание светодиодов с микроамперным потреблением можно добиться и без платы за флеш для RTOS.

Ну понятно)) Это ж начало))

OS_TRACE_INIT необходим только для Segger System View.

Блин, а почему у меня в uc/Probe одни нули? Зеленая стрелка стоит напротив IDLE задачи и всё. Не может же быть, что задача использует 0 слов стека?

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

А нет ощущения, что этот амперметр подвирает? На плате MSP430 значения тока стоят стабильно (градация 100нА). Тут же шумно как-то и проскакивают значения 0.00 mA

уменьшает головную боль состыковки временных требований обработки событий стека и приложения.

Читаю плотно документацию - кирпичики складываются. Плохо, что свой МК забрать не могу. Правда и плату под него ещё китайцам не отправлял) Хочется уже USB посчупать с радиотрактом) У них пакет вроде RAIL называется. Не знаю, как он для субгигарца - не разбирался ещё.

В любом случае для Bluetooth следует просто купить Силлабовский Bluetooth модуль

А как он называется? У TI тоже есть такой модуль, но в маузере он стоит абсолютно не приличных денег.

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Сб май 02, 2020 04:39:31

Блин, а почему у меня в uc/Probe одни нули?
Я не знаю что Вы делаете в программе, но для RTOS нужно разрешить сбор статистики в os_cfg.h, см. лучше статью. Кроме того, возможно что с SDK 2.7.x что-то ещё недоделано. Поэтому и рекомендовал прошлую стабильную и хорошо отлаженную версию 2.6.4, где всё работает как доктор прописал.

А нет ощущения, что этот амперметр подвирает?
На силлабовской плате дефолтно работает DC-DC конвертер. Его можно отключить, будет менее шумно, см. графики в первой часи статьи про Bluetooth. Кроме того, при работе RTOS помимо мигания светиком могут работать ещё какие-то потоки, например, сбор статистики, что тоже добавит шума. Если значения тока стоят стабильно, у меня-бы это вызывало больше подозрений.

У них пакет вроде RAIL называется.
RAIL у силлабов - это Radio Abstraction Interface Layer. Фактически планировщик для работы радио, типа своей маленькой RTOS. Сейчас RAIL работает в купе с Micrium.

Не знаю, как он для субгигарца - не разбирался ещё.
Для субггц имеется протокол Z-wave, у Силлабов он, вроде, стабильный после 20 лет разработки. Недавно был вебинар про него, если интересно могу поискать линк на его видео-запись.

А как он называется?
У силлабов много ранзых Bluetooth модулей, я рекомендую
https://www.mouser.com/Search/Refine?Keyword=bgm13p
См. также эту ветку насчёт Bluetooth модулей и пр.

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Сб май 02, 2020 13:10:52

Я не знаю что Вы делаете в программе, но для RTOS нужно разрешить сбор статистики в os_cfg.h, см. лучше статью. Кроме того, возможно что с SDK 2.7.x что-то ещё недоделано. Поэтому и рекомендовал прошлую стабильную и хорошо отлаженную версию 2.6.4, где всё работает как доктор прописал.


Я удалил свою IDLE задачу с приоритетом 2 (задачи мигания светодиодом имеют приоритет 1), а чтобы уходить в сон добавил hook
Код:
void OSIdleEnterHook (void)
{
   EMU_EnterEM2(true);
}


И в uc/Probe всё заработало. Жалко, что всего лишь одну минуту( Я так понимаю, в release конфигурации вся эта информация в прошивке будет недоступна (пока не понимаю механизм передачи данных из МК в uc/Probe)?

На силлабовской плате дефолтно работает DC-DC конвертер. Его можно отключить, будет менее шумно, см. графики в первой часи статьи про Bluetooth. Кроме того, при работе RTOS помимо мигания светиком могут работать ещё какие-то потоки, например, сбор статистики, что тоже добавит шума. Если значения тока стоят стабильно, у меня-бы это вызывало больше подозрений.

У меня шум во сне EM2 аж от 1 нА(!) и до единиц мкА (чему я верю).

Сейчас RAIL работает в купе с Micrium.

Но вот в доках микриум я его не вижу. Он идёт отдельной "статьёй". В принципе, всё равно разбираться с их API на трансиверы, поэтому можно и на низком уровне запрогать).

Для субггц имеется протокол Z-wave, у Силлабов он, вроде, стабильный после 20 лет разработки. Недавно был вебинар про него, если интересно могу поискать линк на его видео-запись.

Z-Wave же какая-то там сигма разрабатывала? У меня на распи стоит старый Z-Wave трансивер (с европейской частотой)), стоит их ПО, но датчиков нет. Ну и лежат у меня субгигагерцовые передатчики и купил ещё в ЧиДе полноценные трансиверы.

У силлабов много ранзых Bluetooth модулей, я рекомендую
https://www.mouser.com/Search/Refine?Keyword=bgm13p
См. также эту ветку насчёт Bluetooth модулей и пр.

Положу в избранное. Потом поизучаю.

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Ср май 06, 2020 23:12:25

А нет ли где примера работы UART с micrium? В доках только SPI. Я вот накидал инициализацию
Код:
void InitUART0 (void)
{
   RTOS_ERR   err;

   USART_InitAsync_TypeDef usart_initasync = USART_INITASYNC_DEFAULT;

   GPIO_PinModeSet(gpioPortA, 1, gpioModeInput, 0);
   GPIO_PinModeSet(gpioPortA, 0, gpioModePushPull, 1);

   //GPIO_PinModeSet(gpioPortA, 5, gpioModePushPull, 1); <-from VCOM

   CMU_ClockEnable(cmuClock_USART0, true);

   usart_initasync.enable = usartDisable;
   USART_InitAsync(USART0, &usart_initasync);

   USART0->ROUTELOC0 = USART_ROUTELOC0_RXLOC_LOC0 | USART_ROUTELOC0_TXLOC_LOC0;
   USART0->ROUTEPEN |= USART_ROUTEPEN_TXPEN | USART_ROUTEPEN_RXPEN;

   USART_IntEnable(USART0, USART_IEN_RXDATAV);
   USART_IntEnable(USART0, USART_IEN_TXC);

   NVIC_EnableIRQ(USART0_RX_IRQn);
   NVIC_EnableIRQ(USART0_TX_IRQn);

   USART_Enable(USART0, usartEnable);

   IO_Init(&err);
   APP_RTOS_ASSERT_DBG((RTOS_ERR_CODE_GET(err) == RTOS_ERR_NONE), 1);

   Serial_Init(&err);
   APP_RTOS_ASSERT_DBG((RTOS_ERR_CODE_GET(err) == RTOS_ERR_NONE), 1);

}

И чего-то не понимаю - ядру надо знать, что я работаю с UART или нет? Через него только прерывания идут, а остальное его не интересует?

Добавлено after 1 minute 7 seconds:
Community с SiLabs вялое какое-то. Видимо из-за моего английского))

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Чт май 07, 2020 00:55:50

ядру надо знать, что я работаю с UART или нет?
Не обязательно. Но зависит от того, что хотите делать в прерывании. См. KA и NKA типы ISR. Может следующий документ поможет: Migration Guide: from FreeRTOS to Micrium OS (секция 10).

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Чт май 07, 2020 02:18:27

Migration Guide: from FreeRTOS to Micrium OS (секция 10).

Листал его раз двадцать)) И только сейчас заметил, что там есть пример с UART )

Re: Micrium OS - кто-нить пользует? Есть вопросы.

Пт май 08, 2020 17:26:49

См. KA и NKA типы ISR.

Их тоже вырезали. В мануале 5.05 они есть, в 5.08 уже нету.
Ответить