Чуть подшаманил "хешегенератор"
Feb. 4th, 2023 12:22 pmПонемногу вожусь с "дофигамоторным" контроллером. Решил сразу протокол делать не с кучей самописных аналогов strcmp, а на основе switch с хешем команды. Для этого взял свой "хешегенератор" и немного переделал: добавил в коды возврата отрицательные ("функция не найдена" и "неверный формат команды"). Функция parsecmd теперь не портит входную строку, что позволяет давать команды с номерами, не отделяя их от команды пробелом (например, goto0=-400, stop5 и т.п.). Старая возможность — номер через пробел — тоже осталась. А в файл test.c я поместил пример работы, когда для нескольких обработчиков используется одна функция (в этом-то случае и нужно в нее hash передавать — чтобы она знала, кто именно ее вызвал). Скажем, есть команды-геттеры вообще без параметров (типа vdd, time или temp) — обрабатываем их одной функцией. Для тех, что с параметрами и номером, сначала вызываем функцию разделения "хвоста" на номер и параметр, а потом, если все ОК, вызываем дальше уже нужную функцию, куда передаем лишь эти найденные номера и строку (которую сразу в число в этой же функции нужно превратить, если у всей группы в качестве параметра int используется). Скажем, move_motor(uint8_t nmotor, int32_t nsteps)…