Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ***********************************************************
- // ** NyaOS Sample **
- // ***********************************************************
- // http://teplofizik.diary.ru/p179620030.htm
- #include "nyaos.h"
- #include <stm32f4xx.h>
- volatile int A = 0;
- // Идентификатор события (число любое, но уникальное)
- #define BUTTON_EVENT 0x100
- // Дам номера кодам события BUTTON_EVENT тождественные номерам светодиодов, которыми
- // будем моргать по наступлении события
- #define BUTTON_ONDOWN 1
- #define BUTTON_ONUP 3
- // Какое-то событие
- volatile uint32_t MyEvent = 0;
- // Инициализация выводов, подключённых к кнопке
- // Аргументы: нет
- // Результат: нет
- void ButtonInit(void)
- {
- RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
- }
- // Инициализация выводов, подключённых к кнопке
- // Аргументы: нет
- // Результат: 0, если кнопка отпущена, 1, если нажата.
- uint32_t ButtonGet(void)
- {
- return (GPIOA->IDR & 0x00000001);
- }
- // Процесс 3 - моргание светодиода
- int Process3(uint32_t Argument)
- {
- while(1)
- {
- LedOn(Argument);
- Delay(500);
- LedOff(Argument);
- Delay(500);
- }
- }
- // Процесс 2 - работа с событием "нажатие кнопки"
- int Process2(uint32_t Argument)
- {
- while(1)
- {
- // Получим номер светодиода через код события (я сделал их тождественными, см. наверху)
- uint32_t Led = WaitForEvent(BUTTON_EVENT);
- // По нажатию кнопки мигнёт светодиод 1
- // По отпускнию кнопки мигнёт светодиод 3
- LedOn(Led);
- Delay(100);
- LedOff(Led);
- }
- }
- // Процесс 1 - опрос кнопки и генерирование события
- int Process1(uint32_t Argument)
- {
- int ButtonPressed = 0;
- // Настроим кнопку
- ButtonInit();
- // Зарегистрируем событие EVT_SW1 на переменную MyEvent без маскирования
- RegisterEvent(BUTTON_EVENT, &MyEvent);
- while(1)
- {
- Delay(10);
- if(ButtonGet())
- {
- LedOn(0);
- // Событие по нарастающему фронту сигнала
- if(ButtonPressed == 0)
- {
- // Передадим 1
- FireEvent(BUTTON_EVENT, BUTTON_ONDOWN);
- }
- ButtonPressed = 1;
- }
- else
- {
- LedOff(0);
- // Событие по спадающему фронту сигнала
- if(ButtonPressed == 1)
- {
- // Передадим 3
- FireEvent(BUTTON_EVENT, BUTTON_ONUP);
- }
- ButtonPressed = 0;
- }
- }
- }
- int main(void)
- {
- LedInit();
- // Инициализация и настройка ОС
- nyaos_Init();
- // Процесс 1 - опрос кнопки и генерирование события
- nyaos_AddProcess("Process1", &Process1, 0, 0);
- // Процесс 2 - работа с событием "нажатие кнопки"
- nyaos_AddProcess("Process2", &Process2, 0, 0);
- // Процесс 3 - моргание светодиода 2 (передача через аргумент)
- nyaos_AddProcess("Process3", &Process3, 2, 0);
- // Запуск ОС
- nyaos_Start();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement