在使用Arduino的资源库对STM32编程时,出现:
error: ordered comparison of pointer with integer zero ('byte*' {aka 'unsigned char*'} and 'int')
编译错误的解决方法。
Arduino因其开源和易用性,丰富的三方资源,受到很多人的喜欢,但在使用Arduino的资源库对STM32编程时,编译时需要用到xpack-arm-none-eabi-gcc库。这就使得原本在avr-gcc库中的代码,在用xpack-arm-none-eabi-gcc编译时,编译时错误,本文给出一个编译错误的解决实例,从而起到抛砖引玉的作用。
笔者在用Nucleo开发板,用Arduino测试RFID时,编译出现如下错误:
错误的文字内容如下:
e:\WorkDir\Arduino\libraries\MFRC522\src\MFRC522Extended.cpp: In member function 'MFRC522::StatusCode MFRC522Extended::TCL_Transceive(TagInfo*, byte*, byte, byte*, byte*)':
e:\WorkDir\Arduino\libraries\MFRC522\src\MFRC522Extended.cpp:824:34: error: ordered comparison of pointer with integer zero ('byte*' {aka 'unsigned char*'} and 'int')
824 | if (backData && (backLen > 0)) {
| ~~~~~~~~^~~
e:\WorkDir\Arduino\libraries\MFRC522\src\MFRC522Extended.cpp:847:42: error: ordered comparison of pointer with integer zero ('byte*' {aka 'unsigned char*'} and 'int')
847 | if (backData && (backLen > 0)) {
|
分析上述提示信息可知,函数MFRC522Extended.cpp中的第824行的34字符处,以及第847行第的42字符处,出现了指针和整数0的比较。按提示信息修改上述程序就可以了,方法如下:
按提示文件的路径(e:\WorkDir\Arduino\libraries\MFRC522\src\MFRC522Extended.cpp)打开该文件,找到编译错误的地方,第824行~826行代码为:
if (backData && (backLen > 0)) {
if (*backLen < in.inf.size)
return STATUS_NO_ROOM;
第847行~849行代码为:
if (backData && (backLen > 0)) {
if ((*backLen + ackDataSize) > totalBackLen)
return STATUS_NO_ROOM;
将第824行和第847行处的0,改为(byte *)0,修改后的代码分别为:
if (backData && (backLen > (byte *)0)) {
if (*backLen < in.inf.size)
return STATUS_NO_ROOM;
if (backData && (backLen > (byte *)0)) {
if ((*backLen + ackDataSize) > totalBackLen)
return STATUS_NO_ROOM;
重新编译,看看是不是完美通过了?!
^_^
enjoy!