c_cpp Egyszerűállapotgépdemonstráció
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp Egyszerűállapotgépdemonstráció相关的知识,希望对你有一定的参考价值。
/*
*
* Egyszerű állapotgép demonstráció
*
* lukacs@jozsef.eu
*/
/* ---------------------------------------------------- */
#include <stdio.h>
#include <unistd.h>
/* ---------------------------------------------------- */
/* ---------------------------------------------------- */
typedef void (*function_pointer)(void *);
typedef struct {
function_pointer ptr;
unsigned char ft;
} SM;
#define SM_STATE(name) void name(SM *_sm_)
#define SM_INIT(sm, name) { sm.ptr = (function_pointer)name; sm.ft = 1; }
#define SM_EXEC(sm) { function_pointer temp = sm.ptr; sm.ptr(&sm); sm.ft = (temp != sm.ptr); }
#define SM_NEXT_STATE(name) _sm_->ptr = (function_pointer)name
#define SM_FIRST ( _sm_->ft )
#define SM_COMPARE(sm, name) ( sm.ptr == (function_pointer)name )
/* ---------------------------------------------------- */
/* ---------------------------------------------------- */
void piros_lampa(int i) {
printf("Piros lámpa:\t%d\n", i);
}
void sarga_lampa(int i) {
printf("Sárga lámpa:\t%d\n", i);
}
void zold_lampa(int i) {
printf("Zöld lámpa:\t%d\n", i);
}
/* ---------------------------------------------------- */
SM sm_lampa;
SM_STATE(L_PIROS);
SM_STATE(L_PIROS_SARGA);
SM_STATE(L_ZOLD);
SM_STATE(L_SARGA);
SM_STATE(L_PIROS) {
static n;
if(SM_FIRST) {
piros_lampa(1);
sarga_lampa(0);
zold_lampa(0);
printf("--\n");
n = 0;
}
n++;
if(5 < n) {
SM_NEXT_STATE(L_PIROS_SARGA);
}
}
SM_STATE(L_PIROS_SARGA) {
static n;
if(SM_FIRST) {
piros_lampa(1);
sarga_lampa(1);
zold_lampa(0);
printf("--\n");
n = 0;
}
n++;
if(2 < n) {
SM_NEXT_STATE(L_ZOLD);
}
}
SM_STATE(L_ZOLD) {
static n;
if(SM_FIRST) {
piros_lampa(0);
sarga_lampa(0);
zold_lampa(1);
printf("--\n");
n = 0;
}
n++;
if(5 < n) {
SM_NEXT_STATE(L_SARGA);
}
}
SM_STATE(L_SARGA) {
static n;
if(SM_FIRST) {
piros_lampa(0);
sarga_lampa(1);
zold_lampa(0);
printf("--\n");
n = 0;
}
n++;
if(1 < n) {
SM_NEXT_STATE(L_PIROS);
}
}
/* ---------------------------------------------------- */
void lin_setup() {
SM_INIT(sm_lampa, L_PIROS);
}
void lin_loop() {
SM_EXEC(sm_lampa);
usleep(300000);
}
/* ---------------------------------------------------- */
void main() {
lin_setup();
while(1) {
lin_loop();
}
}
/* ---------------------------------------------------- */
以上是关于c_cpp Egyszerűállapotgépdemonstráció的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp Este algoritmo selecciona elelementomásgrandey lo colocaalúltimo,despuésrepited
c_cpp 数据对齐 - 填充文章kháhayvàđầyđủvề数据对齐vàpaddinghttps://www.cppdeveloper.com/2018/01/28/
替换字符串中的字符[重复]
css Rozmazanáčára(přechodová,pokrajíchmázlá,prostředekplná)
css Táblázatmindenmásodiksora
css divartartalmánakvertiikálisközépreigazítása