最近在我从事的一个项目中“修复”了一个错误,但到目前为止,没有人能够解释修复工作的原因。(那么它真的是一个修复吗?)代码是在实时系统下的内核空间中运行的,所以这个问题会导致系统完全锁定。这也使得调试比平常更难。
此版本使系统崩溃:
int dups[EMCMOT_MAX_AXIS] = {0};
char *coords = coordinates;
char coord_letter[] = {'X','Y','Z','A','B','C','U','V','W'};
这个版本不崩溃
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