embOS. Операционная система реального времени от Segger. Часть 1.

Доброе время суток!

Сегодня я расскажу и покажу, как быстро и безболезненно поднять embOS для stm32f429i-disco. Увидим, как создавать потоки и как с ними работать.

1. Переходим на официальный сайт Segger в раздел загрузок https://segger.com/downloads.html.

2. Находим архив с название embOS trial for Cortex-M and KEIL compiler. Нажимаем на него и переходим на экран регистрации.

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

4. После небольшого промежутка времени, необходимо разархивировать архив. В разархивированном архиве находим проект для stm32f429i-disco.

5. Запускаем проект для кеила, немножко по шаманим с настройками и конфигурацией железа и заливаем проект.

6. После заливки прошивы на камень, светодиод PG13 и светодиод PG14 начинают мигать с различной частотой на борде. Это базовый пример. В родительской папке embOS есть руководство по эксплуатации данной ОСРВ и диспетчер задач для embOS, подключаешь плату запускаешь embOSView и смотришь за процессом переключения (вытеснения) задач.

Если Вы работали с другими ОСРВ, я думаю Вам будет очень многое сразу, в коде программы, понятно.

/*********************************************************************
*               SEGGER MICROCONTROLLER GmbH & Co KG                  *
*       Solutions for real time microcontroller applications         *
**********************************************************************
*                                                                    *
*       (c) 1995 - 2015  SEGGER Microcontroller GmbH & Co KG         *
*                                                                    *
*       www.segger.com     Support: support@segger.com               *
*                                                                    *
**********************************************************************
*                                                                    *
*       embOS * Real time operating system for microcontrollers      *
*                                                                    *
*                                                                    *
*       Please note:                                                 *
*                                                                    *
*       Knowledge of this file may under no circumstances            *
*       be used to write a similar product or a real-time            *
*       operating system for in-house use.                           *
*                                                                    *
*       Thank you for your fairness !                                *
*                                                                    *
**********************************************************************
*                                                                    *
*       OS version: 4.06b                                            *
*                                                                    *
**********************************************************************

----------------------------------------------------------------------
File    : Start_LEDBlink.c
Purpose : Sample program for OS running on EVAL-boards with LEDs
--------- END-OF-HEADER --------------------------------------------*/


#include "RTOS.h"
#include "BSP.h"

OS_STACKPTR int StackHP[128], StackLP[128];          /* Task stacks */
OS_TASK TCBHP, TCBLP;                        /* Task-control-blocks */


static void HPTask(void) {
  while (1) {
    BSP_ToggleLED(0);
    OS_Delay (50);
  }
}

static void LPTask(void) {
  while (1) {
    BSP_ToggleLED(1);
    OS_Delay (200);
  }
}

/*********************************************************************
*
*       main
*
*********************************************************************/

int main(void) {
  OS_IncDI();                      /* Initially disable interrupts  */
  OS_InitKern();                   /* Initialize OS                 */
  OS_InitHW();                     /* Initialize Hardware for OS    */
  BSP_Init();                      /* Initialize LED ports          */
  /* You need to create at least one task before calling OS_Start() */
  OS_CREATETASK(&TCBHP, "HP Task", HPTask, 100, StackHP);
  OS_CREATETASK(&TCBLP, "LP Task", LPTask,  50, StackLP);
  OS_Start();                      /* Start multitasking            */
  return 0;
}

Продолжение следует…