1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/PISCES_X-NorthFrame

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
readme.md

NorthFrame

NF_FsmDesigner: инструмент C# Winform.

NF_Signal: набор сигналов.

NF_Signal_Set("flag_connect", 1);
NF_Signal_Set("blink_cnt", 3);

NF_SignalValue flag_connect = NF_Signal_Get("flag_connect");

Демонстрация в Visual Studio 2012:

Шаг 1: создание проекта NF_FsmDesignerDemo.

QandE_FSM

Шаг 2: реализация кода.

#include <n_frame.h>
#include <fsm_qande.h>

/* Объявление функций */
extern void IDLE_TO_Q(void);
extern void Q_TO_QE(void);
extern void QE_TO_IDLE(void);
extern void QE_TO_Q(void);
extern void Q_TO_IDLE(void);

/* Реализация функций */
void FSM_QandE_IDLE(NF_FSM* me, NF_Event event);
void FSM_QandE_Q_DOWN(NF_FSM* me, NF_Event event);
void FSM_QandE_QE_DOWN(NF_FSM* me, NF_Event event);

/* Создание объекта */
NF_FSM FSM_QandE = {
    FSM_QandE_IDLE
};

/* IDLE */
void FSM_QandE_IDLE(NF_FSM* me, NF_Event event)
{

    if (NF_FSM_NameIs(event.Name, "Q_DOWN"))
    {
        IDLE_TO_Q();
        NF_FSM_TRAN(FSM_QandE_Q_DOWN);
        return ;
    }

    if (NF_FSM_NameIs(event.Name, "test"))
    {
        NF_FSM_TRAN(FSM_QandE_IDLE);
        return ;
    }
}

/* Q_DOWN */
void FSM_QandE_Q_DOWN(NF_FSM* me, NF_Event event)
{

    if (NF_FSM_NameIs(event.Name, "E_DOWN"))
    {
        Q_TO_QE();
        NF_FSM_TRAN(FSM_QandE_QE_DOWN);
        return ;
    }

    if (NF_FSM_NameIs(event.Name, "Q_UP"))
    {
        Q_TO_IDLE();
        NF_FSM_TRAN(FSM_QandE_IDLE);
        return ;
    }
}

/* QE_DOWN */
void FSM_QandE_QE_DOWN(NF_FSM* me, NF_Event event)
{

    if (NF_FSM_NameIs(event.Name, "Q_UP"))
    {
        QE_TO_IDLE();
        NF_FSM_TRAN(FSM_QandE_IDLE);
        return ;
    }

    if (NF_FSM_NameIs(event.Name, "E_UP"))
    {
        QE_TO_Q();
        NF_FSM_TRAN(FSM_QandE_Q_DOWN);
        return ;
    }
}

Шаг 3: код в main.c.

#include "n_frame.h"

#include "windows.h"
#include "stdio.h"

#include "fsm_qande.h"

#define KEY_VALUE(_key) ((GetKeyState(_key) >= 0) ? NF_Bool_False : NF_Bool_True )

/* Обработка клавиш */
void Test_Key_Process(void)
{
	static NF_Bool last_q_val = NF_Bool_False;
	static NF_Bool last_e_val = NF_Bool_False;

	NF_Bool then_q_val;
	NF_Bool then_e_val;

	then_q_val = KEY_VALUE('Q');
	then_e_val = KEY_VALUE('E');

	/* Q */
	if ((last_q_val == NF_Bool_False) && (KEY_VALUE('Q') == NF_Bool_True))
	{
		NF_FSM_Dispatch(&FSM_QandE, NF_FSM_Event("Q_DOWN"));
	} 
	else if ((last_q_val == NF_Bool_True) && (KEY_VALUE('Q') == NF_Bool_False))
	{
		NF_FSM_Dispatch(&FSM_QandE, NF_FSM_Event("Q_UP"));
	}

	/* E */
	if ((last_e_val == NF_Bool_False) && (KEY_VALUE('E') == NF_Bool_True))
	{
		NF_FSM_Dispatch(&FSM_QandE, NF_FSM_Event("E_DOWN"));
	} 
	else if ((last_e_val == NF_Bool_True) && (KEY_VALUE('E') == NF_Bool_False))
	{
		NF_FSM_Dispatch(&FSM_QandE, NF_FSM_Event("E_UP"));
	}

	last_q_val = then_q_val;
	last_e_val = then_e_val;
}

void IDLE_TO_Q(void)
{
	printf("state translate : IDLE -> Q_DOWN\n");
}

void Q_TO_QE(void)
{
	printf("state translate : Q_DOWN -> QE_DOWN\n");
}

void QE_TO_IDLE(void)
{
	printf("state translate : QE_DOWN -> IDLE\n");
}

void QE_TO_Q(void)
{
	printf("state translate : QE_DOWN -> Q_DOWN\n");
}

void Q_TO_IDLE(void)
{
	printf("state translate : Q_DOWN -> IDLE\n");
}

int main(void)
{
	for (;;)
	{
		Test_Key_Process();
	}
}

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
AGPL-3.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://gitlife.ru/oschina-mirror/PISCES_X-NorthFrame.git
git@gitlife.ru:oschina-mirror/PISCES_X-NorthFrame.git
oschina-mirror
PISCES_X-NorthFrame
PISCES_X-NorthFrame
master