Skip to content

Конечный автомат для реализации на языке С #44

@dmitry-pozhidaev

Description

@dmitry-pozhidaev

Всем доброго времени суток
Осваиваю Дракон и пытаюсь сделать для микроконтроллера STM32 простейший конечный автомат для обслуживания кнопки и двух светодиодов.
Но прежде попробовал породить код на основе вот такой дракон-схемы
Снимок экрана_2020-06-17_17-07-05
Снимок экрана_2020-06-17_17-06-06
Код ,порожденный редактором, выглядит вот так:
`$ cat 22qaa.c
/* Autogenerated with DRAKON Editor 1.33 */
#include "22qaa.h"

static void main(void);

static int t_State1_signal1(
state machine,
int msg
);

static int t_State1_signal2(
state machine,
int msg
);

static int t_State2_signal1(
state machine,
int msg
);

static int t_State2_signal2(
state machine,
int msg
);

#define T_STATE1 1
#define T_STATE2 2
typedef int (t_callback)(state machine, int msg);
t_callback t_signal1_methods[] = {
0,
t_State1_signal1,
t_State2_signal1
};
t_callback t_signal2_methods[] = {
0,
t_State1_signal2,
t_State2_signal2
};
int t_signal1(int
machine, state machine, int msg) {
t_callback fun;
int next;
if (machine == 0) return 0;
if (*machine <= 0 || *machine > 2) return 0;
fun = t_signal1_methods[*machine];
if (!fun) return 0;
next = fun(machine, msg);
machine = next;
return 1;
}
int t_signal2(int
machine, state machine, int msg) {
t_callback fun;
int next;
if (machine == 0) return 0;
if (*machine <= 0 || *machine > 2) return 0;
fun = t_signal2_methods[*machine];
if (!fun) return 0;
next = fun(machine, msg);
*machine = next;
return 1;
}
int make_t(void) { return 1; }

static void main(void) {
// item 6
test();

}

static int t_State1_signal1(
state machine,
int msg
) {
// item 42
a=3;
return T_STATE1;

}

static int t_State1_signal2(
state machine,
int msg
) {
// item 43
b=3;
return T_STATE1;

}

static int t_State2_signal1(
state machine,
int msg
) {
// item 44
c=3;
return T_STATE2;

}

static int t_State2_signal2(
state machine,
int msg
) {
// item 45
d=3;
return T_STATE2;

}
`

`$ cat 22qaa.h
/* Autogenerated with DRAKON Editor 1.33 */
#ifndef 22QAA_H48267
#define 22QAA_H48267

int make_t(void);
int t_signal1(int* machine, state machine, int msg);
int t_signal2(int* machine, state machine, int msg);

#endif
`
В руководстве State Machines in DRAKON Editor в абзаце State machines and DRAKON написано: 2. The text in the "Formal parameters" icon should start with "state machine".
Почему это "state machine" уходит в сишный код в качестве аргумента в typedef int (*t_callback)(state machine, int msg);?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions