Недавно в проекте, над которым я работаю, была исправлена ошибка, но до сих пор никто не смог объяснить, почему исправление работает. (Так это действительно исправление?) Код работает в пространстве ядра в системе реального времени, поэтому проблема вызывает полную блокировку системы. Это делает отладку сложнее, чем обычно.
В этой версии происходит сбой системы:
int dups[EMCMOT_MAX_AXIS] = {0};
char *coords = coordinates;
char coord_letter[] = {'X','Y','Z','A','B','C','U','V','W'};
Эта версия не поддерживает sh
int dups[EMCMOT_MAX_AXIS];
char *coords = coordinates;
char coord_letter[] = {'X','Y','Z','A','B','C','U','V','W'};
int i;
for (i=0; i<EMCMOT_MAX_AXIS; i++) {dups[i] = 0;}
Чтобы запутать ситуацию, эта экспериментальная версия также дает сбой
int dups[EMCMOT_MAX_AXIS] = {0};
char *coords = coordinates;
char coord_letter[] = {'X','Y','Z','A','B','C','U','V','W'};
int i;
for (i=0; i<EMCMOT_MAX_AXIS; i++) {dups[i] = 0;}
Вы можете увидеть коммит и окружающий код здесь: https://github.com/LinuxCNC/linuxcnc/commit/ef6f36a16c7789af258d34adf4840d965f4c0b10