3. Создание задач c параметром

При создании задач часто может возникать ситуация — когда требуется несколько задач с похожим функционалом (отличающихся несколькими константами или условиями) Чтобы не создавать лишние задачи с повторением функционала — можно использовать параметры. Как мы помним при создании задачи используется «тело» функции void vTaskCode(void *pvParameters) { //variables init (if necessary) for(;;) //while(1) { //Code } } […]

2. Создание задач и приоритеты

Рассмотрим принцип создания задачи в ОС РВ FreeRTOS Для создания задачи необходимо включить и настроить «системные тики» FreeRTOS (немного отличается на разных микроконтроллерах): 1-написать «тело» задачи, например: void vTaskCode(void *pvParameters) { //variables init (if necessary) for(;;) //while(1) { //Code } } В функции main произвести создание xTaskCreate( vTaskCode, «vTaskCode_user», STACK_SIZE, (void*) &xParameter, TASK_PRIORITY, &xHandle); 2-В функции main произвести создание (выделение стека […]

1. Введение в FreeRTOS

Следует отметить, что на данный момент (начало 2022г) у меня не очень большой опыт работы с FreeRTOS, информация представленная здесь является обобщением моих «размышлений», опыта и переработкой данных из других источников и не претендует на академическую точность. Просьба замечания оставлять в комментариях. В настоящее время существует большое число операционных систем реального времени (ОС РВ) и […]

15. Uart (Transmit) FreeRTOS

Передадим данные по UART с использованием FreeRTOS и созданием задачи. Для работы с freeRTOS необходимо изменить SDK (в папке с исходниками все добавлено). В создаваемый проект необходимо дописать следующие пути: Выбираем Проект->Properties->C/C++ General -> Paths and Symbols -> GNU C Изменим Makefile (лучше взять из примера в папке с исходниками) Изменим содержимое файла main.h, дописав […]

14. TCP Client

Создадим TCP клиент на микроконтроллере (модуле) ESP8266. В файле user_config.h напишем дефайны для точки доступа #define WiFi_Client_SSID «qwe1» //в SSID обязательно должны быть цифры!!!! #define WiFi_Client_Password «12345678» #define TCP_SERVER_IP «192.168.0.53» #define TCP_SERVER_PORT 30000 В файле main.c Добавляем #include: #include «driver/uart.h» #include «espconn.h» #include «mem.h» Добавляем переменные: //—————————————————— //User_Variables //—————————————————— static os_timer_t os_timer01; static uint8_t led_state=0; //for […]

13. UDP Server

Создадим UDP сервер (НЕ ТОЧКУ ДОСТУПА) с фиксированными IP и портом. (Точка доступа — это DHCP сервер, который сам присуждает IP и порт) Настроим соединение по UDP протоколу и обменяемся датаграммами. В файле user_config.h напишем дефайны для точки доступа #define WiFi_Client_SSID «qwe1» //в SSID обязательно должны быть цифры!!!! #define WiFi_Client_Password «12345678» #define UDP_SERVER_PORT 30000 В файле main.c добавляем […]

12. Connect to UDP Client

Настроим соединение по UDP протоколу и обменяемся датаграммами. В файле user_config.h напишем дефайны для точки доступа #define WiFi_Client_SSID «qwe1» //в SSID обязательно должны быть цифры!!!! #define WiFi_Client_Password «12345678» #define UDP_SERVER_IP «192.168.0.53» #define UDP_SERVER_PORT 30000 В файле main.c добавляем код: #include «espconn.h» //—————————————————— //User_Variables //—————————————————— static os_timer_t os_timer01; static uint8_t led_state=0; //for wifi struct espconn pConn; esp_udp ConnUDP; […]

11. Wi-Fi STA (станция/клиент)

Настроим соединение по UDP протоколу и произведем ping контроллера. Контроллер поддерживает 3 режима работы: Аппаратный режим станции (он подключается к какой-то сети) Программный режим точки доступа (контроллер создает сеть) Совмещенный режим (1+2) Посмотрим на примере как подключиться к существующей сети. В файле main.c Добавим глобальные переменные: //—————————————————— //User_Variables //—————————————————— static os_timer_t os_timer01; static uint8_t led_state=0; static […]

10. Программный таймер

Данный таймер предоставлен с помощью библиотеки osapi.h (#include «osapi.h»). При работе этого таймера нельзя использовать код в while(1). при использовании while(1) и программного таймера код в таймере будет игнорироваться! Временные интервалы выдерживаются не строго! Функция деинициализация (обнуления) структуры таймера: os_timer_disarm(os_timer_t *ptimer); Функция инициализация структуры таймера: os_timer_arm(os_timer_t *ptimer); Функция указывает структуру и функцию обратного вызова: os_timer_setfn(&os_timer01, (os_timer_func_t*)Timer01_Callback, NULL); Функция настройки и […]

09. Работа с SPI (Transmit)

ESP8266 имеет 2 аппаратных SPI 1-й SPI (General) имеет расширенный функционал и на большинстве модулей используется для работы с flash (скорости master/slave 80/20 МГц соответственно ) 2-й SPI (HSPI) (скорость master/slave до 20 МГц) Автор «Narod Stream» написал хорошую библиотеку (нажмите чтобы скачать) для работы с SPI, разумнее использовать ее. Для передачи в SPI используется 16-ть 32 […]