Balancer> Теперь надо ломать голову над реализацией стека возврата
Ну, в общем, управление потоком исполнения работает. Хотя чуть голову не сломал, не понимая, почему у меня обнуляется стек возвратов. Оказалось, хитрое антипереполнение стека данных
Помигаем:
// LED_BUILTIN HIGH DIGITAL!
void word_digital_write()
{
int pin = _pop();
digitalWrite(pin, top_x); // turn the LED on (HIGH is the voltage level)
top_x = _pop();
}
void word_delay()
{
delay(top_x);
top_x = _pop();
}
COLON(led_on, W({lit, LED_BUILTIN, lit, HIGH, word_digital_write, 0 }));
COLON(led_off, W({lit, LED_BUILTIN, lit, LOW, word_digital_write, 0 }));
COLON(blink, W({led_on, lit, 500, word_delay, led_off, lit, 500, word_delay, 0}));
COLON(fmain, W({blink, blink, blink, blink, 0}));
void setup() {
Serial.begin(9600);
while (!Serial) { }
pinMode(LED_BUILTIN, OUTPUT);
fmain();
}
void loop() {
}