Обновить

Комментарии 12

Небольшой промптинг привёл к более железобетонному чистому С с bitfield-ами и LUT для конечного автомата, как раз для мелких контроллеров носимых изделий. Для текста - отдельные таблицы.

Автомат с LUT
#include <stdint.h>

// Numeric mappings for States and Outputs
typedef enum { ST_START = 0, ST_SLEEP, ST_REST, ST_WALK, ST_RUN } State;
typedef enum { Y0_NULL = 0, Y1, Y2, Y3 } Output;

// Bitfield for packed inputs
typedef struct {
    uint8_t x2 : 1; // Bit 0
    uint8_t x3 : 1; // Bit 1
    uint8_t x4 : 1; // Bit 2
    uint8_t _res: 5;
} InputBits;

typedef struct {
    State next_state;
    Output output_id;
} Transition;

// Transition table: [CurrentState][InputBitmask]
// InputBitmask = (x4 << 2) | (x3 << 1) | (x2)
static const Transition TBL_BONYA[5][8] = {
    [ST_START] = { {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3} },
    [ST_SLEEP] = { {0,0}, {1,1}, {2,2}, {1,1}, {0,0}, {1,1}, {2,2}, {1,1} },
    [ST_REST]  = { {4,2}, {1,2}, {2,1}, {2,1}, {3,2}, {1,2}, {2,1}, {2,1} },
    [ST_WALK]  = { {4,2}, {0,0}, {2,2}, {2,2}, {3,1}, {3,1}, {3,1}, {3,1} },
    [ST_RUN]   = { {4,1}, {0,0}, {0,0}, {0,0}, {3,2}, {3,2}, {3,2}, {3,2} }
};

typedef struct {
    State current;
    int intensity;
    int activity;
} FBonya;

// Output dispatcher using enum IDs
void execute_y(FBonya* obj, Output y) {
    switch (y) {
        case Y2:
            // Custom y2 logic from your simulator class
            obj->intensity = 100; // Simulated GetDataSrc()
            obj->activity = 50;
            break;
        case Y1: /* default logic */ break;
        case Y3: /* init logic */ break;
        default: break;
    }
}

void step_fsa(FBonya* obj, InputBits in) {
    // Convert bitfield to index 0-7
    uint8_t idx = (in.x4 << 2) | (in.x3 << 1) | in.x2;
    
    Transition t = TBL_BONYA[obj->current][idx];
    
    if (t.next_state != 0 || t.output_id != 0) {
        obj->current = t.next_state;
        execute_y(obj, t.output_id);
    }
}

Промпт: convert to pure C with bitfield state machine do not use text fields

Для мелких - возможно это и выход, но если сложнее - нет. Железобетонный С нравился, когда я не был знаком с С++. После этого - железобетонно не нравится. Просто потому, что нет ООП.

Хейт к Виктории Боне роняет ценность вашей статьи.

Это шутка. Захотелось немного приколоться над действительностью :)

Шутка – это когда смешно.

Не всегда. Все определяется наличием чувства умора. Более того, шутки, на которыми "ржут", по большей части не самые достойные.

Я оценил и статью и шутку!

Спасибо! :)

По поводу чего хейт? Это ж вроде какая-то инстаграмщица, одна из тысяч.

Которая, к тому же, считает, что вышки связи 5G создаются для облучения населения "микроволными волнами" и снижения иммунитета, а пандемия в 20-х была создана искуственно для чипирования людей под видом вакцинации по плану Билла Гейтса :) в общем, не знаю, откуда и почему у неё столько защитников на данной платформе

А хейт к её оппоненту в недавнем споре - поднимает.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации