|
本帖最后由 ngxxczlwh 于 2020-3-4 20:41 编辑
前几天,在用好好搭搭在线编程软件给我的Nano自动避障小车编写程序时,出现了一个问题。虽然现在看来是个小问题,但在当时看来是莫名其妙的bug,使得程序的编制停滞不前了。所以现在就想把编程中出现的问题,走过的弯路写下来分享给和我一样的初学者。
问题描述:
当时是在写Nano的智能小车,我将小车的各项功能都写成了函数,如:前进、后退、左转、右转、停止等等。这些函数单独调试时,小车都能正常的运转。在写另一个模块时,我需要调用这些函数,但是当时就出现了诡异的现象:调用前面的部分函数时,如前进、后退时,一切正常,但是当调用另一些函数时,却提示“编译错误”,而且没有任何其他的任何编译信息。程序陷入的僵局,无法进行下去了。
分析原因:
问题出来了却找不到错误所在,原因是好好搭搭在线编程软件没有给出编译信息。在祝老师的提醒下,我在离线版软件里把程序又重新编了一下。这次,离线版软件顺利给出了错误提示。
从上图可以看出,虽然我定义了一个函数stop_car(),但编译程序却提示没有声明stop_car。
研究程序的源代码(字符代码)发现,stop_car()函数定义在要调用它的函数后面了,影响其他函数调用它了。
明白了其中的道理后,修改程序就简单了,讲被其他函数调用的函数先写,放在前面(图形化编程时放在上面),问题就迎刃而解了。
经验总结:
1.遇到疑难的问题却得不到有效的错误提示时,建议使用离线版的软件进行编译,这样会给出编译信息,指出错误所在。
2.好好搭搭在线编程软件虽然是图形化编程软件,看似是在拼积木,但实际上定义的函数还是有先后关系的,这体现在上下位置关系。所以,如果定义了两个函数A和B,其中,B函数中要调用函数A,那么就要求函数A应该在函数B前定义,图形化编程时函数A的定义模块应该在函数B定义模块的上方。
|
|